rester 0.5.5 → 0.5.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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