# LIVR Validator LIVR.Validator - Lightweight validator supporting Language Independent Validation Rules Specification (LIVR) # SYNOPSIS Common usage: ```ruby gem 'livr2' 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) } ``` You can use modifiers separately or can combine them with validation: ```ruby var 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: ```ruby var 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: ```ruby 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 ``` # DESCRIPTION This ruby gem is an implementation of LIVR Specification. See ['LIVR Specification'](http://livr-spec.org) 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 ```bash gem install livr2 ``` #### in rails Add to Gemfile ```ruby gem "livr2" ``` # AUTHORS ## Ruby implementation Vitaliy Yanchuk (@fuksito) ## Idea and specification Viktor Turskyi (@koorchik)