class ActiveRecord::Import::Validator

def initialize(validators, options = {})

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

def valid_model?(model)

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

def validate?(validator, model)

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