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 +4 -4
- data/lib/rester/service/resource/params.rb +39 -13
- data/lib/rester/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a42d1da2e2332fbb0d9d4e2216fef9cc7c777ca2
|
4
|
+
data.tar.gz: e6c2cf707d421525c9ee2a8ea2432258f3733ce9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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
|
-
|
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
|
-
|
141
|
-
|
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
|
144
|
-
@_validators[name
|
156
|
+
@_all_fields << name
|
157
|
+
@_validators[name] = [klass, opts]
|
145
158
|
|
146
|
-
if default
|
147
|
-
_validate_default(name
|
148
|
-
@_defaults[name
|
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
|
data/lib/rester/version.rb
CHANGED
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.
|
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-
|
12
|
+
date: 2016-03-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rack
|