class ValidationProfiler::Rules::ConditionValidationRule

Defines the ConditionValidationRule class

Public Instance Methods

confirm_expression?(value_a, expression, value_b) click to toggle source
# File lib/validation_profiler/rules/condition_validation_rule.rb, line 66
def confirm_expression?(value_a, expression, value_b)
  a = value_a
  b = value_b

  a.public_send(expression.to_s, b)
end
error_message(field, attributes = {}, parent = nil) click to toggle source
# File lib/validation_profiler/rules/condition_validation_rule.rb, line 5
def error_message(field, attributes = {}, parent = nil)
  field_name = field.to_s
  field_name = "#{parent}.#{field}" unless parent.nil?

  # check if a custom error message has been specified in the attributes
  if attributes[:message].nil?
    # no custom error message has been specified so create the default message.
    "#{field_name} is not valid"
  else
    attributes[:message]
  end
end
validate(obj, field, attributes, _parent = nil) click to toggle source
# File lib/validation_profiler/rules/condition_validation_rule.rb, line 18
def validate(obj, field, attributes, _parent = nil)
  # attempt to get the field value from the object
  value = get_field_value(obj, field)

  condition_field = attributes[:condition_field]
  if condition_field.nil?
    raise ValidationProfiler::Exceptions::InvalidValidationRuleAttributes
      .new(ValidationProfiler::Rules::ConditionValidationRule, field)
  end

  condition_value = attributes[:condition_value]
  if condition_value.nil?
    raise ValidationProfiler::Exceptions::InvalidValidationRuleAttributes
      .new(ValidationProfiler::Rules::ConditionValidationRule, field)
  end

  condition_expression = attributes[:condition_expression]
  if condition_expression.nil?
    raise ValidationProfiler::Exceptions::InvalidValidationRuleAttributes
      .new(ValidationProfiler::Rules::ConditionValidationRule, field)
  end

  field_expression = attributes[:field_expression]
  if field_expression.nil?
    raise ValidationProfiler::Exceptions::InvalidValidationRuleAttributes
      .new(ValidationProfiler::Rules::ConditionValidationRule, field)
  end

  field_value = attributes[:field_value]
  if field_value.nil?
    raise ValidationProfiler::Exceptions::InvalidValidationRuleAttributes
      .new(ValidationProfiler::Rules::ConditionValidationRule, field)
  end

  return true unless is_required?(value, attributes)

  condition_field_value = get_field_value(obj, condition_field)

  # check if the condition is valid
  if confirm_expression?(condition_field_value, condition_expression, condition_value)
    # check if the field value is correct for the condition
    return false unless confirm_expression?(value, field_expression, field_value)
    return true
  end

  true
end