Module: UseCaseValidations::Validations::HelperMethods

Defined in:
lib/usecasing_validations/validations/format.rb,
lib/usecasing_validations/validations/length.rb,
lib/usecasing_validations/validations/presence.rb,
lib/usecasing_validations/validations/uniqueness.rb,
lib/usecasing_validations/validations/numericality.rb,
lib/usecasing_validations/validations/helper_methods.rb

Instance Method Summary collapse

Instance Method Details

#_merge_attributes(attr_names) ⇒ Object



6
7
8
9
10
11
# 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) ⇒ Object

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



110
111
112
# 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) ⇒ Object Also known as: validates_size_of

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



119
120
121
# File 'lib/usecasing_validations/validations/length.rb', line 119

def validates_length_of(*attr_names)
  validates_with LengthValidator, _merge_attributes(attr_names)
end

#validates_numericality_of(*attr_names) ⇒ Object



84
85
86
# 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) ⇒ Object



11
12
13
# File 'lib/usecasing_validations/validations/presence.rb', line 11

def validates_presence_of(*attr_names)
  validates_with PresenceValidator, _merge_attributes(attr_names)
end

#validates_uniqueness_of(*attr_names) ⇒ Object



50
51
52
# File 'lib/usecasing_validations/validations/uniqueness.rb', line 50

def validates_uniqueness_of(*attr_names)
  validates_with UniquenessValidator, _merge_attributes(attr_names)
end