rester 0.5.5 → 0.5.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b5143699dbaa79cd397a03f99d475bc202f9d9f4
4
- data.tar.gz: 4c8dee2c75a5882aae4e71aa924d6cc15c576d71
3
+ metadata.gz: a42d1da2e2332fbb0d9d4e2216fef9cc7c777ca2
4
+ data.tar.gz: e6c2cf707d421525c9ee2a8ea2432258f3733ce9
5
5
  SHA512:
6
- metadata.gz: 1381c2c074c106a809fef74f9e8b0d72b5e5c7606b60f45ca8d3b34d4e3dbe72cb441d4d14512f04080f1ce34885ccc68ebdadecc56707f755bbaa2984bae743
7
- data.tar.gz: 322f2a2cd5151179cdbeb62073d6ba4f34bba42ed30f3f747ece6065b00837561e8682cbb07b3fc38427238a0c4011cc94e664bb06812a89f34acf7c9e286dee
6
+ metadata.gz: e66f2074f0015dd2fad664c0e192f17399fa0123ddf375d5017fc1b9537bbdf3b52b90e9c3802957ceff6a26a52b83d6f26072d4665fd361642b52cdc74df58b
7
+ data.tar.gz: fa0cd4d19223d0abd91339a7e99901787af7abd3b87165825fc840377e12d5158851131aec184c0626ec45df118e14961d91d2643e2ab786b32f28164a1a3b30
@@ -14,6 +14,7 @@ module Rester
14
14
 
15
15
  def initialize(opts={}, &block)
16
16
  @options = DEFAULT_OPTS.merge(opts).freeze
17
+ @_dynamic_fields = []
17
18
  @_required_fields = []
18
19
  @_defaults = {}
19
20
  @_all_fields = []
@@ -34,6 +35,7 @@ module Rester
34
35
  def freeze
35
36
  @_validators.freeze
36
37
  @_required_fields.freeze
38
+ @_dynamic_fields.freeze
37
39
  @_defaults.freeze
38
40
  @_all_fields.freeze
39
41
  super
@@ -47,9 +49,7 @@ module Rester
47
49
  _error!("missing params: #{missing.join(', ')}")
48
50
  end
49
51
 
50
- if strict? && !(unexpected = param_keys - @_all_fields).empty?
51
- _error!("unexpected params: #{unexpected.join(', ')}")
52
- end
52
+ _validate_strict(param_keys)
53
53
 
54
54
  validated_params = Hash[
55
55
  params.map { |key, value| [key.to_sym, validate!(key.to_sym, value)] }
@@ -59,7 +59,13 @@ module Rester
59
59
  end
60
60
 
61
61
  def validate!(key, value)
62
- klass, opts = @_validators[key]
62
+ if @_validators.key?(key)
63
+ klass, opts = @_validators[key]
64
+ else
65
+ dynamic_key = @_dynamic_fields.find { |r| r.match(key) }
66
+ klass, opts = @_validators[dynamic_key]
67
+ end
68
+
63
69
  _validate(key, value, klass, opts)
64
70
  end
65
71
 
@@ -105,6 +111,10 @@ module Rester
105
111
  @_required_fields.dup
106
112
  end
107
113
 
114
+ def dynamic_fields
115
+ @_dynamic_fields.dup
116
+ end
117
+
108
118
  def defaults
109
119
  @_defaults.dup
110
120
  end
@@ -120,8 +130,6 @@ module Rester
120
130
  private
121
131
 
122
132
  def method_missing(meth, *args)
123
- meth_str = meth.to_s
124
-
125
133
  if meth.to_s.match(/\A[A-Z][A-Za-z]+\z/)
126
134
  name = args.shift
127
135
  opts = args.shift || {}
@@ -137,20 +145,37 @@ module Rester
137
145
  default_opts = { match: DEFAULT_TYPE_MATCHERS[klass] }
138
146
  opts = default_opts.merge(opts)
139
147
 
140
- @_required_fields << name.to_sym if opts.delete(:required)
141
- default = opts.delete(:default)
148
+ if name.is_a?(Regexp)
149
+ @_dynamic_fields << name
150
+ else
151
+ name = name.to_sym
152
+ @_required_fields << name if opts.delete(:required)
153
+ default = opts.delete(:default)
154
+ end
142
155
 
143
- @_all_fields << name.to_sym
144
- @_validators[name.to_sym] = [klass, opts]
156
+ @_all_fields << name
157
+ @_validators[name] = [klass, opts]
145
158
 
146
- if default
147
- _validate_default(name.to_sym, default)
148
- @_defaults[name.to_sym] = default
159
+ if name.is_a?(Symbol) && default
160
+ _validate_default(name, default)
161
+ @_defaults[name] = default
149
162
  end
150
163
 
151
164
  nil
152
165
  end
153
166
 
167
+ def _validate_strict(keys)
168
+ if strict?
169
+ unexpected = (keys - @_all_fields).reject do |k|
170
+ @_dynamic_fields.find { |f| f.match(k) }
171
+ end
172
+
173
+ unless unexpected.empty?
174
+ _error!("unexpected params: #{unexpected.join(', ')}")
175
+ end
176
+ end
177
+ end
178
+
154
179
  ##
155
180
  # Validates a default value specified in the params block. Raises
156
181
  # validation error if necessary.
@@ -310,6 +335,7 @@ module Rester
310
335
  @_validators = @_validators.merge!(params.validators)
311
336
  @_defaults = @_defaults.merge!(params.defaults)
312
337
  @_required_fields |= params.required_params
338
+ @_dynamic_fields |= params.dynamic_fields
313
339
  @_all_fields |= params.all_fields
314
340
  end
315
341
  end
@@ -1,3 +1,3 @@
1
1
  module Rester
2
- VERSION = '0.5.5'
2
+ VERSION = '0.5.6'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rester
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.5
4
+ version: 0.5.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Honer
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-03-11 00:00:00.000000000 Z
12
+ date: 2016-03-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rack