Skip to content

fuksito/ruby-livr

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Jan 18, 2018
50fcaba · Jan 18, 2018

History

1 Commit
Jan 18, 2018
Jan 18, 2018
Jan 18, 2018
Jan 18, 2018
Jan 18, 2018
Jan 18, 2018
Jan 18, 2018
Jan 18, 2018
Jan 18, 2018

Repository files navigation

Build Status

LIVR Validator

LIVR.Validator - Lightweight validator supporting Language Independent Validation Rules Specification (LIVR) Implements latest '2.0 specification'

SYNOPSIS

Common usage:

gem 'ruby-livr'
require 'livr'

validator = LIVR::Validator.new({
    'name'      => 'required',
    'email'     => [ 'required', 'email' ],
    'gender'    => { 'one_of' => ['male', 'female'] },
    'phone'     => { 'max_length' => 10 },
    'password'  => [ 'required', { 'min_length' => 10} ],
    'password2' => { 'equal_to_field' => 'password' }
});

valid_data = validator.validate(user_data)

if valid_data
    save_user(validData)
else
    handle_errors(validator.get_errors)
end

You can use modifiers separately or can combine them with validation:

validator = LIVR::Validator.new({
    'email' => [ 'required', 'trim', 'email', 'to_lc' ]
});

Feel free to register your own rules:

You can use aliases (prefferable, syntax covered by the specification) for a lot of cases:

validator = LIVR::Validator.new({
    'password' => ['required', 'strong_password']
});

validator.register_aliased_rule({
    'name' => 'strong_password',
    'rules' => { 'min_length' => 6},
    'error' => 'WEAK_PASSWORD'
});

Or you can write more sophisticated rules directly:

validator = LIVR::Validator.new({
    'password' => ['required', 'strong_password']
})

class StrongPassword
    def call(value, *other_args)
        # We already have "required" rule to check that the value is present
        return if value == nil || value == ""
        if value.length < 6
            return 'WEAK_PASSWORD'
        end
    end
end

validator.register_rules(strong_password: StrongPassword)

DESCRIPTION

This ruby gem is an implementation of LIVR Specification. See 'LIVR Specification' for detailed documentation and list of supported rules.

Features:

  • Rules are declarative and language independent
  • Any number of rules for each field
  • Return together errors for all fields
  • Excludes all fields that do not have validation rules described
  • Has possibility to validatate complex hierarchical structures
  • Easy to describe and undersand rules
  • Returns understandable error codes(not error messages)
  • Easy to add own rules
  • Rules are be able to change results output ("trim", "nested_object", for example)
  • Multipurpose (user input validation, configs validation, contracts programming etc)

INSTALL

as a gem

gem install ruby-livr

in rails

Add to Gemfile

gem "ruby-livr"

AUTHORS

Ruby implementation

Vitaliy Yanchuk (@fuksito)

Idea and specification

Viktor Turskyi (@koorchik)

About

Language Independent Validation Rules 2.0

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages