Module: Explicit::Spec::Integer

Extended by:
Integer
Included in:
Integer
Defined in:
lib/explicit/spec/integer.rb

Instance Method Summary collapse

Instance Method Details

#build(options) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/explicit/spec/integer.rb', line 6

def build(options)
  lambda do |value|
    value =
      if value.is_a?(::Integer)
        value
      elsif value.is_a?(::String) && options[:parse]
        parse_from_string(value)
      else
        nil
      end

    return [:error, :integer] if value.nil?

    if (min = options[:min]) && !validate_min(value, min)
      return [:error, [:min, min]]
    end

    if (max = options[:max]) && !validate_max(value, max)
      return [:error, [:max, max]]
    end

    if options[:negative] == false && value < 0
      return [:error, :negative]
    end

    if options[:positive] == false && value > 0
      return [:error, :positive]
    end

    [:ok, value]
  end
end