class Babylonia::Rails::Validators::LocalesValidator

Attributes

validators[R]

Public Instance Methods

validate_each(record, attribute, value) click to toggle source
# File lib/babylonia/rails/validators/locale_validator.rb, line 12
def validate_each(record, attribute, value)
  @validators = {}
  record.available_locales.each do |lang|
    validations = ActiveRecord::VERSION::MAJOR < 4 ? [:acceptance, :exclusion, :format, :inclusion, :length, :numericality, :presence, :uniqueness] : [:absence, :acceptance, :exclusion, :format, :inclusion, :length, :numericality, :presence, :uniqueness]
    validations.each do |validation|
      add_validator validation, attribute, lang if should_validate?(validation, lang)
    end
  end
    
  validators.each do |validator, attributes|
    if validator == :uniqueness
      Babylonia::Rails::Validators::LocaleUniquenessValidator.new(validator_attributes(validator, attributes)).validate(record)
    else
      "ActiveModel::Validations::#{validator.to_s.classify}Validator".constantize.new(validator_attributes(validator, attributes)).validate(record)
    end
  end
end

Private Instance Methods

add_validator(validator, attribute, lang) click to toggle source
# File lib/babylonia/rails/validators/locale_validator.rb, line 32
def add_validator validator, attribute, lang
  @validators ||= {}
  if validator == :uniqueness
    @validators[validator] ||= { attributes: {} }
    @validators[validator][:attributes].merge! lang => attribute
  else
    @validators[validator] ||= { attributes: [] }
    @validators[validator][:attributes] << :"#{attribute}_#{lang}"
  end
end
locale_included_in_validation_options?(validation_name, lang) click to toggle source
# File lib/babylonia/rails/validators/locale_validator.rb, line 51
def locale_included_in_validation_options?(validation_name, lang)
  options[validation_name][:locales].blank? || options[validation_name][:locales].include?(lang)
end
should_validate?(option, lang) click to toggle source
# File lib/babylonia/rails/validators/locale_validator.rb, line 43
def should_validate?(option, lang)
  if [:presence, :absence, :uniqueness, :numericality].include?(option)
    options[option] == true || (options[option].is_a?(Array) && options[option].include?(lang)) || (options[option].is_a?(Hash) && locale_included_in_validation_options?(option, lang))
  else
    options[option].is_a?(Hash) && locale_included_in_validation_options?(option, lang)
  end
end
validator_attributes(validator, attributes) click to toggle source
# File lib/babylonia/rails/validators/locale_validator.rb, line 55
def validator_attributes(validator, attributes)
  options[validator].is_a?(Hash) ? options[validator].delete_if{|k,v| k == :locales}.merge(attributes) : attributes
end