lib/hash_validator/validators/lambda_validator.rb
class HashValidator::Validator::LambdaValidator < HashValidator::Validator::Base
def initialize
super('_lambda') # The name of the validator, underscored as it won't usually be directly invoked (invoked through use of validator)
end
def should_validate?(rhs)
if rhs.is_a?(Proc)
if rhs.arity == 1
true
else
raise HashValidator::Validator::LambdaValidator::InvalidArgumentCount.new("Lambda validator should only accept one argument, supplied lambda accepts #{rhs.arity}.")
end
else
false
end
end
def presence_error_message
'is not valid'
end
def validate(key, value, lambda, errors)
unless lambda.call(value)
errors[key] = presence_error_message
end
rescue
errors[key] = presence_error_message
end
end
class HashValidator::Validator::LambdaValidator::InvalidArgumentCount < StandardError
end
HashValidator.append_validator(HashValidator::Validator::LambdaValidator.new)