module UseCaseValidations::Validations::HelperMethods

Public Instance Methods

_merge_attributes(attr_names) click to toggle source
# File lib/usecasing_validations/validations/helper_methods.rb, line 6
def _merge_attributes(attr_names)
  options = Helpers._symbolyze_keys(Helpers._extract_options!(attr_names))
  attr_names.flatten!
  options[:attributes] = attr_names
  options
end
validates_format_of(*attr_names) click to toggle source

Validates whether the value of the specified attribute is of the correct form, going by the regular expression provided.You can require that the attribute matches the regular expression:

class Person < ActiveRecord::Base
  validates_format_of :email, with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i, on: :create
end

Alternatively, you can require that the specified attribute does not match the regular expression:

class Person < ActiveRecord::Base
  validates_format_of :email, without: /NOSPAM/
end

You can also provide a proc or lambda which will determine the regular expression that will be used to validate the attribute.

class Person < ActiveRecord::Base
  # Admin can have number as a first letter in their screen name
  validates_format_of :screen_name,
                      with: ->(person) { person.admin? ? /\A[a-z0-9][a-z0-9_\-]*\z/i : /\A[a-z][a-z0-9_\-]*\z/i }
end

Note: use \A and \Z to match the start and end of the string, ^ and $ match the start/end of a line.

Due to frequent misuse of ^ and $, you need to pass the multiline: true option in case you use any of these two anchors in the provided regular expression. In most cases, you should be using \A and \z.

You must pass either :with or :without as an option. In addition, both must be a regular expression or a proc or lambda, or else an exception will be raised.

Configuration options:

  • :message - A custom error message (default is: “is invalid”).

  • :allow_nil - If set to true, skips this validation if the attribute is nil (default is false).

  • :allow_blank - If set to true, skips this validation if the attribute is blank (default is false).

  • :with - Regular expression that if the attribute matches will result in a successful validation. This can be provided as a proc or lambda returning regular expression which will be called at runtime.

  • :without - Regular expression that if the attribute does not match will result in a successful validation. This can be provided as a proc or lambda returning regular expression which will be called at runtime.

  • :multiline - Set to true if your regular expression contains anchors that match the beginning or end of lines as opposed to the beginning or end of the string. These anchors are ^ and $.

There is also a list of default options supported by every validator: :if, :unless, :on and :strict. See ActiveModel::Validation#validates for more information

# File lib/usecasing_validations/validations/format.rb, line 110
def validates_format_of(*attr_names)
  validates_with FormatValidator, _merge_attributes(attr_names)
end
validates_length_of(*attr_names) click to toggle source

Validates that the specified attribute matches the length restrictions supplied. Only one option can be used at a time:

class Person < ActiveRecord::Base
  validates_length_of :first_name, maximum: 30
  validates_length_of :last_name, maximum: 30, message: "less than 30 if you don't mind"
  validates_length_of :fax, in: 7..32, allow_nil: true
  validates_length_of :phone, in: 7..32, allow_blank: true
  validates_length_of :user_name, within: 6..20, too_long: 'pick a shorter name', too_short: 'pick a longer name'
  validates_length_of :zip_code, minimum: 5, too_short: 'please enter at least 5 characters'
  validates_length_of :smurf_leader, is: 4, message: "papa is spelled with 4 characters... don't play me."
  validates_length_of :essay, minimum: 100, too_short: 'Your essay must be at least 100 words.',
                      tokenizer: ->(str) { str.scan(/\w+/) }
end

Configuration options:

  • :minimum - The minimum size of the attribute.

  • :maximum - The maximum size of the attribute. Allows nil by default if not used with :minimum.

  • :is - The exact size of the attribute.

  • :within - A range specifying the minimum and maximum size of the attribute.

  • :in - A synonym (or alias) for :within.

  • :allow_nil - Attribute may be nil; skip validation.

  • :allow_blank - Attribute may be blank; skip validation.

  • :too_long - The error message if the attribute goes over the maximum (default is: “is too long (maximum is %{count} characters)”).

  • :too_short - The error message if the attribute goes under the minimum (default is: “is too short (min is %{count} characters)”).

  • :wrong_length - The error message if using the :is method and the attribute is the wrong size (default is: “is the wrong length (should be %{count} characters)”).

  • :message - The error message to use for a :minimum, :maximum, or :is violation. An alias of the appropriate too_long/too_short/wrong_length message.

  • :tokenizer - Specifies how to split up the attribute string. (e.g. tokenizer: ->(str) { str.scan(/\w+/) } to count words as in above example). Defaults to ->(value) { value.split(//) } which counts individual characters.

There is also a list of default options supported by every validator: :if, :unless, :on and :strict. See ActiveModel::Validation#validates for more information

# File lib/usecasing_validations/validations/length.rb, line 119
def validates_length_of(*attr_names)
  validates_with LengthValidator, _merge_attributes(attr_names)
end
Also aliased as: validates_size_of
validates_numericality_of(*attr_names) click to toggle source
# File lib/usecasing_validations/validations/numericality.rb, line 84
def validates_numericality_of(*attr_names)
  validates_with NumericalityValidator, _merge_attributes(attr_names)
end
validates_presence_of(*attr_names) click to toggle source
# File lib/usecasing_validations/validations/presence.rb, line 11
def validates_presence_of(*attr_names)
  validates_with PresenceValidator, _merge_attributes(attr_names)
end
validates_size_of(*attr_names)
Alias for: validates_length_of