Module: ValidateArgs::Validators

Defined in:
lib/validate_args/validators.rb

Constant Summary collapse

@@validators =
Hash.new({})

Class Method Summary collapse

Class Method Details

.get_validator(owner, meth) ⇒ Object



21
22
23
# File 'lib/validate_args/validators.rb', line 21

def get_validator(owner, meth)
  @@validators[owner][meth]
end

.register_validator(owner, meth, rules, __proxy__) ⇒ Object



10
11
12
13
14
15
16
17
18
19
# File 'lib/validate_args/validators.rb', line 10

def register_validator(owner, meth, rules, __proxy__)
  rules = [rules] unless rules.is_a? Array
  @@validators[owner][meth] = rules.map {|rule| Data::Validator.new(rule) }
  __proxy__.module_eval do
    define_method(meth) do |*args|
      ::ValidateArgs::Validators.validate!(self, meth, args)
      super(*args)
    end
  end
end

.validate!(owner, meth, args) ⇒ Object

Raises:



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/validate_args/validators.rb', line 25

def validate!(owner, meth, args)
  rules = get_validator(owner, meth)
  errors = []
  rules.zip(args).each_with_index do |(rule, arg), i|
    if rule and arg
      begin
        rule.validate(arg)
      rescue ::Data::Validator::Error => e
        errors[i] = e.message
      end
    end
  end
  raise ArgumentTypeError, ErrorPrinter.new(owner, meth, errors).to_s if !errors.empty?
  true
end