sinatra-param2 1.0.0

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.
Files changed (52) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +3 -0
  3. data/Gemfile.lock +77 -0
  4. data/LICENSE +19 -0
  5. data/README.md +190 -0
  6. data/Rakefile +18 -0
  7. data/build/reports/assets/0.10.1/application.css +799 -0
  8. data/build/reports/assets/0.10.1/application.js +1707 -0
  9. data/build/reports/assets/0.10.1/colorbox/border.png +0 -0
  10. data/build/reports/assets/0.10.1/colorbox/controls.png +0 -0
  11. data/build/reports/assets/0.10.1/colorbox/loading.gif +0 -0
  12. data/build/reports/assets/0.10.1/colorbox/loading_background.png +0 -0
  13. data/build/reports/assets/0.10.1/favicon_green.png +0 -0
  14. data/build/reports/assets/0.10.1/favicon_red.png +0 -0
  15. data/build/reports/assets/0.10.1/favicon_yellow.png +0 -0
  16. data/build/reports/assets/0.10.1/loading.gif +0 -0
  17. data/build/reports/assets/0.10.1/magnify.png +0 -0
  18. data/build/reports/assets/0.10.1/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  19. data/build/reports/assets/0.10.1/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  20. data/build/reports/assets/0.10.1/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  21. data/build/reports/assets/0.10.1/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  22. data/build/reports/assets/0.10.1/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  23. data/build/reports/assets/0.10.1/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  24. data/build/reports/assets/0.10.1/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  25. data/build/reports/assets/0.10.1/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  26. data/build/reports/assets/0.10.1/smoothness/images/ui-icons_222222_256x240.png +0 -0
  27. data/build/reports/assets/0.10.1/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  28. data/build/reports/assets/0.10.1/smoothness/images/ui-icons_454545_256x240.png +0 -0
  29. data/build/reports/assets/0.10.1/smoothness/images/ui-icons_888888_256x240.png +0 -0
  30. data/build/reports/assets/0.10.1/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  31. data/build/reports/coverage.xml +165 -0
  32. data/build/reports/index.html +1643 -0
  33. data/example/Gemfile +7 -0
  34. data/example/Gemfile.lock +33 -0
  35. data/example/Procfile +1 -0
  36. data/example/app.rb +52 -0
  37. data/example/config.ru +6 -0
  38. data/lib/sinatra/param.rb +245 -0
  39. data/lib/sinatra/param/version.rb +5 -0
  40. data/sinatra-param2.gemspec +27 -0
  41. data/spec/dummy/app.rb +346 -0
  42. data/spec/parameter_conjunctivity_spec.rb +34 -0
  43. data/spec/parameter_exclusivity_spec.rb +55 -0
  44. data/spec/parameter_inclusivity_spec.rb +30 -0
  45. data/spec/parameter_nested_validations_spec.rb +151 -0
  46. data/spec/parameter_raise_spec.rb +25 -0
  47. data/spec/parameter_spec.rb +19 -0
  48. data/spec/parameter_transformations_spec.rb +42 -0
  49. data/spec/parameter_type_coercion_spec.rb +211 -0
  50. data/spec/parameter_validations_spec.rb +247 -0
  51. data/spec/spec_helper.rb +29 -0
  52. metadata +190 -0
@@ -0,0 +1,165 @@
1
+ <?xml version='1.0'?>
2
+ <!DOCTYPE coverage SYSTEM "http://cobertura.sourceforge.net/xml/coverage-04.dtd">
3
+ <!-- Generated by simplecov-cobertura version 1.2.0 (https://github.com/dashingrocket/simplecov-cobertura) -->
4
+ <coverage line-rate="0.99" branch-rate="0" lines-covered="144" lines-valid="146" branches-covered="0" branches-valid="0" complexity="0" version="0" timestamp="1497293700">
5
+ <sources>
6
+ <source>/Users/adrian.bravo/code/non-wday/sinatra-param2</source>
7
+ </sources>
8
+ <packages>
9
+ <package name="sinatra-param2" line-rate="0.99" branch-rate="0" complexity="0">
10
+ <classes>
11
+ <class name="param" filename="lib/sinatra/param.rb" line-rate="0.99" branch-rate="0" complexity="0">
12
+ <methods/>
13
+ <lines>
14
+ <line number="1" branch="false" hits="1"/>
15
+ <line number="2" branch="false" hits="1"/>
16
+ <line number="3" branch="false" hits="1"/>
17
+ <line number="4" branch="false" hits="1"/>
18
+ <line number="6" branch="false" hits="1"/>
19
+ <line number="7" branch="false" hits="1"/>
20
+ <line number="8" branch="false" hits="1"/>
21
+ <line number="10" branch="false" hits="1"/>
22
+ <line number="11" branch="false" hits="1"/>
23
+ <line number="14" branch="false" hits="1"/>
24
+ <line number="15" branch="false" hits="213"/>
25
+ <line number="16" branch="false" hits="213"/>
26
+ <line number="18" branch="false" hits="213"/>
27
+ <line number="21" branch="false" hits="147"/>
28
+ <line number="22" branch="false" hits="147"/>
29
+ <line number="24" branch="false" hits="8"/>
30
+ <line number="25" branch="false" hits="141"/>
31
+ <line number="28" branch="false" hits="141"/>
32
+ <line number="30" branch="false" hits="141"/>
33
+ <line number="32" branch="false" hits="119"/>
34
+ <line number="33" branch="false" hits="11"/>
35
+ <line number="34" branch="false" hits="1"/>
36
+ <line number="37" branch="false" hits="10"/>
37
+ <line number="38" branch="false" hits="10"/>
38
+ <line number="39" branch="false" hits="10"/>
39
+ <line number="40" branch="false" hits="10"/>
40
+ <line number="42" branch="false" hits="10"/>
41
+ <line number="44" branch="false" hits="5"/>
42
+ <line number="45" branch="false" hits="5"/>
43
+ <line number="48" branch="false" hits="113"/>
44
+ <line number="49" branch="false" hits="29"/>
45
+ <line number="50" branch="false" hits="29"/>
46
+ <line number="51" branch="false" hits="29"/>
47
+ <line number="52" branch="false" hits="1"/>
48
+ <line number="53" branch="false" hits="1"/>
49
+ <line number="54" branch="false" hits="1"/>
50
+ <line number="57" branch="false" hits="28"/>
51
+ <line number="59" branch="false" hits="28"/>
52
+ <line number="60" branch="false" hits="28"/>
53
+ <line number="63" branch="false" hits="28"/>
54
+ <line number="67" branch="false" hits="1"/>
55
+ <line number="68" branch="false" hits="19"/>
56
+ <line number="69" branch="false" hits="19"/>
57
+ <line number="70" branch="false" hits="19"/>
58
+ <line number="72" branch="false" hits="19"/>
59
+ <line number="74" branch="false" hits="15"/>
60
+ <line number="75" branch="false" hits="15"/>
61
+ <line number="76" branch="false" hits="6"/>
62
+ <line number="77" branch="false" hits="6"/>
63
+ <line number="78" branch="false" hits="1"/>
64
+ <line number="79" branch="false" hits="1"/>
65
+ <line number="82" branch="false" hits="5"/>
66
+ <line number="83" branch="false" hits="5"/>
67
+ <line number="84" branch="false" hits="5"/>
68
+ <line number="87" branch="false" hits="5"/>
69
+ <line number="91" branch="false" hits="1"/>
70
+ <line number="92" branch="false" hits="10"/>
71
+ <line number="93" branch="false" hits="10"/>
72
+ <line number="94" branch="false" hits="10"/>
73
+ <line number="96" branch="false" hits="10"/>
74
+ <line number="98" branch="false" hits="10"/>
75
+ <line number="99" branch="false" hits="10"/>
76
+ <line number="100" branch="false" hits="3"/>
77
+ <line number="101" branch="false" hits="3"/>
78
+ <line number="102" branch="false" hits="1"/>
79
+ <line number="103" branch="false" hits="1"/>
80
+ <line number="106" branch="false" hits="2"/>
81
+ <line number="107" branch="false" hits="2"/>
82
+ <line number="108" branch="false" hits="2"/>
83
+ <line number="109" branch="false" hits="2"/>
84
+ <line number="112" branch="false" hits="2"/>
85
+ <line number="116" branch="false" hits="1"/>
86
+ <line number="117" branch="false" hits="5"/>
87
+ <line number="118" branch="false" hits="5"/>
88
+ <line number="120" branch="false" hits="5"/>
89
+ <line number="121" branch="false" hits="5"/>
90
+ <line number="122" branch="false" hits="3"/>
91
+ <line number="123" branch="false" hits="3"/>
92
+ <line number="124" branch="false" hits="0"/>
93
+ <line number="125" branch="false" hits="0"/>
94
+ <line number="128" branch="false" hits="3"/>
95
+ <line number="129" branch="false" hits="3"/>
96
+ <line number="130" branch="false" hits="3"/>
97
+ <line number="133" branch="false" hits="3"/>
98
+ <line number="137" branch="false" hits="1"/>
99
+ <line number="139" branch="false" hits="1"/>
100
+ <line number="140" branch="false" hits="147"/>
101
+ <line number="141" branch="false" hits="147"/>
102
+ <line number="142" branch="false" hits="134"/>
103
+ <line number="143" branch="false" hits="57"/>
104
+ <line number="144" branch="false" hits="42"/>
105
+ <line number="145" branch="false" hits="40"/>
106
+ <line number="146" branch="false" hits="38"/>
107
+ <line number="147" branch="false" hits="36"/>
108
+ <line number="148" branch="false" hits="34"/>
109
+ <line number="149" branch="false" hits="32"/>
110
+ <line number="151" branch="false" hits="33"/>
111
+ <line number="152" branch="false" hits="20"/>
112
+ <line number="153" branch="false" hits="10"/>
113
+ <line number="154" branch="false" hits="21"/>
114
+ <line number="156" branch="false" hits="6"/>
115
+ <line number="157" branch="false" hits="6"/>
116
+ <line number="164" branch="false" hits="1"/>
117
+ <line number="165" branch="false" hits="6"/>
118
+ <line number="166" branch="false" hits="6"/>
119
+ <line number="167" branch="false" hits="5"/>
120
+ <line number="170" branch="false" hits="1"/>
121
+ <line number="171" branch="false" hits="141"/>
122
+ <line number="172" branch="false" hits="65"/>
123
+ <line number="174" branch="false" hits="12"/>
124
+ <line number="178" branch="false" hits="1"/>
125
+ <line number="180" branch="false" hits="2"/>
126
+ <line number="182" branch="false" hits="1"/>
127
+ <line number="183" branch="false" hits="5"/>
128
+ <line number="187" branch="false" hits="3"/>
129
+ <line number="188" branch="false" hits="2"/>
130
+ <line number="190" branch="false" hits="2"/>
131
+ <line number="195" branch="false" hits="8"/>
132
+ <line number="197" branch="false" hits="10"/>
133
+ <line number="199" branch="false" hits="4"/>
134
+ <line number="202" branch="false" hits="4"/>
135
+ <line number="204" branch="false" hits="2"/>
136
+ <line number="206" branch="false" hits="2"/>
137
+ <line number="208" branch="false" hits="13"/>
138
+ <line number="210" branch="false" hits="2"/>
139
+ <line number="212" branch="false" hits="2"/>
140
+ <line number="214" branch="false" hits="1"/>
141
+ <line number="216" branch="false" hits="3"/>
142
+ <line number="221" branch="false" hits="1"/>
143
+ <line number="222" branch="false" hits="55"/>
144
+ <line number="223" branch="false" hits="6"/>
145
+ <line number="227" branch="false" hits="1"/>
146
+ <line number="228" branch="false" hits="40"/>
147
+ <line number="229" branch="false" hits="3"/>
148
+ <line number="233" branch="false" hits="1"/>
149
+ <line number="234" branch="false" hits="20"/>
150
+ <line number="235" branch="false" hits="5"/>
151
+ <line number="239" branch="false" hits="1"/>
152
+ <line number="240" branch="false" hits="85"/>
153
+ <line number="243" branch="false" hits="1"/>
154
+ <line number="244" branch="false" hits="85"/>
155
+ <line number="247" branch="false" hits="1"/>
156
+ <line number="248" branch="false" hits="55"/>
157
+ <line number="249" branch="false" hits="16"/>
158
+ <line number="252" branch="false" hits="55"/>
159
+ <line number="256" branch="false" hits="1"/>
160
+ </lines>
161
+ </class>
162
+ </classes>
163
+ </package>
164
+ </packages>
165
+ </coverage>
@@ -0,0 +1,1643 @@
1
+ <!DOCTYPE html>
2
+ <html xmlns='http://www.w3.org/1999/xhtml'>
3
+ <head>
4
+ <title>Code coverage for Sinatra-param2</title>
5
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
6
+ <script src='./assets/0.10.1/application.js' type='text/javascript'></script>
7
+ <link href='./assets/0.10.1/application.css' media='screen, projection, print' rel='stylesheet' type='text/css'>
8
+ <link rel="shortcut icon" type="image/png" href="./assets/0.10.1/favicon_green.png" />
9
+ <link rel="icon" type="image/png" href="./assets/0.10.1/favicon.png" />
10
+ </head>
11
+
12
+ <body>
13
+ <div id="loading">
14
+ <img src="./assets/0.10.1/loading.gif" alt="loading"/>
15
+ </div>
16
+ <div id="wrapper" style="display:none;">
17
+ <div class="timestamp">Generated <abbr class="timeago" title="2017-06-12T20:55:00+02:00">2017-06-12T20:55:00+02:00</abbr></div>
18
+ <ul class="group_tabs"></ul>
19
+
20
+ <div id="content">
21
+ <div class="file_list_container" id="AllFiles">
22
+ <h2>
23
+ <span class="group_name">All Files</span>
24
+ (<span class="covered_percent"><span class="green">98.63%</span></span>
25
+ covered at
26
+ <span class="covered_strength">
27
+ <span class="green">
28
+ 25.2
29
+ </span>
30
+ </span> hits/line)
31
+ </h2>
32
+ <a name="AllFiles"></a>
33
+ <div>
34
+ <b>1</b> files in total.
35
+ <b>146</b> relevant lines.
36
+ <span class="green"><b>144</b> lines covered</span> and
37
+ <span class="red"><b>2</b> lines missed </span>
38
+ </div>
39
+ <table class="file_list">
40
+ <thead>
41
+ <tr>
42
+ <th>File</th>
43
+ <th>% covered</th>
44
+ <th>Lines</th>
45
+ <th>Relevant Lines</th>
46
+ <th>Lines covered</th>
47
+ <th>Lines missed</th>
48
+ <th>Avg. Hits / Line</th>
49
+ </tr>
50
+ </thead>
51
+ <tbody>
52
+
53
+ <tr>
54
+ <td class="strong"><a href="#b5287ba6d493740986c6ecb54ebfab75cee4d32b" class="src_link" title="lib/sinatra/param.rb">lib/sinatra/param.rb</a></td>
55
+ <td class="green strong">98.63 %</td>
56
+ <td>257</td>
57
+ <td>146</td>
58
+ <td>144</td>
59
+ <td>2</td>
60
+ <td>25.2</td>
61
+ </tr>
62
+
63
+ </tbody>
64
+ </table>
65
+ </div>
66
+
67
+
68
+
69
+ </div>
70
+
71
+ <div id="footer">
72
+ Generated by <a href="http://github.com/colszowka/simplecov">simplecov</a> v0.14.1
73
+ and simplecov-html v0.10.1<br/>
74
+ using RSpec
75
+ </div>
76
+
77
+ <div class="source_files">
78
+
79
+ <div class="source_table" id="b5287ba6d493740986c6ecb54ebfab75cee4d32b">
80
+ <div class="header">
81
+ <h3>lib/sinatra/param.rb</h3>
82
+ <h4><span class="green">98.63 %</span> covered</h4>
83
+ <div>
84
+ <b>146</b> relevant lines.
85
+ <span class="green"><b>144</b> lines covered</span> and
86
+ <span class="red"><b>2</b> lines missed.</span>
87
+ </div>
88
+ </div>
89
+
90
+ <pre>
91
+ <ol>
92
+
93
+ <li class="covered" data-hits="1" data-linenumber="1">
94
+ <span class="hits">1</span>
95
+
96
+ <code class="ruby">require &#39;sinatra/base&#39;</code>
97
+ </li>
98
+
99
+ <li class="covered" data-hits="1" data-linenumber="2">
100
+ <span class="hits">1</span>
101
+
102
+ <code class="ruby">require &#39;sinatra/param/version&#39;</code>
103
+ </li>
104
+
105
+ <li class="covered" data-hits="1" data-linenumber="3">
106
+ <span class="hits">1</span>
107
+
108
+ <code class="ruby">require &#39;date&#39;</code>
109
+ </li>
110
+
111
+ <li class="covered" data-hits="1" data-linenumber="4">
112
+ <span class="hits">1</span>
113
+
114
+ <code class="ruby">require &#39;time&#39;</code>
115
+ </li>
116
+
117
+ <li class="never" data-hits="" data-linenumber="5">
118
+
119
+
120
+ <code class="ruby"></code>
121
+ </li>
122
+
123
+ <li class="covered" data-hits="1" data-linenumber="6">
124
+ <span class="hits">1</span>
125
+
126
+ <code class="ruby">module Sinatra</code>
127
+ </li>
128
+
129
+ <li class="covered" data-hits="1" data-linenumber="7">
130
+ <span class="hits">1</span>
131
+
132
+ <code class="ruby"> module Param</code>
133
+ </li>
134
+
135
+ <li class="covered" data-hits="1" data-linenumber="8">
136
+ <span class="hits">1</span>
137
+
138
+ <code class="ruby"> Boolean = :boolean</code>
139
+ </li>
140
+
141
+ <li class="never" data-hits="" data-linenumber="9">
142
+
143
+
144
+ <code class="ruby"></code>
145
+ </li>
146
+
147
+ <li class="covered" data-hits="1" data-linenumber="10">
148
+ <span class="hits">1</span>
149
+
150
+ <code class="ruby"> class InvalidParameterError &lt; StandardError</code>
151
+ </li>
152
+
153
+ <li class="covered" data-hits="1" data-linenumber="11">
154
+ <span class="hits">1</span>
155
+
156
+ <code class="ruby"> attr_accessor :param, :options</code>
157
+ </li>
158
+
159
+ <li class="never" data-hits="" data-linenumber="12">
160
+
161
+
162
+ <code class="ruby"> end</code>
163
+ </li>
164
+
165
+ <li class="never" data-hits="" data-linenumber="13">
166
+
167
+
168
+ <code class="ruby"></code>
169
+ </li>
170
+
171
+ <li class="covered" data-hits="1" data-linenumber="14">
172
+ <span class="hits">1</span>
173
+
174
+ <code class="ruby"> def param(name, type, options = {})</code>
175
+ </li>
176
+
177
+ <li class="covered" data-hits="213" data-linenumber="15">
178
+ <span class="hits">213</span>
179
+
180
+ <code class="ruby"> name = name.to_s</code>
181
+ </li>
182
+
183
+ <li class="covered" data-hits="213" data-linenumber="16">
184
+ <span class="hits">213</span>
185
+
186
+ <code class="ruby"> applicable_params = @applicable_params || params</code>
187
+ </li>
188
+
189
+ <li class="never" data-hits="" data-linenumber="17">
190
+
191
+
192
+ <code class="ruby"></code>
193
+ </li>
194
+
195
+ <li class="covered" data-hits="213" data-linenumber="18">
196
+ <span class="hits">213</span>
197
+
198
+ <code class="ruby"> return unless applicable_params.member?(name) || options.has_key?(:default) ||</code>
199
+ </li>
200
+
201
+ <li class="never" data-hits="" data-linenumber="19">
202
+
203
+
204
+ <code class="ruby"> options[:required]</code>
205
+ </li>
206
+
207
+ <li class="never" data-hits="" data-linenumber="20">
208
+
209
+
210
+ <code class="ruby"></code>
211
+ </li>
212
+
213
+ <li class="covered" data-hits="147" data-linenumber="21">
214
+ <span class="hits">147</span>
215
+
216
+ <code class="ruby"> begin</code>
217
+ </li>
218
+
219
+ <li class="covered" data-hits="147" data-linenumber="22">
220
+ <span class="hits">147</span>
221
+
222
+ <code class="ruby"> applicable_params[name] = coerce(applicable_params[name], type, options)</code>
223
+ </li>
224
+
225
+ <li class="never" data-hits="" data-linenumber="23">
226
+
227
+
228
+ <code class="ruby"> applicable_params[name] = (options[:default].call if</code>
229
+ </li>
230
+
231
+ <li class="covered" data-hits="8" data-linenumber="24">
232
+ <span class="hits">8</span>
233
+
234
+ <code class="ruby"> options[:default].respond_to?(:call)) ||</code>
235
+ </li>
236
+
237
+ <li class="covered" data-hits="141" data-linenumber="25">
238
+ <span class="hits">141</span>
239
+
240
+ <code class="ruby"> options[:default] if applicable_params[name].nil? &amp;&amp; options.has_key?(:default)</code>
241
+ </li>
242
+
243
+ <li class="never" data-hits="" data-linenumber="26">
244
+
245
+
246
+ <code class="ruby"></code>
247
+ </li>
248
+
249
+ <li class="never" data-hits="" data-linenumber="27">
250
+
251
+
252
+ <code class="ruby"> applicable_params[name] = options[:transform].to_proc.call(applicable_params[name]) if</code>
253
+ </li>
254
+
255
+ <li class="covered" data-hits="141" data-linenumber="28">
256
+ <span class="hits">141</span>
257
+
258
+ <code class="ruby"> applicable_params[name] &amp;&amp; options[:transform]</code>
259
+ </li>
260
+
261
+ <li class="never" data-hits="" data-linenumber="29">
262
+
263
+
264
+ <code class="ruby"></code>
265
+ </li>
266
+
267
+ <li class="covered" data-hits="141" data-linenumber="30">
268
+ <span class="hits">141</span>
269
+
270
+ <code class="ruby"> validate!(applicable_params[name], options)</code>
271
+ </li>
272
+
273
+ <li class="never" data-hits="" data-linenumber="31">
274
+
275
+
276
+ <code class="ruby"></code>
277
+ </li>
278
+
279
+ <li class="covered" data-hits="119" data-linenumber="32">
280
+ <span class="hits">119</span>
281
+
282
+ <code class="ruby"> if block_given?</code>
283
+ </li>
284
+
285
+ <li class="covered" data-hits="11" data-linenumber="33">
286
+ <span class="hits">11</span>
287
+
288
+ <code class="ruby"> if type != Hash</code>
289
+ </li>
290
+
291
+ <li class="covered" data-hits="1" data-linenumber="34">
292
+ <span class="hits">1</span>
293
+
294
+ <code class="ruby"> raise Sinatra::Param::InvalidParameterError.new(</code>
295
+ </li>
296
+
297
+ <li class="never" data-hits="" data-linenumber="35">
298
+
299
+
300
+ <code class="ruby"> &#39;Only the Hash parameter validation can use sub hash validation method&#39;)</code>
301
+ </li>
302
+
303
+ <li class="never" data-hits="" data-linenumber="36">
304
+
305
+
306
+ <code class="ruby"> end</code>
307
+ </li>
308
+
309
+ <li class="covered" data-hits="10" data-linenumber="37">
310
+ <span class="hits">10</span>
311
+
312
+ <code class="ruby"> original_applicable_params = @applicable_params</code>
313
+ </li>
314
+
315
+ <li class="covered" data-hits="10" data-linenumber="38">
316
+ <span class="hits">10</span>
317
+
318
+ <code class="ruby"> original_parent_key_name = @parent_key_name</code>
319
+ </li>
320
+
321
+ <li class="covered" data-hits="10" data-linenumber="39">
322
+ <span class="hits">10</span>
323
+
324
+ <code class="ruby"> @applicable_params = applicable_params[name]</code>
325
+ </li>
326
+
327
+ <li class="covered" data-hits="10" data-linenumber="40">
328
+ <span class="hits">10</span>
329
+
330
+ <code class="ruby"> @parent_key_name = formatted_params(@parent_key_name, name)</code>
331
+ </li>
332
+
333
+ <li class="never" data-hits="" data-linenumber="41">
334
+
335
+
336
+ <code class="ruby"></code>
337
+ </li>
338
+
339
+ <li class="covered" data-hits="10" data-linenumber="42">
340
+ <span class="hits">10</span>
341
+
342
+ <code class="ruby"> yield</code>
343
+ </li>
344
+
345
+ <li class="never" data-hits="" data-linenumber="43">
346
+
347
+
348
+ <code class="ruby"></code>
349
+ </li>
350
+
351
+ <li class="covered" data-hits="5" data-linenumber="44">
352
+ <span class="hits">5</span>
353
+
354
+ <code class="ruby"> @applicable_params = original_applicable_params</code>
355
+ </li>
356
+
357
+ <li class="covered" data-hits="5" data-linenumber="45">
358
+ <span class="hits">5</span>
359
+
360
+ <code class="ruby"> @parent_key_name = original_parent_key_name</code>
361
+ </li>
362
+
363
+ <li class="never" data-hits="" data-linenumber="46">
364
+
365
+
366
+ <code class="ruby"> end</code>
367
+ </li>
368
+
369
+ <li class="never" data-hits="" data-linenumber="47">
370
+
371
+
372
+ <code class="ruby"></code>
373
+ </li>
374
+
375
+ <li class="covered" data-hits="113" data-linenumber="48">
376
+ <span class="hits">113</span>
377
+
378
+ <code class="ruby"> applicable_params[name]</code>
379
+ </li>
380
+
381
+ <li class="covered" data-hits="29" data-linenumber="49">
382
+ <span class="hits">29</span>
383
+
384
+ <code class="ruby"> rescue InvalidParameterError =&gt; exception</code>
385
+ </li>
386
+
387
+ <li class="covered" data-hits="29" data-linenumber="50">
388
+ <span class="hits">29</span>
389
+
390
+ <code class="ruby"> exception_name = formatted_params(@parent_key_name, name)</code>
391
+ </li>
392
+
393
+ <li class="covered" data-hits="29" data-linenumber="51">
394
+ <span class="hits">29</span>
395
+
396
+ <code class="ruby"> if options[:raise] or (settings.raise_sinatra_param_exceptions rescue false)</code>
397
+ </li>
398
+
399
+ <li class="covered" data-hits="1" data-linenumber="52">
400
+ <span class="hits">1</span>
401
+
402
+ <code class="ruby"> exception.param = exception_name</code>
403
+ </li>
404
+
405
+ <li class="covered" data-hits="1" data-linenumber="53">
406
+ <span class="hits">1</span>
407
+
408
+ <code class="ruby"> exception.options = options</code>
409
+ </li>
410
+
411
+ <li class="covered" data-hits="1" data-linenumber="54">
412
+ <span class="hits">1</span>
413
+
414
+ <code class="ruby"> raise exception</code>
415
+ </li>
416
+
417
+ <li class="never" data-hits="" data-linenumber="55">
418
+
419
+
420
+ <code class="ruby"> end</code>
421
+ </li>
422
+
423
+ <li class="never" data-hits="" data-linenumber="56">
424
+
425
+
426
+ <code class="ruby"></code>
427
+ </li>
428
+
429
+ <li class="covered" data-hits="28" data-linenumber="57">
430
+ <span class="hits">28</span>
431
+
432
+ <code class="ruby"> error = options[:message] || exception.to_s</code>
433
+ </li>
434
+
435
+ <li class="never" data-hits="" data-linenumber="58">
436
+
437
+
438
+ <code class="ruby"></code>
439
+ </li>
440
+
441
+ <li class="covered" data-hits="28" data-linenumber="59">
442
+ <span class="hits">28</span>
443
+
444
+ <code class="ruby"> if content_type and content_type.match(mime_type(:json))</code>
445
+ </li>
446
+
447
+ <li class="covered" data-hits="28" data-linenumber="60">
448
+ <span class="hits">28</span>
449
+
450
+ <code class="ruby"> error = { message: error, errors: { exception_name =&gt; exception.message } }.to_json</code>
451
+ </li>
452
+
453
+ <li class="never" data-hits="" data-linenumber="61">
454
+
455
+
456
+ <code class="ruby"> end</code>
457
+ </li>
458
+
459
+ <li class="never" data-hits="" data-linenumber="62">
460
+
461
+
462
+ <code class="ruby"></code>
463
+ </li>
464
+
465
+ <li class="covered" data-hits="28" data-linenumber="63">
466
+ <span class="hits">28</span>
467
+
468
+ <code class="ruby"> halt 400, error</code>
469
+ </li>
470
+
471
+ <li class="never" data-hits="" data-linenumber="64">
472
+
473
+
474
+ <code class="ruby"> end</code>
475
+ </li>
476
+
477
+ <li class="never" data-hits="" data-linenumber="65">
478
+
479
+
480
+ <code class="ruby"> end</code>
481
+ </li>
482
+
483
+ <li class="never" data-hits="" data-linenumber="66">
484
+
485
+
486
+ <code class="ruby"></code>
487
+ </li>
488
+
489
+ <li class="covered" data-hits="1" data-linenumber="67">
490
+ <span class="hits">1</span>
491
+
492
+ <code class="ruby"> def one_of(*args)</code>
493
+ </li>
494
+
495
+ <li class="covered" data-hits="19" data-linenumber="68">
496
+ <span class="hits">19</span>
497
+
498
+ <code class="ruby"> options = args.last.is_a?(Hash) ? args.pop : {}</code>
499
+ </li>
500
+
501
+ <li class="covered" data-hits="19" data-linenumber="69">
502
+ <span class="hits">19</span>
503
+
504
+ <code class="ruby"> names = args.collect(&amp;:to_s)</code>
505
+ </li>
506
+
507
+ <li class="covered" data-hits="19" data-linenumber="70">
508
+ <span class="hits">19</span>
509
+
510
+ <code class="ruby"> applicable_params = @applicable_params || params</code>
511
+ </li>
512
+
513
+ <li class="never" data-hits="" data-linenumber="71">
514
+
515
+
516
+ <code class="ruby"></code>
517
+ </li>
518
+
519
+ <li class="covered" data-hits="19" data-linenumber="72">
520
+ <span class="hits">19</span>
521
+
522
+ <code class="ruby"> return unless names.length &gt;= 2</code>
523
+ </li>
524
+
525
+ <li class="never" data-hits="" data-linenumber="73">
526
+
527
+
528
+ <code class="ruby"></code>
529
+ </li>
530
+
531
+ <li class="covered" data-hits="15" data-linenumber="74">
532
+ <span class="hits">15</span>
533
+
534
+ <code class="ruby"> begin</code>
535
+ </li>
536
+
537
+ <li class="covered" data-hits="15" data-linenumber="75">
538
+ <span class="hits">15</span>
539
+
540
+ <code class="ruby"> validate_one_of!(applicable_params, names, options)</code>
541
+ </li>
542
+
543
+ <li class="covered" data-hits="6" data-linenumber="76">
544
+ <span class="hits">6</span>
545
+
546
+ <code class="ruby"> rescue InvalidParameterError =&gt; exception</code>
547
+ </li>
548
+
549
+ <li class="covered" data-hits="6" data-linenumber="77">
550
+ <span class="hits">6</span>
551
+
552
+ <code class="ruby"> if options[:raise] or (settings.raise_sinatra_param_exceptions rescue false)</code>
553
+ </li>
554
+
555
+ <li class="covered" data-hits="1" data-linenumber="78">
556
+ <span class="hits">1</span>
557
+
558
+ <code class="ruby"> exception.param, exception.options = names, options</code>
559
+ </li>
560
+
561
+ <li class="covered" data-hits="1" data-linenumber="79">
562
+ <span class="hits">1</span>
563
+
564
+ <code class="ruby"> raise exception</code>
565
+ </li>
566
+
567
+ <li class="never" data-hits="" data-linenumber="80">
568
+
569
+
570
+ <code class="ruby"> end</code>
571
+ </li>
572
+
573
+ <li class="never" data-hits="" data-linenumber="81">
574
+
575
+
576
+ <code class="ruby"></code>
577
+ </li>
578
+
579
+ <li class="covered" data-hits="5" data-linenumber="82">
580
+ <span class="hits">5</span>
581
+
582
+ <code class="ruby"> error = &quot;Invalid parameters #{formatted_params(@parent_key_name, names)}&quot;</code>
583
+ </li>
584
+
585
+ <li class="covered" data-hits="5" data-linenumber="83">
586
+ <span class="hits">5</span>
587
+
588
+ <code class="ruby"> if content_type &amp;&amp; content_type.match(mime_type(:json))</code>
589
+ </li>
590
+
591
+ <li class="covered" data-hits="5" data-linenumber="84">
592
+ <span class="hits">5</span>
593
+
594
+ <code class="ruby"> error = { message: error, errors: { names =&gt; exception.message } }.to_json</code>
595
+ </li>
596
+
597
+ <li class="never" data-hits="" data-linenumber="85">
598
+
599
+
600
+ <code class="ruby"> end</code>
601
+ </li>
602
+
603
+ <li class="never" data-hits="" data-linenumber="86">
604
+
605
+
606
+ <code class="ruby"></code>
607
+ </li>
608
+
609
+ <li class="covered" data-hits="5" data-linenumber="87">
610
+ <span class="hits">5</span>
611
+
612
+ <code class="ruby"> halt 400, error</code>
613
+ </li>
614
+
615
+ <li class="never" data-hits="" data-linenumber="88">
616
+
617
+
618
+ <code class="ruby"> end</code>
619
+ </li>
620
+
621
+ <li class="never" data-hits="" data-linenumber="89">
622
+
623
+
624
+ <code class="ruby"> end</code>
625
+ </li>
626
+
627
+ <li class="never" data-hits="" data-linenumber="90">
628
+
629
+
630
+ <code class="ruby"></code>
631
+ </li>
632
+
633
+ <li class="covered" data-hits="1" data-linenumber="91">
634
+ <span class="hits">1</span>
635
+
636
+ <code class="ruby"> def any_of(*args)</code>
637
+ </li>
638
+
639
+ <li class="covered" data-hits="10" data-linenumber="92">
640
+ <span class="hits">10</span>
641
+
642
+ <code class="ruby"> options = args.last.is_a?(Hash) ? args.pop : {}</code>
643
+ </li>
644
+
645
+ <li class="covered" data-hits="10" data-linenumber="93">
646
+ <span class="hits">10</span>
647
+
648
+ <code class="ruby"> names = args.collect(&amp;:to_s)</code>
649
+ </li>
650
+
651
+ <li class="covered" data-hits="10" data-linenumber="94">
652
+ <span class="hits">10</span>
653
+
654
+ <code class="ruby"> applicable_params = @applicable_params || params</code>
655
+ </li>
656
+
657
+ <li class="never" data-hits="" data-linenumber="95">
658
+
659
+
660
+ <code class="ruby"></code>
661
+ </li>
662
+
663
+ <li class="covered" data-hits="10" data-linenumber="96">
664
+ <span class="hits">10</span>
665
+
666
+ <code class="ruby"> return unless names.length &gt;= 2</code>
667
+ </li>
668
+
669
+ <li class="never" data-hits="" data-linenumber="97">
670
+
671
+
672
+ <code class="ruby"></code>
673
+ </li>
674
+
675
+ <li class="covered" data-hits="10" data-linenumber="98">
676
+ <span class="hits">10</span>
677
+
678
+ <code class="ruby"> begin</code>
679
+ </li>
680
+
681
+ <li class="covered" data-hits="10" data-linenumber="99">
682
+ <span class="hits">10</span>
683
+
684
+ <code class="ruby"> validate_any_of!(applicable_params, names, options)</code>
685
+ </li>
686
+
687
+ <li class="covered" data-hits="3" data-linenumber="100">
688
+ <span class="hits">3</span>
689
+
690
+ <code class="ruby"> rescue InvalidParameterError =&gt; exception</code>
691
+ </li>
692
+
693
+ <li class="covered" data-hits="3" data-linenumber="101">
694
+ <span class="hits">3</span>
695
+
696
+ <code class="ruby"> if options[:raise] or (settings.raise_sinatra_param_exceptions rescue false)</code>
697
+ </li>
698
+
699
+ <li class="covered" data-hits="1" data-linenumber="102">
700
+ <span class="hits">1</span>
701
+
702
+ <code class="ruby"> exception.param, exception.options = names, options</code>
703
+ </li>
704
+
705
+ <li class="covered" data-hits="1" data-linenumber="103">
706
+ <span class="hits">1</span>
707
+
708
+ <code class="ruby"> raise exception</code>
709
+ </li>
710
+
711
+ <li class="never" data-hits="" data-linenumber="104">
712
+
713
+
714
+ <code class="ruby"> end</code>
715
+ </li>
716
+
717
+ <li class="never" data-hits="" data-linenumber="105">
718
+
719
+
720
+ <code class="ruby"></code>
721
+ </li>
722
+
723
+ <li class="covered" data-hits="2" data-linenumber="106">
724
+ <span class="hits">2</span>
725
+
726
+ <code class="ruby"> formatted_params = formatted_params(@parent_key_name, names)</code>
727
+ </li>
728
+
729
+ <li class="covered" data-hits="2" data-linenumber="107">
730
+ <span class="hits">2</span>
731
+
732
+ <code class="ruby"> error = &quot;Invalid parameters #{formatted_params}&quot;</code>
733
+ </li>
734
+
735
+ <li class="covered" data-hits="2" data-linenumber="108">
736
+ <span class="hits">2</span>
737
+
738
+ <code class="ruby"> if content_type and content_type.match(mime_type(:json))</code>
739
+ </li>
740
+
741
+ <li class="covered" data-hits="2" data-linenumber="109">
742
+ <span class="hits">2</span>
743
+
744
+ <code class="ruby"> error = { message: error, errors: { formatted_params =&gt; exception.message } }.to_json</code>
745
+ </li>
746
+
747
+ <li class="never" data-hits="" data-linenumber="110">
748
+
749
+
750
+ <code class="ruby"> end</code>
751
+ </li>
752
+
753
+ <li class="never" data-hits="" data-linenumber="111">
754
+
755
+
756
+ <code class="ruby"></code>
757
+ </li>
758
+
759
+ <li class="covered" data-hits="2" data-linenumber="112">
760
+ <span class="hits">2</span>
761
+
762
+ <code class="ruby"> halt 400, error</code>
763
+ </li>
764
+
765
+ <li class="never" data-hits="" data-linenumber="113">
766
+
767
+
768
+ <code class="ruby"> end</code>
769
+ </li>
770
+
771
+ <li class="never" data-hits="" data-linenumber="114">
772
+
773
+
774
+ <code class="ruby"> end</code>
775
+ </li>
776
+
777
+ <li class="never" data-hits="" data-linenumber="115">
778
+
779
+
780
+ <code class="ruby"></code>
781
+ </li>
782
+
783
+ <li class="covered" data-hits="1" data-linenumber="116">
784
+ <span class="hits">1</span>
785
+
786
+ <code class="ruby"> def all_or_none_of(*args)</code>
787
+ </li>
788
+
789
+ <li class="covered" data-hits="5" data-linenumber="117">
790
+ <span class="hits">5</span>
791
+
792
+ <code class="ruby"> options = args.last.is_a?(Hash) ? args.pop : {}</code>
793
+ </li>
794
+
795
+ <li class="covered" data-hits="5" data-linenumber="118">
796
+ <span class="hits">5</span>
797
+
798
+ <code class="ruby"> names = args.collect(&amp;:to_s)</code>
799
+ </li>
800
+
801
+ <li class="never" data-hits="" data-linenumber="119">
802
+
803
+
804
+ <code class="ruby"></code>
805
+ </li>
806
+
807
+ <li class="covered" data-hits="5" data-linenumber="120">
808
+ <span class="hits">5</span>
809
+
810
+ <code class="ruby"> begin</code>
811
+ </li>
812
+
813
+ <li class="covered" data-hits="5" data-linenumber="121">
814
+ <span class="hits">5</span>
815
+
816
+ <code class="ruby"> validate_all_or_none_of!(params, names, options)</code>
817
+ </li>
818
+
819
+ <li class="covered" data-hits="3" data-linenumber="122">
820
+ <span class="hits">3</span>
821
+
822
+ <code class="ruby"> rescue InvalidParameterError =&gt; exception</code>
823
+ </li>
824
+
825
+ <li class="covered" data-hits="3" data-linenumber="123">
826
+ <span class="hits">3</span>
827
+
828
+ <code class="ruby"> if options[:raise] or (settings.raise_sinatra_param_exceptions rescue false)</code>
829
+ </li>
830
+
831
+ <li class="missed" data-hits="0" data-linenumber="124">
832
+
833
+
834
+ <code class="ruby"> exception.param, exception.options = names, options</code>
835
+ </li>
836
+
837
+ <li class="missed" data-hits="0" data-linenumber="125">
838
+
839
+
840
+ <code class="ruby"> raise exception</code>
841
+ </li>
842
+
843
+ <li class="never" data-hits="" data-linenumber="126">
844
+
845
+
846
+ <code class="ruby"> end</code>
847
+ </li>
848
+
849
+ <li class="never" data-hits="" data-linenumber="127">
850
+
851
+
852
+ <code class="ruby"></code>
853
+ </li>
854
+
855
+ <li class="covered" data-hits="3" data-linenumber="128">
856
+ <span class="hits">3</span>
857
+
858
+ <code class="ruby"> error = &quot;Invalid parameters [#{names.join(&#39;, &#39;)}]&quot;</code>
859
+ </li>
860
+
861
+ <li class="covered" data-hits="3" data-linenumber="129">
862
+ <span class="hits">3</span>
863
+
864
+ <code class="ruby"> if content_type and content_type.match(mime_type(:json))</code>
865
+ </li>
866
+
867
+ <li class="covered" data-hits="3" data-linenumber="130">
868
+ <span class="hits">3</span>
869
+
870
+ <code class="ruby"> error = { message: error, errors: { names =&gt; exception.message } }.to_json</code>
871
+ </li>
872
+
873
+ <li class="never" data-hits="" data-linenumber="131">
874
+
875
+
876
+ <code class="ruby"> end</code>
877
+ </li>
878
+
879
+ <li class="never" data-hits="" data-linenumber="132">
880
+
881
+
882
+ <code class="ruby"></code>
883
+ </li>
884
+
885
+ <li class="covered" data-hits="3" data-linenumber="133">
886
+ <span class="hits">3</span>
887
+
888
+ <code class="ruby"> halt 400, error</code>
889
+ </li>
890
+
891
+ <li class="never" data-hits="" data-linenumber="134">
892
+
893
+
894
+ <code class="ruby"> end</code>
895
+ </li>
896
+
897
+ <li class="never" data-hits="" data-linenumber="135">
898
+
899
+
900
+ <code class="ruby"> end</code>
901
+ </li>
902
+
903
+ <li class="never" data-hits="" data-linenumber="136">
904
+
905
+
906
+ <code class="ruby"></code>
907
+ </li>
908
+
909
+ <li class="covered" data-hits="1" data-linenumber="137">
910
+ <span class="hits">1</span>
911
+
912
+ <code class="ruby"> private</code>
913
+ </li>
914
+
915
+ <li class="never" data-hits="" data-linenumber="138">
916
+
917
+
918
+ <code class="ruby"></code>
919
+ </li>
920
+
921
+ <li class="covered" data-hits="1" data-linenumber="139">
922
+ <span class="hits">1</span>
923
+
924
+ <code class="ruby"> def coerce(param, type, options = {})</code>
925
+ </li>
926
+
927
+ <li class="covered" data-hits="147" data-linenumber="140">
928
+ <span class="hits">147</span>
929
+
930
+ <code class="ruby"> begin</code>
931
+ </li>
932
+
933
+ <li class="covered" data-hits="147" data-linenumber="141">
934
+ <span class="hits">147</span>
935
+
936
+ <code class="ruby"> return nil if param.nil?</code>
937
+ </li>
938
+
939
+ <li class="covered" data-hits="134" data-linenumber="142">
940
+ <span class="hits">134</span>
941
+
942
+ <code class="ruby"> return param if (param.is_a?(type) rescue false)</code>
943
+ </li>
944
+
945
+ <li class="covered" data-hits="57" data-linenumber="143">
946
+ <span class="hits">57</span>
947
+
948
+ <code class="ruby"> return Integer(param) if type == Integer</code>
949
+ </li>
950
+
951
+ <li class="covered" data-hits="42" data-linenumber="144">
952
+ <span class="hits">42</span>
953
+
954
+ <code class="ruby"> return Float(param) if type == Float</code>
955
+ </li>
956
+
957
+ <li class="covered" data-hits="40" data-linenumber="145">
958
+ <span class="hits">40</span>
959
+
960
+ <code class="ruby"> return String(param) if type == String</code>
961
+ </li>
962
+
963
+ <li class="covered" data-hits="38" data-linenumber="146">
964
+ <span class="hits">38</span>
965
+
966
+ <code class="ruby"> return Date.parse(param) if type == Date</code>
967
+ </li>
968
+
969
+ <li class="covered" data-hits="36" data-linenumber="147">
970
+ <span class="hits">36</span>
971
+
972
+ <code class="ruby"> return Time.parse(param) if type == Time</code>
973
+ </li>
974
+
975
+ <li class="covered" data-hits="34" data-linenumber="148">
976
+ <span class="hits">34</span>
977
+
978
+ <code class="ruby"> return DateTime.parse(param) if type == DateTime</code>
979
+ </li>
980
+
981
+ <li class="covered" data-hits="32" data-linenumber="149">
982
+ <span class="hits">32</span>
983
+
984
+ <code class="ruby"> return coerce_array(param, options) if type == Array</code>
985
+ </li>
986
+
987
+ <li class="never" data-hits="" data-linenumber="150">
988
+
989
+
990
+ <code class="ruby"> return Hash[param.to_s.split(options[:delimiter] || &quot;,&quot;)</code>
991
+ </li>
992
+
993
+ <li class="covered" data-hits="33" data-linenumber="151">
994
+ <span class="hits">33</span>
995
+
996
+ <code class="ruby"> .map { |c| c.split(options[:separator] || &quot;:&quot;) }] if type == Hash</code>
997
+ </li>
998
+
999
+ <li class="covered" data-hits="20" data-linenumber="152">
1000
+ <span class="hits">20</span>
1001
+
1002
+ <code class="ruby"> return (/(false|f|no|n|0)$/i === param.to_s ? false :</code>
1003
+ </li>
1004
+
1005
+ <li class="covered" data-hits="10" data-linenumber="153">
1006
+ <span class="hits">10</span>
1007
+
1008
+ <code class="ruby"> (/(true|t|yes|y|1)$/i === param.to_s ? true : nil)) if type == TrueClass ||</code>
1009
+ </li>
1010
+
1011
+ <li class="covered" data-hits="21" data-linenumber="154">
1012
+ <span class="hits">21</span>
1013
+
1014
+ <code class="ruby"> type == FalseClass || type == Boolean</code>
1015
+ </li>
1016
+
1017
+ <li class="never" data-hits="" data-linenumber="155">
1018
+
1019
+
1020
+ <code class="ruby"> return nil</code>
1021
+ </li>
1022
+
1023
+ <li class="covered" data-hits="6" data-linenumber="156">
1024
+ <span class="hits">6</span>
1025
+
1026
+ <code class="ruby"> rescue ArgumentError</code>
1027
+ </li>
1028
+
1029
+ <li class="covered" data-hits="6" data-linenumber="157">
1030
+ <span class="hits">6</span>
1031
+
1032
+ <code class="ruby"> raise InvalidParameterError, &quot;&#39;#{param}&#39; is not a valid #{type}&quot;</code>
1033
+ </li>
1034
+
1035
+ <li class="never" data-hits="" data-linenumber="158">
1036
+
1037
+
1038
+ <code class="ruby"> end</code>
1039
+ </li>
1040
+
1041
+ <li class="never" data-hits="" data-linenumber="159">
1042
+
1043
+
1044
+ <code class="ruby"> end</code>
1045
+ </li>
1046
+
1047
+ <li class="never" data-hits="" data-linenumber="160">
1048
+
1049
+
1050
+ <code class="ruby"></code>
1051
+ </li>
1052
+
1053
+ <li class="never" data-hits="" data-linenumber="161">
1054
+
1055
+
1056
+ <code class="ruby"> ###</code>
1057
+ </li>
1058
+
1059
+ <li class="never" data-hits="" data-linenumber="162">
1060
+
1061
+
1062
+ <code class="ruby"> # Array is a special case, we should convert from Hash</code>
1063
+ </li>
1064
+
1065
+ <li class="never" data-hits="" data-linenumber="163">
1066
+
1067
+
1068
+ <code class="ruby"> # or convert to string before parsing.</code>
1069
+ </li>
1070
+
1071
+ <li class="covered" data-hits="1" data-linenumber="164">
1072
+ <span class="hits">1</span>
1073
+
1074
+ <code class="ruby"> def coerce_array(param, options = {})</code>
1075
+ </li>
1076
+
1077
+ <li class="covered" data-hits="6" data-linenumber="165">
1078
+ <span class="hits">6</span>
1079
+
1080
+ <code class="ruby"> return param if param.is_a? Array</code>
1081
+ </li>
1082
+
1083
+ <li class="covered" data-hits="6" data-linenumber="166">
1084
+ <span class="hits">6</span>
1085
+
1086
+ <code class="ruby"> return param.to_a if param.is_a? Hash</code>
1087
+ </li>
1088
+
1089
+ <li class="covered" data-hits="5" data-linenumber="167">
1090
+ <span class="hits">5</span>
1091
+
1092
+ <code class="ruby"> Array(param.to_s.split(options[:delimiter] || &#39;,&#39;))</code>
1093
+ </li>
1094
+
1095
+ <li class="never" data-hits="" data-linenumber="168">
1096
+
1097
+
1098
+ <code class="ruby"> end</code>
1099
+ </li>
1100
+
1101
+ <li class="never" data-hits="" data-linenumber="169">
1102
+
1103
+
1104
+ <code class="ruby"></code>
1105
+ </li>
1106
+
1107
+ <li class="covered" data-hits="1" data-linenumber="170">
1108
+ <span class="hits">1</span>
1109
+
1110
+ <code class="ruby"> def validate!(param, options)</code>
1111
+ </li>
1112
+
1113
+ <li class="covered" data-hits="141" data-linenumber="171">
1114
+ <span class="hits">141</span>
1115
+
1116
+ <code class="ruby"> options.each do |key, value|</code>
1117
+ </li>
1118
+
1119
+ <li class="covered" data-hits="65" data-linenumber="172">
1120
+ <span class="hits">65</span>
1121
+
1122
+ <code class="ruby"> case key</code>
1123
+ </li>
1124
+
1125
+ <li class="never" data-hits="" data-linenumber="173">
1126
+
1127
+
1128
+ <code class="ruby"> when :required</code>
1129
+ </li>
1130
+
1131
+ <li class="covered" data-hits="12" data-linenumber="174">
1132
+ <span class="hits">12</span>
1133
+
1134
+ <code class="ruby"> raise InvalidParameterError, &#39;Parameter is required&#39; if value &amp;&amp; param.nil?</code>
1135
+ </li>
1136
+
1137
+ <li class="never" data-hits="" data-linenumber="175">
1138
+
1139
+
1140
+ <code class="ruby"> when :blank</code>
1141
+ </li>
1142
+
1143
+ <li class="never" data-hits="" data-linenumber="176">
1144
+
1145
+
1146
+ <code class="ruby"> raise InvalidParameterError, &#39;Parameter cannot be blank&#39; if !value &amp;&amp; case param</code>
1147
+ </li>
1148
+
1149
+ <li class="never" data-hits="" data-linenumber="177">
1150
+
1151
+
1152
+ <code class="ruby"> when String</code>
1153
+ </li>
1154
+
1155
+ <li class="covered" data-hits="1" data-linenumber="178">
1156
+ <span class="hits">1</span>
1157
+
1158
+ <code class="ruby"> !(/\S/ === param)</code>
1159
+ </li>
1160
+
1161
+ <li class="never" data-hits="" data-linenumber="179">
1162
+
1163
+
1164
+ <code class="ruby"> when Array, Hash</code>
1165
+ </li>
1166
+
1167
+ <li class="covered" data-hits="2" data-linenumber="180">
1168
+ <span class="hits">2</span>
1169
+
1170
+ <code class="ruby"> param.empty?</code>
1171
+ </li>
1172
+
1173
+ <li class="never" data-hits="" data-linenumber="181">
1174
+
1175
+
1176
+ <code class="ruby"> else</code>
1177
+ </li>
1178
+
1179
+ <li class="covered" data-hits="1" data-linenumber="182">
1180
+ <span class="hits">1</span>
1181
+
1182
+ <code class="ruby"> param.nil?</code>
1183
+ </li>
1184
+
1185
+ <li class="covered" data-hits="5" data-linenumber="183">
1186
+ <span class="hits">5</span>
1187
+
1188
+ <code class="ruby"> end</code>
1189
+ </li>
1190
+
1191
+ <li class="never" data-hits="" data-linenumber="184">
1192
+
1193
+
1194
+ <code class="ruby"> when :format</code>
1195
+ </li>
1196
+
1197
+ <li class="never" data-hits="" data-linenumber="185">
1198
+
1199
+
1200
+ <code class="ruby"> raise InvalidParameterError,</code>
1201
+ </li>
1202
+
1203
+ <li class="never" data-hits="" data-linenumber="186">
1204
+
1205
+
1206
+ <code class="ruby"> &#39;Parameter must be a string if using the format validation&#39; unless</code>
1207
+ </li>
1208
+
1209
+ <li class="covered" data-hits="3" data-linenumber="187">
1210
+ <span class="hits">3</span>
1211
+
1212
+ <code class="ruby"> param.kind_of?(String)</code>
1213
+ </li>
1214
+
1215
+ <li class="covered" data-hits="2" data-linenumber="188">
1216
+ <span class="hits">2</span>
1217
+
1218
+ <code class="ruby"> raise InvalidParameterError, &quot;Parameter must match format #{value}&quot; unless param =~ value</code>
1219
+ </li>
1220
+
1221
+ <li class="never" data-hits="" data-linenumber="189">
1222
+
1223
+
1224
+ <code class="ruby"> when :is</code>
1225
+ </li>
1226
+
1227
+ <li class="covered" data-hits="2" data-linenumber="190">
1228
+ <span class="hits">2</span>
1229
+
1230
+ <code class="ruby"> raise InvalidParameterError, &quot;Parameter must be #{value}&quot; unless param === value</code>
1231
+ </li>
1232
+
1233
+ <li class="never" data-hits="" data-linenumber="191">
1234
+
1235
+
1236
+ <code class="ruby"> when :in, :within, :range</code>
1237
+ </li>
1238
+
1239
+ <li class="never" data-hits="" data-linenumber="192">
1240
+
1241
+
1242
+ <code class="ruby"> raise InvalidParameterError, &quot;Parameter must be within #{value}&quot; unless param.nil? ||</code>
1243
+ </li>
1244
+
1245
+ <li class="never" data-hits="" data-linenumber="193">
1246
+
1247
+
1248
+ <code class="ruby"> case value</code>
1249
+ </li>
1250
+
1251
+ <li class="never" data-hits="" data-linenumber="194">
1252
+
1253
+
1254
+ <code class="ruby"> when Range</code>
1255
+ </li>
1256
+
1257
+ <li class="covered" data-hits="8" data-linenumber="195">
1258
+ <span class="hits">8</span>
1259
+
1260
+ <code class="ruby"> case param</code>
1261
+ </li>
1262
+
1263
+ <li class="never" data-hits="" data-linenumber="196">
1264
+
1265
+
1266
+ <code class="ruby"> when Array</code>
1267
+ </li>
1268
+
1269
+ <li class="covered" data-hits="10" data-linenumber="197">
1270
+ <span class="hits">10</span>
1271
+
1272
+ <code class="ruby"> param.all? { |element| value.include?(element) }</code>
1273
+ </li>
1274
+
1275
+ <li class="never" data-hits="" data-linenumber="198">
1276
+
1277
+
1278
+ <code class="ruby"> else</code>
1279
+ </li>
1280
+
1281
+ <li class="covered" data-hits="4" data-linenumber="199">
1282
+ <span class="hits">4</span>
1283
+
1284
+ <code class="ruby"> value.include?(param)</code>
1285
+ </li>
1286
+
1287
+ <li class="never" data-hits="" data-linenumber="200">
1288
+
1289
+
1290
+ <code class="ruby"> end</code>
1291
+ </li>
1292
+
1293
+ <li class="never" data-hits="" data-linenumber="201">
1294
+
1295
+
1296
+ <code class="ruby"> else</code>
1297
+ </li>
1298
+
1299
+ <li class="covered" data-hits="4" data-linenumber="202">
1300
+ <span class="hits">4</span>
1301
+
1302
+ <code class="ruby"> case param</code>
1303
+ </li>
1304
+
1305
+ <li class="never" data-hits="" data-linenumber="203">
1306
+
1307
+
1308
+ <code class="ruby"> when Array</code>
1309
+ </li>
1310
+
1311
+ <li class="covered" data-hits="2" data-linenumber="204">
1312
+ <span class="hits">2</span>
1313
+
1314
+ <code class="ruby"> (param - Array(value)).empty?</code>
1315
+ </li>
1316
+
1317
+ <li class="never" data-hits="" data-linenumber="205">
1318
+
1319
+
1320
+ <code class="ruby"> else</code>
1321
+ </li>
1322
+
1323
+ <li class="covered" data-hits="2" data-linenumber="206">
1324
+ <span class="hits">2</span>
1325
+
1326
+ <code class="ruby"> Array(value).include?(param)</code>
1327
+ </li>
1328
+
1329
+ <li class="never" data-hits="" data-linenumber="207">
1330
+
1331
+
1332
+ <code class="ruby"> end</code>
1333
+ </li>
1334
+
1335
+ <li class="covered" data-hits="13" data-linenumber="208">
1336
+ <span class="hits">13</span>
1337
+
1338
+ <code class="ruby"> end</code>
1339
+ </li>
1340
+
1341
+ <li class="never" data-hits="" data-linenumber="209">
1342
+
1343
+
1344
+ <code class="ruby"> when :min</code>
1345
+ </li>
1346
+
1347
+ <li class="covered" data-hits="2" data-linenumber="210">
1348
+ <span class="hits">2</span>
1349
+
1350
+ <code class="ruby"> raise InvalidParameterError, &quot;Parameter cannot be less than #{value}&quot; unless param.nil? || value &lt;= param</code>
1351
+ </li>
1352
+
1353
+ <li class="never" data-hits="" data-linenumber="211">
1354
+
1355
+
1356
+ <code class="ruby"> when :max</code>
1357
+ </li>
1358
+
1359
+ <li class="covered" data-hits="2" data-linenumber="212">
1360
+ <span class="hits">2</span>
1361
+
1362
+ <code class="ruby"> raise InvalidParameterError, &quot;Parameter cannot be greater than #{value}&quot; unless param.nil? || value &gt;= param</code>
1363
+ </li>
1364
+
1365
+ <li class="never" data-hits="" data-linenumber="213">
1366
+
1367
+
1368
+ <code class="ruby"> when :min_length</code>
1369
+ </li>
1370
+
1371
+ <li class="covered" data-hits="1" data-linenumber="214">
1372
+ <span class="hits">1</span>
1373
+
1374
+ <code class="ruby"> raise InvalidParameterError, &quot;Parameter cannot have length less than #{value}&quot; unless param.nil? || value &lt;= param.length</code>
1375
+ </li>
1376
+
1377
+ <li class="never" data-hits="" data-linenumber="215">
1378
+
1379
+
1380
+ <code class="ruby"> when :max_length</code>
1381
+ </li>
1382
+
1383
+ <li class="covered" data-hits="3" data-linenumber="216">
1384
+ <span class="hits">3</span>
1385
+
1386
+ <code class="ruby"> raise InvalidParameterError, &quot;Parameter cannot have length greater than #{value}&quot; unless param.nil? || value &gt;= param.length</code>
1387
+ </li>
1388
+
1389
+ <li class="never" data-hits="" data-linenumber="217">
1390
+
1391
+
1392
+ <code class="ruby"> end</code>
1393
+ </li>
1394
+
1395
+ <li class="never" data-hits="" data-linenumber="218">
1396
+
1397
+
1398
+ <code class="ruby"> end</code>
1399
+ </li>
1400
+
1401
+ <li class="never" data-hits="" data-linenumber="219">
1402
+
1403
+
1404
+ <code class="ruby"> end</code>
1405
+ </li>
1406
+
1407
+ <li class="never" data-hits="" data-linenumber="220">
1408
+
1409
+
1410
+ <code class="ruby"></code>
1411
+ </li>
1412
+
1413
+ <li class="covered" data-hits="1" data-linenumber="221">
1414
+ <span class="hits">1</span>
1415
+
1416
+ <code class="ruby"> def validate_one_of!(params, names, options)</code>
1417
+ </li>
1418
+
1419
+ <li class="covered" data-hits="55" data-linenumber="222">
1420
+ <span class="hits">55</span>
1421
+
1422
+ <code class="ruby"> if names.count{|name| present?(params[name])} &gt; 1</code>
1423
+ </li>
1424
+
1425
+ <li class="covered" data-hits="6" data-linenumber="223">
1426
+ <span class="hits">6</span>
1427
+
1428
+ <code class="ruby"> raise InvalidParameterError, &quot;Only one of #{formatted_params(@parent_key_name, names)} is allowed&quot;</code>
1429
+ </li>
1430
+
1431
+ <li class="never" data-hits="" data-linenumber="224">
1432
+
1433
+
1434
+ <code class="ruby"> end</code>
1435
+ </li>
1436
+
1437
+ <li class="never" data-hits="" data-linenumber="225">
1438
+
1439
+
1440
+ <code class="ruby"> end</code>
1441
+ </li>
1442
+
1443
+ <li class="never" data-hits="" data-linenumber="226">
1444
+
1445
+
1446
+ <code class="ruby"></code>
1447
+ </li>
1448
+
1449
+ <li class="covered" data-hits="1" data-linenumber="227">
1450
+ <span class="hits">1</span>
1451
+
1452
+ <code class="ruby"> def validate_any_of!(params, names, options)</code>
1453
+ </li>
1454
+
1455
+ <li class="covered" data-hits="40" data-linenumber="228">
1456
+ <span class="hits">40</span>
1457
+
1458
+ <code class="ruby"> if names.count{|name| present?(params[name])} &lt; 1</code>
1459
+ </li>
1460
+
1461
+ <li class="covered" data-hits="3" data-linenumber="229">
1462
+ <span class="hits">3</span>
1463
+
1464
+ <code class="ruby"> raise InvalidParameterError, &quot;One of parameters #{formatted_params(@parent_key_name, names)} is required&quot;</code>
1465
+ </li>
1466
+
1467
+ <li class="never" data-hits="" data-linenumber="230">
1468
+
1469
+
1470
+ <code class="ruby"> end</code>
1471
+ </li>
1472
+
1473
+ <li class="never" data-hits="" data-linenumber="231">
1474
+
1475
+
1476
+ <code class="ruby"> end</code>
1477
+ </li>
1478
+
1479
+ <li class="never" data-hits="" data-linenumber="232">
1480
+
1481
+
1482
+ <code class="ruby"></code>
1483
+ </li>
1484
+
1485
+ <li class="covered" data-hits="1" data-linenumber="233">
1486
+ <span class="hits">1</span>
1487
+
1488
+ <code class="ruby"> def validate_all_or_none_of!(params, names, options)</code>
1489
+ </li>
1490
+
1491
+ <li class="covered" data-hits="20" data-linenumber="234">
1492
+ <span class="hits">20</span>
1493
+
1494
+ <code class="ruby"> present_count = names.count{|name| present?(params[name])}</code>
1495
+ </li>
1496
+
1497
+ <li class="covered" data-hits="5" data-linenumber="235">
1498
+ <span class="hits">5</span>
1499
+
1500
+ <code class="ruby"> raise InvalidParameterError, &quot;All or none of parameters [#{names.join(&#39;, &#39;)}] are required&quot; if present_count &gt; 0 and present_count != names.length</code>
1501
+ </li>
1502
+
1503
+ <li class="never" data-hits="" data-linenumber="236">
1504
+
1505
+
1506
+ <code class="ruby"> end</code>
1507
+ </li>
1508
+
1509
+ <li class="never" data-hits="" data-linenumber="237">
1510
+
1511
+
1512
+ <code class="ruby"></code>
1513
+ </li>
1514
+
1515
+ <li class="never" data-hits="" data-linenumber="238">
1516
+
1517
+
1518
+ <code class="ruby"> # ActiveSupport #present? and #blank? without patching Object</code>
1519
+ </li>
1520
+
1521
+ <li class="covered" data-hits="1" data-linenumber="239">
1522
+ <span class="hits">1</span>
1523
+
1524
+ <code class="ruby"> def present?(object)</code>
1525
+ </li>
1526
+
1527
+ <li class="covered" data-hits="85" data-linenumber="240">
1528
+ <span class="hits">85</span>
1529
+
1530
+ <code class="ruby"> !blank?(object)</code>
1531
+ </li>
1532
+
1533
+ <li class="never" data-hits="" data-linenumber="241">
1534
+
1535
+
1536
+ <code class="ruby"> end</code>
1537
+ </li>
1538
+
1539
+ <li class="never" data-hits="" data-linenumber="242">
1540
+
1541
+
1542
+ <code class="ruby"></code>
1543
+ </li>
1544
+
1545
+ <li class="covered" data-hits="1" data-linenumber="243">
1546
+ <span class="hits">1</span>
1547
+
1548
+ <code class="ruby"> def blank?(object)</code>
1549
+ </li>
1550
+
1551
+ <li class="covered" data-hits="85" data-linenumber="244">
1552
+ <span class="hits">85</span>
1553
+
1554
+ <code class="ruby"> object.respond_to?(:empty?) ? object.empty? : !object</code>
1555
+ </li>
1556
+
1557
+ <li class="never" data-hits="" data-linenumber="245">
1558
+
1559
+
1560
+ <code class="ruby"> end</code>
1561
+ </li>
1562
+
1563
+ <li class="never" data-hits="" data-linenumber="246">
1564
+
1565
+
1566
+ <code class="ruby"></code>
1567
+ </li>
1568
+
1569
+ <li class="covered" data-hits="1" data-linenumber="247">
1570
+ <span class="hits">1</span>
1571
+
1572
+ <code class="ruby"> def formatted_params(parent_key, name)</code>
1573
+ </li>
1574
+
1575
+ <li class="covered" data-hits="55" data-linenumber="248">
1576
+ <span class="hits">55</span>
1577
+
1578
+ <code class="ruby"> if name.is_a?(Array)</code>
1579
+ </li>
1580
+
1581
+ <li class="covered" data-hits="16" data-linenumber="249">
1582
+ <span class="hits">16</span>
1583
+
1584
+ <code class="ruby"> name = &quot;[#{name.join(&#39;, &#39;)}]&quot;</code>
1585
+ </li>
1586
+
1587
+ <li class="never" data-hits="" data-linenumber="250">
1588
+
1589
+
1590
+ <code class="ruby"> end</code>
1591
+ </li>
1592
+
1593
+ <li class="never" data-hits="" data-linenumber="251">
1594
+
1595
+
1596
+ <code class="ruby"></code>
1597
+ </li>
1598
+
1599
+ <li class="covered" data-hits="55" data-linenumber="252">
1600
+ <span class="hits">55</span>
1601
+
1602
+ <code class="ruby"> return parent_key ? &quot;#{parent_key}[#{name}]&quot; : name</code>
1603
+ </li>
1604
+
1605
+ <li class="never" data-hits="" data-linenumber="253">
1606
+
1607
+
1608
+ <code class="ruby"> end</code>
1609
+ </li>
1610
+
1611
+ <li class="never" data-hits="" data-linenumber="254">
1612
+
1613
+
1614
+ <code class="ruby"> end</code>
1615
+ </li>
1616
+
1617
+ <li class="never" data-hits="" data-linenumber="255">
1618
+
1619
+
1620
+ <code class="ruby"></code>
1621
+ </li>
1622
+
1623
+ <li class="covered" data-hits="1" data-linenumber="256">
1624
+ <span class="hits">1</span>
1625
+
1626
+ <code class="ruby"> helpers Param</code>
1627
+ </li>
1628
+
1629
+ <li class="never" data-hits="" data-linenumber="257">
1630
+
1631
+
1632
+ <code class="ruby">end</code>
1633
+ </li>
1634
+
1635
+ </ol>
1636
+ </pre>
1637
+ </div>
1638
+
1639
+
1640
+ </div>
1641
+ </div>
1642
+ </body>
1643
+ </html>