module SampleModels::AttributeSequence

Public Class Methods

build(pass, model, column, force_unique, force_email_format) click to toggle source
# File lib/sample_models/attribute_sequence.rb, line 3
def self.build(pass, model, column, force_unique, force_email_format)
  sequence = source(pass, model, column, force_email_format)
  validations = model.validations(column.name)
  if (v = validations.detect(&:uniqueness?)) || force_unique
    v ||= Model::Validation.new(:validates_uniqueness_of) 
    sequence = UniquenessFilter.new(model, column, v, sequence)
  end 
  sequence
end
source(pass, model, column, force_email_format) click to toggle source
# File lib/sample_models/attribute_sequence.rb, line 13
def self.source(pass, model, column, force_email_format)
  validations = model.validations(column.name)
  belongs_to_assocs = model.belongs_to_associations
  if force_email_format
    EmailSource.new
  elsif assoc = belongs_to_assocs.detect { |a| a.foreign_key == column.name }
    if validations.any?(&:presence?)
      RequiredBelongsToSource.new(assoc)
    elsif pass == :first
      FirstPassBelongsToSource.new
    else
      SecondPassBelongsToSource.new(model, assoc)
    end
  elsif validations.any?(&:email_format?)
    EmailSource.new
  elsif v = validations.detect(&:inclusion?)
    InclusionSource.new(v)
  elsif v = validations.detect(&:length?)
    LengthSource.new(v)
  else
    SimpleSource.new(column)
  end
end