Class: Flapjack::ArgumentValidator

Inherits:
Object
  • Object
show all
Defined in:
lib/flapjack-diner/argument_validator.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(query = {}) ⇒ ArgumentValidator

Returns a new instance of ArgumentValidator.



5
6
7
8
# File 'lib/flapjack-diner/argument_validator.rb', line 5

def initialize(query = {})
  @errors = []
  @query = query
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name, *args) ⇒ Object (private)



72
73
74
75
76
77
78
79
80
# File 'lib/flapjack-diner/argument_validator.rb', line 72

def method_missing(name, *args)
  klass = classify_name(name)
  return super if klass.nil?
  elements = args
  elements.each do |element|
    next if @query[element].nil? || @query[element].is_a?(klass)
    @errors << "'#{element}' is expected to be a #{klass}"
  end
end

Instance Attribute Details

#queryObject (readonly)

Returns the value of attribute query.



3
4
5
# File 'lib/flapjack-diner/argument_validator.rb', line 3

def query
  @query
end

Instance Method Details

#validate(args) ⇒ Object

Raises:

  • (ArgumentError)


10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/flapjack-diner/argument_validator.rb', line 10

def validate(args)
  args = args.dup
  validations = args.delete(:as)
  validations = [validations] unless validations.is_a?(Array)

  elements = args[:query]

  unless elements.nil?
    elements = [elements] unless elements.is_a?(Array)
    validations.each {|v| __send__(v.to_s.downcase, *elements) }
  end

  raise(ArgumentError, @errors.join('; ')) unless @errors.empty?
end