module UseCaseValidations::Validations::HelperMethods
Public Instance Methods
# 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 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 isnil
(default isfalse
). -
:allow_blank
- If set to true, skips this validation if the attribute is blank (default isfalse
). -
: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 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. Allowsnil
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 benil
; 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 appropriatetoo_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
# File lib/usecasing_validations/validations/numericality.rb, line 84 def validates_numericality_of(*attr_names) validates_with NumericalityValidator, _merge_attributes(attr_names) end
# File lib/usecasing_validations/validations/presence.rb, line 11 def validates_presence_of(*attr_names) validates_with PresenceValidator, _merge_attributes(attr_names) end