Skip to content
A simple ruby object validator
Ruby Cucumber
Find file
Latest commit 575824a Oct 1, 2015 @zombor Merge branch 'add-uuid-v5'
Failed to load latest commit information.
lib Bump minor version Oct 1, 2015
LICENSE Add ISC license file Sep 1, 2015


Build Status

Validator is a simple ruby validation class. You don't use it directly inside your classes like just about every other ruby validation class out there. I chose to implement it in this way so I didn't automatically pollute the namespace of the objects I wanted to validate.

This also solves the problem of validating forms very nicely. Frequently you will have a form that represents many different data objects in your system, and you can pre-validate everything before doing any saving.


Validator is useful for validating the state of any existing ruby object.

  object = => '', :password => 'foobar')
  validator =
  validator.rule(:email, [:email, :not_empty]) # multiple rules in one line
  validator.rule(:password, :not_empty) # a single rule on a line
  validator.rule(:password, :length => {:minimum => 3}) # a rule that takes parameters

  if validator.valid?
    # save the data somewhere
    @errors = validator.errors

The first paramater can be any message that the object responds to.

Writing your own rules

If you have a custom rule you need to write, just put it inside the Validation::Rule namespace:

  module Validation
    module Rule
      class MyCustomRule
        def error_key

        def valid_value?(value)
          # Logic for determining the validity of the value

        def params

A rule class should have the following methods on it:

  • error_key a symbol to represent the error. This shows up in the errors hash. Must be an underscored_version of the class name
  • valid_value?(value) the beef of the rule. This is where you determine if the value is valid or not
  • params the params hash that was passed into the constructor

Writing self-contained validators

You can also create self-contained validation classes if you don't like the dynamic creation approach:

  require 'validation'
  require 'validation/rule/not_empty'

  class MyFormValidator < Validation::Validator
    include Validation

    rule :email, :not_empty

Now you can use this anywhere in your code:

  form_validator =

Semantic Versioning

This project conforms to semver.


Have an improvement? Have an awesome rule you want included? Simple!

  1. Fork the repository
  2. Create a branch off of the master branch
  3. Write specs for the change
  4. Add your change
  5. Submit a pull request to merge against the master branch

Don't change any version files or gemspec files in your change.

Something went wrong with that request. Please try again.