Class: FileSizeValidator
- Inherits:
-
ActiveModel::EachValidator
- Object
- ActiveModel::EachValidator
- FileSizeValidator
- Defined in:
- lib/file_size_validator.rb
Defined Under Namespace
Classes: Helper
Constant Summary collapse
- MESSAGES =
{ is: :wrong_size, minimum: :size_too_small, maximum: :size_too_big }.freeze
- CHECKS =
{ is: :==, minimum: :>=, maximum: :<= }.freeze
- DEFAULT_TOKENIZER =
-> (value) { value.split("") }.freeze
- RESERVED_OPTIONS =
[:minimum, :maximum, :within, :is, :tokenizer, :too_short, :too_long].freeze
Instance Method Summary collapse
- #check_validity! ⇒ Object
- #help ⇒ Object
-
#initialize(options) ⇒ FileSizeValidator
constructor
A new instance of FileSizeValidator.
- #validate_each(record, attribute, value) ⇒ Object
Constructor Details
#initialize(options) ⇒ FileSizeValidator
Returns a new instance of FileSizeValidator.
10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/file_size_validator.rb', line 10 def initialize() if range = (.delete(:in) || .delete(:within)) raise ArgumentError, ":in and :within must be a Range" unless range.is_a?(Range) [:minimum] = range.begin [:maximum] = range.end [:maximum] -= 1 if range.exclude_end? end super end |
Instance Method Details
#check_validity! ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/file_size_validator.rb', line 22 def check_validity! keys = CHECKS.keys & .keys if keys.empty? raise ArgumentError, 'Range unspecified. Specify the :within, :maximum, :minimum, or :is option.' end keys.each do |key| value = [key] unless (value.is_a?(Integer) && value >= 0) || value.is_a?(Symbol) raise ArgumentError, ":#{key} must be a nonnegative Integer or symbol" end end end |
#help ⇒ Object
69 70 71 |
# File 'lib/file_size_validator.rb', line 69 def help Helper.instance end |
#validate_each(record, attribute, value) ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/file_size_validator.rb', line 38 def validate_each(record, attribute, value) raise(ArgumentError, "A CarrierWave::Uploader::Base object was expected") unless value.is_a? CarrierWave::Uploader::Base value = ([:tokenizer] || DEFAULT_TOKENIZER).call(value) if value.is_a?(String) CHECKS.each do |key, validity_check| next unless check_value = [key] check_value = case check_value when Integer check_value when Symbol record.public_send(check_value) # rubocop:disable GitlabSecurity/PublicSend end value ||= [] if key == :maximum value_size = value.size next if value_size.public_send(validity_check, check_value) # rubocop:disable GitlabSecurity/PublicSend = .except(*RESERVED_OPTIONS) [:file_size] = help.number_to_human_size check_value = [MESSAGES[key]] [:message] ||= if record.errors.add(attribute, MESSAGES[key], **) end end |