class ActiveModelExtensions::Validations::CustomPresenceValidator

The string is a CSV of required field rules, where each field rule is:

- the name of a required field
- OR a set of required field names spearated by 'or' (where only ONE is required)

Public Instance Methods

validate(record) click to toggle source
# File lib/rails_core_extensions/active_model_extensions.rb, line 21
def validate(record)
  required_fields = Array.wrap(@options[:attributes]).first.call || []
  return if required_fields.empty?

  required_fields.flatten.each do |required_field|
    if required_field.include? ' or '
      fields = required_field.split(' or ')
      if fields.all? { |field| record.send(field).to_s.blank? }
        record.errors.add(:base, "One of %s is required" % fields.map(&:humanize).to_sentence)
      end
    else
      if record.send(required_field).to_s.blank?
        record.errors.add(required_field, "is required")
      end
    end
  end

end