module ClientSideValidations::ActiveModel::Validations

Constants

ATTRIBUTES_DENYLIST

Public Instance Methods

client_side_validation_hash(force = nil) click to toggle source
# File lib/client_side_validations/active_model.rb, line 55
def client_side_validation_hash(force = nil)
  _validators.inject({}) do |attr_hash, attr|
    next attr_hash if ATTRIBUTES_DENYLIST.include?(attr[0])

    validator_hash = validator_hash_for(attr, force)

    if validator_hash.present?
      attr_hash.merge!(attr[0] => validator_hash)
    else
      attr_hash
    end
  end
end

Private Instance Methods

can_force_validator?(attr, validator, force) click to toggle source
# File lib/client_side_validations/active_model.rb, line 149
def can_force_validator?(attr, validator, force)
  case force
  when TrueClass
    true
  when Hash
    case force[attr]
    when TrueClass
      true
    when Hash
      force[attr][validator.kind]
    else
      false
    end
  else
    false
  end
end
can_use_for_client_side_validation?(attr, validator, force) click to toggle source
# File lib/client_side_validations/active_model.rb, line 91
def can_use_for_client_side_validation?(attr, validator, force)
  return false if validator_turned_off?(attr, validator, force)

  result = check_new_record(validator)
  result &&= validator.kind != :block

  if validator.options[:if] || validator.options[:unless]
    check_conditionals attr, validator, force
  else
    result
  end
end
check_conditionals(attr, validator, force) click to toggle source
# File lib/client_side_validations/active_model.rb, line 113
def check_conditionals(attr, validator, force)
  return true if validator.options[:if] && will_save_change?(validator.options[:if])

  result = can_force_validator?(attr, validator, force)

  if validator.options[:if]
    result &&= run_conditionals(validator.options[:if], :if)
  end

  if validator.options[:unless]
    result &&= run_conditionals(validator.options[:unless], :unless)
  end

  result
end
check_new_record(validator) click to toggle source

Yeah yeah, new_record? is not part of ActiveModel :p

# File lib/client_side_validations/active_model.rb, line 105
def check_new_record(validator)
  (respond_to?(:new_record?) && validator.options[:on] == (new_record? ? :create : :update)) || validator.options[:on].nil?
end
extract_force_option(attr, force) click to toggle source
# File lib/client_side_validations/active_model.rb, line 82
def extract_force_option(attr, force)
  case force
  when FalseClass, TrueClass, NilClass
    force
  when Hash
    extract_force_option(nil, force[attr])
  end
end
validator_hash_for(attr, force) click to toggle source
# File lib/client_side_validations/active_model.rb, line 71
def validator_hash_for(attr, force)
  attr[1].each_with_object(Hash.new { |h, k| h[k] = [] }) do |validator, kind_hash|
    next unless can_use_for_client_side_validation?(attr[0], validator, force)

    client_side_hash = validator.client_side_hash(self, attr[0], extract_force_option(attr[0], force))
    if client_side_hash
      kind_hash[validator.kind] << client_side_hash.except(:on, :if, :unless)
    end
  end
end
validator_turned_off?(attr, validator, force) click to toggle source
# File lib/client_side_validations/active_model.rb, line 129
def validator_turned_off?(attr, validator, force)
  return true if ::ClientSideValidations::Config.disabled_validators.include?(validator.kind)

  case force
  when FalseClass
    true
  when Hash
    case force[attr]
    when FalseClass
      true
    when Hash
      force[attr][validator.kind] == false
    else
      false
    end
  else
    false
  end
end
will_save_change?(options) click to toggle source
# File lib/client_side_validations/active_model.rb, line 109
def will_save_change?(options)
  options.is_a?(Symbol) && (options.to_s.end_with?('changed?') || options.to_s.start_with?('will_save_change_to'))
end