class ActiveConformity::ObjectValidator

Attributes

conformity_set[RW]
conforms[RW]
errors[RW]
obj[RW]
validator[RW]
validator_klass[RW]

Public Class Methods

new(obj, conformity_set) click to toggle source
# File lib/active_conformity/object_validator.rb, line 40
def initialize(obj, conformity_set)
  @obj = obj
  @conformity_set = ::HashWithIndifferentAccess.new(conformity_set)
  @errors = {}
  create_validator_klass
end

Public Instance Methods

conforms?() click to toggle source
# File lib/active_conformity/object_validator.rb, line 47
def conforms?
  @conforms = true if @conformity_set.blank?
  check_conformity
  remove_dynamic_validator
  @conforms
end

Private Instance Methods

call_validation_method(attr, rule) click to toggle source
# File lib/active_conformity/object_validator.rb, line 80
def call_validation_method(attr, rule)
  if attr.to_sym == :method
    if rule.is_a?(String)
      rule_name = rule.to_sym
    elsif rule.is_a?(Hash)
      rule_name = rule[:name].to_sym
      set_custom_method_arguments(rule[:arguments])
    end

    @validator_klass.validate rule_name
  else
    @validator_klass.validates attr, reify_rule(rule)
  end
end
check_conformity() click to toggle source
# File lib/active_conformity/object_validator.rb, line 71
def check_conformity
  @validator = @validator_klass.new(@obj)
  @conformity_set.each do |attr,rule|
    call_validation_method(attr, rule)
  end
  @conforms = @validator.valid?
  @errors = @validator.errors
end
create_validator_klass() click to toggle source
# File lib/active_conformity/object_validator.rb, line 66
def create_validator_klass
  validator_klass_name = (0...50).map { ('A'..'Z').to_a[rand(26)] }.join
  @validator_klass = Object.const_set(validator_klass_name, Class.new(DynamicValidator))
end
remove_dynamic_validator() click to toggle source
# File lib/active_conformity/object_validator.rb, line 62
def remove_dynamic_validator
  Object.send(:remove_const, @validator_klass.name.to_sym)
end
set_custom_method_arguments(args_hash) click to toggle source
# File lib/active_conformity/object_validator.rb, line 95
def set_custom_method_arguments(args_hash)
  args_hash.each{ |k,v| @validator.method_args[k] = v }
end