class SampleModels::Initializer

Public Instance Methods

intercept_validation_definition(validation, recipient) click to toggle source
# File lib/sample_models/initializer.rb, line 8
def intercept_validation_definition(validation, recipient)
  method_name = "#{validation}_with_sample_models".to_sym
  recipient.send(:define_method, method_name) do |*args|
    send "#{validation}_without_sample_models".to_sym, *args
    SampleModels.models[self].record_validation(validation, *args)
  end
  recipient.alias_method_chain validation, :sample_models
end
intercept_validation_definitions() click to toggle source
# File lib/sample_models/initializer.rb, line 17
def intercept_validation_definitions
  validations_to_intercept = [
    :validates_email_format_of, :validates_inclusion_of,
    :validates_length_of, :validates_presence_of, :validates_uniqueness_of
  ]
  optional_interceptions = [:validates_email_format_of]
  validations_to_intercept.each do |validation|
    recipient = validation_recipients.detect { |vr|
      vr.method_defined?(validation)
    }
    if recipient
      intercept_validation_definition(validation, recipient)
    else
      unless optional_interceptions.include?(validation)
        raise "Can't find who defines the validation method #{validation}"
      end
    end
  end
end
run() click to toggle source
# File lib/sample_models/initializer.rb, line 3
def run
  ActiveRecord::Base.send(:include, SampleModels)
  intercept_validation_definitions
end
validation_recipients() click to toggle source
# File lib/sample_models/initializer.rb, line 37
def validation_recipients
  validation_recipients = [ActiveRecord::Validations::ClassMethods]
  if Object.const_defined?('ActiveModel')
    validation_recipients << ActiveModel::Validations::HelperMethods
  end
  if Object.const_defined?('ValidatesEmailFormatOf')
    validation_recipients <<  ValidatesEmailFormatOf::Validations
  end
  validation_recipients
end