PORO validation mixin with no deps - borrowing ideas from validatable
- Similar API to Rails
- No other dependencies
require 'simple_validate'
class Person
include SimpleValidate
attr_accessor :name, :age
validates_presence_of :name, :age
validates_type_of :age, as: :integer
end
=> p = Person.new
=> #<Person:0x007f9431536408>
=> p.valid?
=> false
=> p.errors
=> #<SimpleValidate::Errors:0x007f94318b4df0
@messages=
{:age=>["can't be empty", "must be an integer"],
:name=>["can't be empty"]}>
validates_presence_of :attribute
validates_type_of :attribute, as: :string
validates_format_of :attribute, with: /[A-Z]+/
-
Possible length options include:
maximum
,minimum
,in
,is
. -
maximum
,minimum
andis
take a single integer andin
takes a range.
validates_length_of :attribute, in: 6..9
in
can take aRange
or anArray
validates_inclusion_of :domain, in: [:net, :com]
validates_inclusion_of :number, in: 5..10
validates_exclusion_of :name, in: [:Bojack, :Horseman]
validates_type_of :attribute, as: :string, allow_nil: true
- It is possible to pass a custom error message to any validation.
validates_presence_of :attribute, message: 'attribute is required!'
- It is possible to pass an
if
option with a proc for a conditional validation
validates_presence_of :attribute, if: Proc.new { true }
gem 'simple_validate'
The gem is available as open source under the terms of the MIT License.