Module: Aequitas::Rule::Length

Included in:
Dummy, Equal, Maximum, Minimum, Range
Defined in:
lib/aequitas/rule/length.rb,
lib/aequitas/rule/length/equal.rb,
lib/aequitas/rule/length/range.rb,
lib/aequitas/rule/length/maximum.rb,
lib/aequitas/rule/length/minimum.rb

Defined Under Namespace

Classes: Dummy, Equal, Maximum, Minimum, Range

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.new(attribute_name, options) ⇒ Object

TODO: move options normalization into the validator macros



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/aequitas/rule/length.rb', line 15

def self.new(attribute_name, options)
  options = options.dup

  equal   = options.values_at(:is,  :equals).compact.first
  range   = options.values_at(:in,  :within).compact.first
  minimum = options.values_at(:min, :minimum).compact.first
  maximum = options.values_at(:max, :maximum).compact.first

  if minimum && maximum
    range ||= minimum..maximum
  end

  if equal
    Length::Equal.new(attribute_name,   options.merge(:expected => equal))
  elsif range
    Length::Range.new(attribute_name,   options.merge(:range => range))
  elsif minimum
    Length::Minimum.new(attribute_name, options.merge(:bound => minimum))
  elsif maximum
    Length::Maximum.new(attribute_name, options.merge(:bound => maximum))
  else
    # raise ArgumentError, "expected one of :is, :equals, :within, :in, :minimum, :min, :maximum, or :max; got #{options.keys.inspect}"
    warn "expected length specification: one of :is, :equals, :in, :within, :min, :minimum, :max, or :maximum; got #{options.keys.inspect}"
    Length::Dummy.new(attribute_name, options)
  end
end

.rules_for(attribute_name, options) ⇒ Object

TODO: DRY this up (also implemented in Rule)



10
11
12
# File 'lib/aequitas/rule/length.rb', line 10

def self.rules_for(attribute_name, options)
  Array(new(attribute_name, options))
end

Instance Method Details

#valid?(resource) ⇒ Boolean

Returns:

  • (Boolean)


46
47
48
49
50
# File 'lib/aequitas/rule/length.rb', line 46

def valid?(resource)
  value = attribute_value(resource)

  skip?(value) || valid_length?(value_length(value.to_s))
end