This library provides external validations for any Ruby class.
It originates from emmanuels aequitas repository with the following changes:
- Only support for external validators
- Use composable algebra for internals
- Will allow serialization to javascript for client side validation (not implemented)
- No contextual validators anymore (use additional external validators)
- 100% code rewrite
- Use equalizer and adamantium where possible.
require 'vanguard'
class ProgrammingLanguage
  attr_reader :name
  def initialize(name)
    @name = name
  end
end
VALIDATOR = Vanguard::Validator.build do
  validates_presence_of :name
end
ruby = ProgrammingLanguage.new('ruby')
result = VALIDATOR.call(ruby)
result.valid? # => true
result.violations # => #<Set: {}>
other = ProgrammingLanguage.new('')
result = VALIDATOR.call(other)
result.valid? # => false
result.violations # => #<Set: {<Vanguard:::Violation ....>}>See Vanguard::Macros to learn about the complete collection of validation rules available.
If an instance fails one or more validation rules, Vanguard::Violation instances
will populate the Vanguard::ViolationSet object that is available through
the Vanguard::Result#violations method.
Vanguard currently has no support for generating human readable violation messages!
For example:
result = YOUR_VALIDATOR.call(Account.new(:name => "Jose"))
if result.valid?
  # my_account is valid and can be saved
else
  result.violations.each do |e|
    do_something_with(e)
  end
end##Contextual Validation
Vanguard does not provide a means of grouping your validations into contexts. Define a validator per context for this.