Class: Attributor::Integer

Inherits:
Numeric
  • Object
show all
Defined in:
lib/attributor/types/integer.rb

Constant Summary collapse

EXAMPLE_RANGE =
1000

Class Method Summary collapse

Methods inherited from Numeric

family

Methods included from Type

included

Class Method Details

.example(_context = nil, options: {}) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/attributor/types/integer.rb', line 11

def self.example(_context = nil, options: {})
  validate_options(options)

  # Set default values
  if options[:min].nil? && options[:max].nil?
    min = 0
    max = EXAMPLE_RANGE
  elsif options[:min].nil?
    max = options[:max]
    min = max - EXAMPLE_RANGE
  elsif options[:max].nil?
    min = options[:min]
    max = min + EXAMPLE_RANGE
  else
    min = options[:min]
    max = options[:max]
  end

  # Generate random number on interval [min,max]
  rand(max - min + 1) + min
end

.load(value, context = Attributor::DEFAULT_ROOT_CONTEXT, **options) ⇒ Object



33
34
35
36
37
# File 'lib/attributor/types/integer.rb', line 33

def self.load(value, context = Attributor::DEFAULT_ROOT_CONTEXT, **options)
  Integer(value)
rescue TypeError
  super
end

.native_typeObject



7
8
9
# File 'lib/attributor/types/integer.rb', line 7

def self.native_type
  ::Integer
end

.validate_options(options) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/attributor/types/integer.rb', line 39

def self.validate_options(options)
  if options.key?(:min) && options.key?(:max)
    # Both :max and :min must be integers
    raise AttributorException, "Invalid range: [#{options[:min].inspect}, #{options[:max].inspect}]" if !options[:min].is_a?(::Integer) || !options[:max].is_a?(::Integer)

    # :max cannot be less than :min
    raise AttributorException, "Invalid range: [#{options[:min].inspect}, #{options[:max].inspect}]" if options[:max] < options[:min]
  elsif !options.key?(:min) && options.key?(:max)
    # :max must be an integer
    raise AttributorException, "Invalid range: [, #{options[:max].inspect}]" unless options[:max].is_a?(::Integer)
  elsif options.key?(:min) && !options.key?(:max)
    # :min must be an integer
    raise AttributorException, "Invalid range: [#{options[:min].inspect},]" unless options[:min].is_a?(::Integer)
    # Neither :min nor :max were given, noop
  end
  true
end