Class: LIVR
- Inherits:
-
Object
- Object
- LIVR
- Defined in:
- lib/LIVR.rb
Constant Summary collapse
- @@IS_DEFAULT_AUTO_TRIM =
false
- @@DEFAULT_RULES =
{ 'required' => Common.method(:required), 'not_empty' => Common.method(:not_empty), 'not_empty_list' => Common.method(:not_empty_list), 'trim' => Filters.method(:trim), 'to_lc' => Filters.method(:to_lc), 'to_uc' => Filters.method(:to_uc), 'remove' => Filters.method(:remove), 'leave_only' => Filters.method(:leave_only), 'integer' => Numerics.method(:integers), 'positive_integer' => Numerics.method(:positive_integer), 'decimal' => Numerics.method(:decimal), 'positive_decimal' => Numerics.method(:positive_decimal), 'max_number' => Numerics.method(:max_number), 'min_number' => Numerics.method(:min_number), 'number_between' => Numerics.method(:number_between), 'one_of' => Strings.method(:one_of), 'max_length' => Strings.method(:max_length), 'min_length' => Strings.method(:min_length), 'length_equal' => Strings.method(:length_equal), 'length_between' => Strings.method(:length_between), 'like' => Strings.method(:like), 'email' => Special.method(:email), 'url' => Special.method(:url), 'iso_date' => Special.method(:iso_date), 'equal_to_field' => Special.method(:equal_to_field), 'nested_object' => Helpers.method(:nested_object), 'list_of' => Helpers.method(:list_of), 'list_of_objects' => Helpers.method(:list_of_objects), 'list_of_different_objects' => Helpers.method(:list_of_different_objects) }
Class Method Summary collapse
- ._build_aliased_rule(alias_hash) ⇒ Object
- .default_auto_trim(is_auto_trim) ⇒ Object
- .get_default_rules ⇒ Object
- .register_aliased_default_rule(alias_hash) ⇒ Object
- .register_default_rules(rules) ⇒ Object
Instance Method Summary collapse
- #_auto_trim(data) ⇒ Object
- #_build_validator(name, args) ⇒ Object
- #_parse_rule(livr_rule) ⇒ Object
- #get_errors ⇒ Object
- #get_rules ⇒ Object
-
#initialize(livr_rules, is_auto_trim = false) ⇒ LIVR
constructor
A new instance of LIVR.
- #prepare ⇒ Object
- #register_aliased_rule(alias_hash) ⇒ Object
- #register_rules(rules) ⇒ Object
- #validate(data) ⇒ Object
Constructor Details
#initialize(livr_rules, is_auto_trim = false) ⇒ LIVR
Returns a new instance of LIVR.
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/LIVR.rb', line 47 def initialize(livr_rules, is_auto_trim = false) @is_prepare = false @livr_rules = livr_rules @validators = {} @errors = false @validator_builders = {} if is_auto_trim @is_auto_trim = is_auto_trim else @is_auto_trim = @@IS_DEFAULT_AUTO_TRIM end register_rules(@@DEFAULT_RULES) self end |
Class Method Details
._build_aliased_rule(alias_hash) ⇒ Object
134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
# File 'lib/LIVR.rb', line 134 def self._build_aliased_rule(alias_hash) raise 'Alias name required' if alias_hash['name'].nil? raise 'Alias rules required' if alias_hash['rules'].nil? livr = {:value => alias_hash['rules']} lambda do |args| rule_builders = args.pop validator = LIVR.new(livr).register_rules(rule_builders).prepare lambda do |value, unuse, output| result = validator.validate({:value => value}) if result output.push(result[:value]) return else validator_errors = validator.get_errors return alias_hash['error'] || validator_errors[:value] end end end end |
.default_auto_trim(is_auto_trim) ⇒ Object
91 92 93 |
# File 'lib/LIVR.rb', line 91 def self.default_auto_trim(is_auto_trim) @@IS_DEFAULT_AUTO_TRIM = !!is_auto_trim end |
.get_default_rules ⇒ Object
197 198 199 |
# File 'lib/LIVR.rb', line 197 def self.get_default_rules @@DEFAULT_RULES end |
.register_aliased_default_rule(alias_hash) ⇒ Object
85 86 87 88 89 |
# File 'lib/LIVR.rb', line 85 def self.register_aliased_default_rule(alias_hash) raise 'Alias name required' if alias_hash['name'].nil? @@DEFAULT_RULES[alias_hash['name']] = _build_aliased_rule(alias_hash) self end |
.register_default_rules(rules) ⇒ Object
77 78 79 80 81 82 83 |
# File 'lib/LIVR.rb', line 77 def self.register_default_rules(rules) rules.each do |rule_name, rule_builder| raise "RULE_BUILDER [%s] SHOULD BE A CODEREF" % rule_name unless rule_builder.respond_to? :call @@DEFAULT_RULES[rule_name] = rule_builder end self end |
Instance Method Details
#_auto_trim(data) ⇒ Object
201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 |
# File 'lib/LIVR.rb', line 201 def _auto_trim(data) if data.kind_of? String data.strip! return data elsif data.kind_of? Hash trimmed_data = {} data.each do |key, value| trimmed_data[key] = _auto_trim(value) end return trimmed_data elsif data.kind_of? Array trimmed_data = [] data.each do |value| trimmed_data << _auto_trim(value) end return trimmed_data end return data end |
#_build_validator(name, args) ⇒ Object
126 127 128 129 130 131 132 |
# File 'lib/LIVR.rb', line 126 def _build_validator(name, args) raise "Rule [%s] not registered" % [name] unless @validator_builders.has_key?(name) allArgs = args allArgs.push(get_rules) @validator_builders[name].call(allArgs) end |
#_parse_rule(livr_rule) ⇒ Object
113 114 115 116 117 118 119 120 121 122 123 124 |
# File 'lib/LIVR.rb', line 113 def _parse_rule(livr_rule) if livr_rule.kind_of? Hash name = livr_rule.keys[0] args = livr_rule[name] args = [args] unless args.kind_of? Array else name = livr_rule args = [] end [name, args] end |
#get_errors ⇒ Object
193 194 195 |
# File 'lib/LIVR.rb', line 193 def get_errors @errors end |
#get_rules ⇒ Object
189 190 191 |
# File 'lib/LIVR.rb', line 189 def get_rules @validator_builders end |
#prepare ⇒ Object
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/LIVR.rb', line 95 def prepare return unless @is_prepare == false @livr_rules.each do |field, field_rules| field_rules = [field_rules] unless field_rules.kind_of? Array validators = [] field_rules.each do |rule| name, args = _parse_rule(rule) validators.push(_build_validator(name, args)) end @validators[field] = validators end @is_prepare = true self end |
#register_aliased_rule(alias_hash) ⇒ Object
71 72 73 74 75 |
# File 'lib/LIVR.rb', line 71 def register_aliased_rule(alias_hash) raise 'Alias name required' if alias_hash['name'].nil? @validator_builders[alias_hash['name']] = self.class._build_aliased_rule(alias_hash) self end |
#register_rules(rules) ⇒ Object
63 64 65 66 67 68 69 |
# File 'lib/LIVR.rb', line 63 def register_rules(rules) rules.each do |rule_name, rule_builder| raise "RULE_BUILDER [%s] SHOULD BE A CODEREF" % rule_name unless rule_builder.respond_to? :call @validator_builders[rule_name] = rule_builder end self end |
#validate(data) ⇒ Object
155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 |
# File 'lib/LIVR.rb', line 155 def validate(data) prepare unless @is_prepare unless data.kind_of? Hash @errors = 'FORMAT_ERROR' return end data = _auto_trim(data) if @is_auto_trim result, errors = {}, {} @validators.each do |field_name, validators| next if validators.empty? field_result = [] value = data.has_key?(field_name) ? data[field_name] : nil validators.each do |v_cb| arg = result.has_key?(field_name) ? result[field_name] : value error_code = v_cb.call(arg, data, field_result) if error_code errors[field_name] = error_code break elsif data.has_key?(field_name) result[field_name] = field_result.empty? ? value : field_result[0] end end end if errors.empty? @errors = nil return result else @errors = errors return false end end |