Class: ActiveRecord::Import::Validator

Inherits:
Object
  • Object
show all
Defined in:
lib/activerecord-import/import.rb

Instance Method Summary collapse

Constructor Details

#initialize(validators, options = {}) ⇒ Validator

Returns a new instance of Validator.



27
28
29
30
# File 'lib/activerecord-import/import.rb', line 27

def initialize(validators, options = {})
  @validators = validators
  @options    = options
end

Instance Method Details

#valid_model?(model) ⇒ Boolean

Returns:

  • (Boolean)


32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/activerecord-import/import.rb', line 32

def valid_model?(model)
  validation_context = @options[:validate_with_context]
  validation_context ||= (model.new_record? ? :create : :update)

  current_context = model.send(:validation_context)
  model.send(:validation_context=, validation_context)
  model.errors.clear

  validation_proc = lambda do
    @validators.each do |v|
      if validation_context == v.options.fetch(:on, validation_context)
        v.validate(model) if validate?(v, model)
      end
    end
  end

  if model.respond_to?(:run_validation_callbacks)
    model.send(:_run_validation_callbacks, &validation_proc)
  else
    model.send(:run_callbacks, :validation, &validation_proc)
  end

  model.send(:validation_context=, current_context)
  model.errors.empty?
end

#validate?(validator, model) ⇒ Boolean

Returns:

  • (Boolean)


58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/activerecord-import/import.rb', line 58

def validate?(validator, model)
  evaluate = lambda do |condition|
    case condition
    when String then model.instance_eval(condition)
    when Symbol then model.send(condition)
    when Proc then model.instance_eval(&condition)
    end
  end

  Array(validator.options[:if]).map(&evaluate).compact.all? &&
    !Array(validator.options[:unless]).map(&evaluate).compact.any?
end