Sha256: fa5c935b9c4cd35764cf496cd3d4bd26e6b584d369882d49d22f7f20453d9061

Contents?: true

Size: 1.04 KB

Versions: 3

Compression:

Stored size: 1.04 KB

Contents

class RelationLengthValidator < ActiveModel::EachValidator
  def validate_each(record, attribute, value)
    if smaller?(value)
      record.errors.add(attribute, smaller_error_message, options)
    elsif greater?(value)
      record.errors.add(attribute, greater_error_message, options)
    end
  end

  private

  def minimum
    options[:minimum] || 0
  end

  def maximum
    options[:maximum] || Float::INFINITY
  end

  def smaller?(value)
    value.length < minimum
  end

  def greater?(value)
    value.length > minimum
  end

  def smaller_error_message
    message = options[:message] && options[:message][:minimum]
    message || I18n.t(
      "activerecord.errors.relation_length_is_smaller",
      minimum: minimum,
      default: "must have at least #{ minimum } elements"
    )
  end

  def greater_error_message
    message = options[:message] && options[:message][:maximum]
    message || I18n.t(
      "activerecord.errors.relation_length_is_greater",
      maximum: maximum,
      default: "must have at most #{ maximum } elements"
    )
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
para-0.5.1 lib/rails/relation_length_validator.rb
para-0.5.0 lib/rails/relation_length_validator.rb
para-0.4.0 lib/rails/relation_length_validator.rb