sinatra-param2 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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>