17 lines
		
	
	
		
			583 B
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			17 lines
		
	
	
		
			583 B
		
	
	
	
		
			Ruby
		
	
	
	
| # frozen_string_literal: true
 | |
| 
 | |
| class PollExpirationValidator < ActiveModel::Validator
 | |
|   MAX_EXPIRATION = 1.month.freeze
 | |
|   MIN_EXPIRATION = 5.minutes.freeze
 | |
| 
 | |
|   def validate(poll)
 | |
|     # We have a `presence: true` check for this attribute already
 | |
|     return if poll.expires_at.nil?
 | |
| 
 | |
|     current_time = Time.now.utc
 | |
| 
 | |
|     poll.errors.add(:expires_at, I18n.t('polls.errors.duration_too_long')) if poll.expires_at - current_time > MAX_EXPIRATION
 | |
|     poll.errors.add(:expires_at, I18n.t('polls.errors.duration_too_short')) if (poll.expires_at - current_time).ceil < MIN_EXPIRATION
 | |
|   end
 | |
| end
 |