sinatra-param 1.2.2 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0bfb3b1d56f4f3f6121fc255807db2ab2955c821
4
- data.tar.gz: 1ee2431a66db098230a2547154caaec38657e3ab
3
+ metadata.gz: 41745f2481953252139149d9cd960c0d0ebfe218
4
+ data.tar.gz: 690bb03e1469f59231190f46b805a5bed38a0906
5
5
  SHA512:
6
- metadata.gz: 9c9c46a5f50f40bf28163357db2875f0156bccb5887f907c84a0ebfb889ecb84b0715cc3db5f3ed7c102717a14cdce4eadb49165fe63d23b011818cebfde18c9
7
- data.tar.gz: 8857b062e3ac962278f880d8e922cd9686c525b5ee43318150aee043d223df21fc4667f81cf5640e1a7f0b9b5a48cf0aeba92a0a3cdcbe9c8b93085f38576cd5
6
+ metadata.gz: 383b1b4052465f089c1c8c3d8cb5bd6527fb364e8acec1b7ddeeedd8ac021c598a755273fca0e25f260a757844942a4239b14980db89b6c7fb027b5aeec1b844
7
+ data.tar.gz: 31afa16492bd2030f635853bea4f698bfa8cc7e283c991a2f3fb5497a9bdb77ed0055e62c9aa04bbd81d0c0a967b894cb837f0fbde8a22af907aeb8c092e9917
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sinatra-param (1.2.2)
4
+ sinatra-param (1.3.0)
5
5
  sinatra (~> 1.3)
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -35,6 +35,8 @@ class App < Sinatra::Base
35
35
  param :order, String, in: ["ASC", "DESC"], transform: :upcase, default: "ASC"
36
36
  param :price, String, format: "[<\=>]\s*\$\d+"
37
37
 
38
+ one_of :q, :categories
39
+
38
40
  {...}.to_json
39
41
  end
40
42
  end
@@ -79,6 +81,18 @@ param :order, String, in: ["ASC", "DESC"], transform: :upcase, default: "ASC"
79
81
  param :offset, Integer, min: 0, transform: lambda {|n| n - (n % 10)}
80
82
  ```
81
83
 
84
+ ### Mutual Exclusivity
85
+
86
+ Using `one_of`, routes can specify two or more parameters to be mutually exclusive, and fail if more than one of those parameters is specified:
87
+
88
+ ```ruby
89
+ param :a, String
90
+ param :b, String
91
+ param :c, String
92
+
93
+ one_of :a, :b, :c
94
+ ```
95
+
82
96
  ### Exceptions
83
97
 
84
98
  By default, when a parameter precondition fails, `Sinatra::Param` will `halt 400` with an error message:
@@ -106,6 +120,8 @@ Custom exception handling can also be enabled on an individual parameter basis,
106
120
 
107
121
  ```ruby
108
122
  param :order, String, in: ["ASC", "DESC"], raise: true
123
+
124
+ one_of :q, :categories, raise: true
109
125
  ```
110
126
 
111
127
  ## Contact
@@ -14,7 +14,7 @@
14
14
  <img src="./assets/0.7.1/loading.gif" alt="loading"/>
15
15
  </div>
16
16
  <div id="wrapper" style="display:none;">
17
- <div class="timestamp">Generated <abbr class="timeago" title="2014-04-08T11:42:12-07:00">2014-04-08T11:42:12-07:00</abbr></div>
17
+ <div class="timestamp">Generated <abbr class="timeago" title="2015-01-20T09:50:50-08:00">2015-01-20T09:50:50-08:00</abbr></div>
18
18
  <ul class="group_tabs"></ul>
19
19
 
20
20
  <div id="content">
@@ -25,15 +25,15 @@
25
25
  covered at
26
26
  <span class="covered_strength">
27
27
  <span class="green">
28
- 19.9
28
+ 19.8
29
29
  </span>
30
30
  </span> hits/line)
31
31
  </h2>
32
32
  <a name="AllFiles"></a>
33
33
  <div>
34
34
  <b>1</b> files in total.
35
- <b>74</b> relevant lines.
36
- <span class="green"><b>74</b> lines covered</span> and
35
+ <b>80</b> relevant lines.
36
+ <span class="green"><b>80</b> lines covered</span> and
37
37
  <span class="red"><b>0</b> lines missed </span>
38
38
  </div>
39
39
  <table class="file_list">
@@ -53,11 +53,11 @@
53
53
  <tr>
54
54
  <td class="strong"><a href="#0f7926ededdfd8418773c107837b6dc4182659b8" class="src_link" title="lib/sinatra/param.rb">lib/sinatra/param.rb</a></td>
55
55
  <td class="green strong">100.0 %</td>
56
- <td>126</td>
57
- <td>74</td>
58
- <td>74</td>
56
+ <td>136</td>
57
+ <td>80</td>
58
+ <td>80</td>
59
59
  <td>0</td>
60
- <td>19.9</td>
60
+ <td>19.8</td>
61
61
  </tr>
62
62
 
63
63
  </tbody>
@@ -81,8 +81,8 @@
81
81
  <h3>lib/sinatra/param.rb</h3>
82
82
  <h4><span class="green">100.0 %</span> covered</h4>
83
83
  <div>
84
- <b>74</b> relevant lines.
85
- <span class="green"><b>74</b> lines covered</span> and
84
+ <b>80</b> relevant lines.
85
+ <span class="green"><b>80</b> lines covered</span> and
86
86
  <span class="red"><b>0</b> lines missed.</span>
87
87
  </div>
88
88
  </div>
@@ -174,8 +174,8 @@
174
174
  <code class="ruby"> def param(name, type, options = {})</code>
175
175
  </li>
176
176
 
177
- <li class="covered" data-hits="88" data-linenumber="15">
178
- <span class="hits">88</span>
177
+ <li class="covered" data-hits="96" data-linenumber="15">
178
+ <span class="hits">96</span>
179
179
 
180
180
  <code class="ruby"> name = name.to_s</code>
181
181
  </li>
@@ -186,10 +186,10 @@
186
186
  <code class="ruby"></code>
187
187
  </li>
188
188
 
189
- <li class="covered" data-hits="88" data-linenumber="17">
190
- <span class="hits">88</span>
189
+ <li class="covered" data-hits="96" data-linenumber="17">
190
+ <span class="hits">96</span>
191
191
 
192
- <code class="ruby"> return unless params.member?(name) or present?(options[:default]) or options[:required]</code>
192
+ <code class="ruby"> return unless params.member?(name) or options[:default] or options[:required]</code>
193
193
  </li>
194
194
 
195
195
  <li class="never" data-hits="" data-linenumber="18">
@@ -198,44 +198,44 @@
198
198
  <code class="ruby"></code>
199
199
  </li>
200
200
 
201
- <li class="covered" data-hits="79" data-linenumber="19">
202
- <span class="hits">79</span>
201
+ <li class="covered" data-hits="84" data-linenumber="19">
202
+ <span class="hits">84</span>
203
203
 
204
204
  <code class="ruby"> begin</code>
205
205
  </li>
206
206
 
207
- <li class="covered" data-hits="79" data-linenumber="20">
208
- <span class="hits">79</span>
207
+ <li class="covered" data-hits="84" data-linenumber="20">
208
+ <span class="hits">84</span>
209
209
 
210
210
  <code class="ruby"> params[name] = coerce(params[name], type, options)</code>
211
211
  </li>
212
212
 
213
- <li class="covered" data-hits="74" data-linenumber="21">
214
- <span class="hits">74</span>
213
+ <li class="covered" data-hits="79" data-linenumber="21">
214
+ <span class="hits">79</span>
215
215
 
216
216
  <code class="ruby"> params[name] = (options[:default].call if options[:default].respond_to?(:call)) || options[:default] if params[name].nil? and options[:default]</code>
217
217
  </li>
218
218
 
219
- <li class="covered" data-hits="74" data-linenumber="22">
220
- <span class="hits">74</span>
219
+ <li class="covered" data-hits="79" data-linenumber="22">
220
+ <span class="hits">79</span>
221
221
 
222
- <code class="ruby"> params[name] = options[:transform].to_proc.call(params[name]) if options[:transform]</code>
222
+ <code class="ruby"> params[name] = options[:transform].to_proc.call(params[name]) if params[name] and options[:transform]</code>
223
223
  </li>
224
224
 
225
- <li class="covered" data-hits="74" data-linenumber="23">
226
- <span class="hits">74</span>
225
+ <li class="covered" data-hits="79" data-linenumber="23">
226
+ <span class="hits">79</span>
227
227
 
228
228
  <code class="ruby"> validate!(params[name], options)</code>
229
229
  </li>
230
230
 
231
- <li class="covered" data-hits="21" data-linenumber="24">
232
- <span class="hits">21</span>
231
+ <li class="covered" data-hits="22" data-linenumber="24">
232
+ <span class="hits">22</span>
233
233
 
234
234
  <code class="ruby"> rescue InvalidParameterError =&gt; exception</code>
235
235
  </li>
236
236
 
237
- <li class="covered" data-hits="21" data-linenumber="25">
238
- <span class="hits">21</span>
237
+ <li class="covered" data-hits="22" data-linenumber="25">
238
+ <span class="hits">22</span>
239
239
 
240
240
  <code class="ruby"> if options[:raise] or (settings.raise_sinatra_param_exceptions rescue false)</code>
241
241
  </li>
@@ -264,20 +264,20 @@
264
264
  <code class="ruby"></code>
265
265
  </li>
266
266
 
267
- <li class="covered" data-hits="20" data-linenumber="30">
268
- <span class="hits">20</span>
267
+ <li class="covered" data-hits="21" data-linenumber="30">
268
+ <span class="hits">21</span>
269
269
 
270
270
  <code class="ruby"> error = &quot;Invalid Parameter: #{name}&quot;</code>
271
271
  </li>
272
272
 
273
- <li class="covered" data-hits="20" data-linenumber="31">
274
- <span class="hits">20</span>
273
+ <li class="covered" data-hits="21" data-linenumber="31">
274
+ <span class="hits">21</span>
275
275
 
276
276
  <code class="ruby"> if content_type and content_type.match(mime_type(:json))</code>
277
277
  </li>
278
278
 
279
- <li class="covered" data-hits="20" data-linenumber="32">
280
- <span class="hits">20</span>
279
+ <li class="covered" data-hits="21" data-linenumber="32">
280
+ <span class="hits">21</span>
281
281
 
282
282
  <code class="ruby"> error = {message: error, errors: {name =&gt; exception.message}}.to_json</code>
283
283
  </li>
@@ -294,8 +294,8 @@
294
294
  <code class="ruby"></code>
295
295
  </li>
296
296
 
297
- <li class="covered" data-hits="20" data-linenumber="35">
298
- <span class="hits">20</span>
297
+ <li class="covered" data-hits="21" data-linenumber="35">
298
+ <span class="hits">21</span>
299
299
 
300
300
  <code class="ruby"> halt 400, error</code>
301
301
  </li>
@@ -321,526 +321,586 @@
321
321
  <li class="covered" data-hits="1" data-linenumber="39">
322
322
  <span class="hits">1</span>
323
323
 
324
- <code class="ruby"> def one_of(*names)</code>
324
+ <code class="ruby"> def one_of(*args)</code>
325
325
  </li>
326
326
 
327
- <li class="covered" data-hits="6" data-linenumber="40">
328
- <span class="hits">6</span>
327
+ <li class="covered" data-hits="8" data-linenumber="40">
328
+ <span class="hits">8</span>
329
329
 
330
- <code class="ruby"> count = 0</code>
330
+ <code class="ruby"> options = args.last.is_a?(Hash) ? args.pop : {}</code>
331
331
  </li>
332
332
 
333
- <li class="covered" data-hits="6" data-linenumber="41">
334
- <span class="hits">6</span>
333
+ <li class="covered" data-hits="8" data-linenumber="41">
334
+ <span class="hits">8</span>
335
335
 
336
- <code class="ruby"> names.each do |name|</code>
336
+ <code class="ruby"> names = args.collect(&amp;:to_s)</code>
337
337
  </li>
338
338
 
339
- <li class="covered" data-hits="16" data-linenumber="42">
340
- <span class="hits">16</span>
339
+ <li class="never" data-hits="" data-linenumber="42">
340
+
341
341
 
342
- <code class="ruby"> if params[name] and present?(params[name])</code>
342
+ <code class="ruby"></code>
343
343
  </li>
344
344
 
345
- <li class="covered" data-hits="9" data-linenumber="43">
346
- <span class="hits">9</span>
345
+ <li class="covered" data-hits="8" data-linenumber="43">
346
+ <span class="hits">8</span>
347
347
 
348
- <code class="ruby"> count += 1</code>
348
+ <code class="ruby"> return unless names.length &gt; 2</code>
349
349
  </li>
350
350
 
351
- <li class="covered" data-hits="9" data-linenumber="44">
352
- <span class="hits">9</span>
351
+ <li class="never" data-hits="" data-linenumber="44">
353
352
 
354
- <code class="ruby"> next unless count &gt; 1</code>
353
+
354
+ <code class="ruby"></code>
355
355
  </li>
356
356
 
357
- <li class="never" data-hits="" data-linenumber="45">
357
+ <li class="covered" data-hits="8" data-linenumber="45">
358
+ <span class="hits">8</span>
358
359
 
360
+ <code class="ruby"> begin</code>
361
+ </li>
362
+
363
+ <li class="covered" data-hits="8" data-linenumber="46">
364
+ <span class="hits">8</span>
359
365
 
360
- <code class="ruby"></code>
366
+ <code class="ruby"> validate_one_of!(params, names, options)</code>
361
367
  </li>
362
368
 
363
- <li class="covered" data-hits="3" data-linenumber="46">
364
- <span class="hits">3</span>
369
+ <li class="covered" data-hits="4" data-linenumber="47">
370
+ <span class="hits">4</span>
365
371
 
366
- <code class="ruby"> error = &quot;Parameters #{names.join(&#39;, &#39;)} are mutually exclusive&quot;</code>
372
+ <code class="ruby"> rescue InvalidParameterError =&gt; exception</code>
367
373
  </li>
368
374
 
369
- <li class="covered" data-hits="3" data-linenumber="47">
370
- <span class="hits">3</span>
375
+ <li class="covered" data-hits="4" data-linenumber="48">
376
+ <span class="hits">4</span>
371
377
 
372
- <code class="ruby"> if content_type and content_type.match(mime_type(:json))</code>
378
+ <code class="ruby"> if options[:raise] or (settings.raise_sinatra_param_exceptions rescue false)</code>
373
379
  </li>
374
380
 
375
- <li class="covered" data-hits="3" data-linenumber="48">
376
- <span class="hits">3</span>
381
+ <li class="covered" data-hits="1" data-linenumber="49">
382
+ <span class="hits">1</span>
377
383
 
378
- <code class="ruby"> error = {message: error}.to_json</code>
384
+ <code class="ruby"> exception.param, exception.options = names, options</code>
379
385
  </li>
380
386
 
381
- <li class="never" data-hits="" data-linenumber="49">
387
+ <li class="covered" data-hits="1" data-linenumber="50">
388
+ <span class="hits">1</span>
389
+
390
+ <code class="ruby"> raise exception</code>
391
+ </li>
392
+
393
+ <li class="never" data-hits="" data-linenumber="51">
382
394
 
383
395
 
384
- <code class="ruby"> end</code>
396
+ <code class="ruby"> end</code>
385
397
  </li>
386
398
 
387
- <li class="never" data-hits="" data-linenumber="50">
399
+ <li class="never" data-hits="" data-linenumber="52">
388
400
 
389
401
 
390
402
  <code class="ruby"></code>
391
403
  </li>
392
404
 
393
- <li class="covered" data-hits="3" data-linenumber="51">
405
+ <li class="covered" data-hits="3" data-linenumber="53">
394
406
  <span class="hits">3</span>
395
407
 
396
- <code class="ruby"> halt 400, error</code>
408
+ <code class="ruby"> error = &quot;Parameters #{names.join(&#39;, &#39;)} are mutually exclusive&quot;</code>
397
409
  </li>
398
410
 
399
- <li class="never" data-hits="" data-linenumber="52">
411
+ <li class="covered" data-hits="3" data-linenumber="54">
412
+ <span class="hits">3</span>
413
+
414
+ <code class="ruby"> if content_type and content_type.match(mime_type(:json))</code>
415
+ </li>
416
+
417
+ <li class="covered" data-hits="3" data-linenumber="55">
418
+ <span class="hits">3</span>
419
+
420
+ <code class="ruby"> error = {message: error, errors: {names =&gt; exception.message}}.to_json</code>
421
+ </li>
422
+
423
+ <li class="never" data-hits="" data-linenumber="56">
400
424
 
401
425
 
402
426
  <code class="ruby"> end</code>
403
427
  </li>
404
428
 
405
- <li class="never" data-hits="" data-linenumber="53">
429
+ <li class="never" data-hits="" data-linenumber="57">
430
+
431
+
432
+ <code class="ruby"></code>
433
+ </li>
434
+
435
+ <li class="covered" data-hits="3" data-linenumber="58">
436
+ <span class="hits">3</span>
437
+
438
+ <code class="ruby"> halt 400, error</code>
439
+ </li>
440
+
441
+ <li class="never" data-hits="" data-linenumber="59">
406
442
 
407
443
 
408
444
  <code class="ruby"> end</code>
409
445
  </li>
410
446
 
411
- <li class="never" data-hits="" data-linenumber="54">
447
+ <li class="never" data-hits="" data-linenumber="60">
412
448
 
413
449
 
414
450
  <code class="ruby"> end</code>
415
451
  </li>
416
452
 
417
- <li class="never" data-hits="" data-linenumber="55">
453
+ <li class="never" data-hits="" data-linenumber="61">
418
454
 
419
455
 
420
456
  <code class="ruby"></code>
421
457
  </li>
422
458
 
423
- <li class="covered" data-hits="1" data-linenumber="56">
459
+ <li class="covered" data-hits="1" data-linenumber="62">
424
460
  <span class="hits">1</span>
425
461
 
426
462
  <code class="ruby"> private</code>
427
463
  </li>
428
464
 
429
- <li class="never" data-hits="" data-linenumber="57">
465
+ <li class="never" data-hits="" data-linenumber="63">
430
466
 
431
467
 
432
468
  <code class="ruby"></code>
433
469
  </li>
434
470
 
435
- <li class="covered" data-hits="1" data-linenumber="58">
471
+ <li class="covered" data-hits="1" data-linenumber="64">
436
472
  <span class="hits">1</span>
437
473
 
438
474
  <code class="ruby"> def coerce(param, type, options = {})</code>
439
475
  </li>
440
476
 
441
- <li class="covered" data-hits="79" data-linenumber="59">
442
- <span class="hits">79</span>
477
+ <li class="covered" data-hits="84" data-linenumber="65">
478
+ <span class="hits">84</span>
443
479
 
444
480
  <code class="ruby"> begin</code>
445
481
  </li>
446
482
 
447
- <li class="covered" data-hits="79" data-linenumber="60">
448
- <span class="hits">79</span>
483
+ <li class="covered" data-hits="84" data-linenumber="66">
484
+ <span class="hits">84</span>
449
485
 
450
486
  <code class="ruby"> return nil if param.nil?</code>
451
487
  </li>
452
488
 
453
- <li class="covered" data-hits="74" data-linenumber="61">
454
- <span class="hits">74</span>
489
+ <li class="covered" data-hits="77" data-linenumber="67">
490
+ <span class="hits">77</span>
455
491
 
456
492
  <code class="ruby"> return param if (param.is_a?(type) rescue false)</code>
457
493
  </li>
458
494
 
459
- <li class="covered" data-hits="46" data-linenumber="62">
495
+ <li class="covered" data-hits="46" data-linenumber="68">
460
496
  <span class="hits">46</span>
461
497
 
462
498
  <code class="ruby"> return Integer(param) if type == Integer</code>
463
499
  </li>
464
500
 
465
- <li class="covered" data-hits="35" data-linenumber="63">
501
+ <li class="covered" data-hits="35" data-linenumber="69">
466
502
  <span class="hits">35</span>
467
503
 
468
504
  <code class="ruby"> return Float(param) if type == Float</code>
469
505
  </li>
470
506
 
471
- <li class="covered" data-hits="33" data-linenumber="64">
507
+ <li class="covered" data-hits="33" data-linenumber="70">
472
508
  <span class="hits">33</span>
473
509
 
474
510
  <code class="ruby"> return String(param) if type == String</code>
475
511
  </li>
476
512
 
477
- <li class="covered" data-hits="32" data-linenumber="65">
513
+ <li class="covered" data-hits="32" data-linenumber="71">
478
514
  <span class="hits">32</span>
479
515
 
480
516
  <code class="ruby"> return Date.parse(param) if type == Date</code>
481
517
  </li>
482
518
 
483
- <li class="covered" data-hits="30" data-linenumber="66">
519
+ <li class="covered" data-hits="30" data-linenumber="72">
484
520
  <span class="hits">30</span>
485
521
 
486
522
  <code class="ruby"> return Time.parse(param) if type == Time</code>
487
523
  </li>
488
524
 
489
- <li class="covered" data-hits="28" data-linenumber="67">
525
+ <li class="covered" data-hits="28" data-linenumber="73">
490
526
  <span class="hits">28</span>
491
527
 
492
528
  <code class="ruby"> return DateTime.parse(param) if type == DateTime</code>
493
529
  </li>
494
530
 
495
- <li class="covered" data-hits="26" data-linenumber="68">
531
+ <li class="covered" data-hits="26" data-linenumber="74">
496
532
  <span class="hits">26</span>
497
533
 
498
534
  <code class="ruby"> return Array(param.split(options[:delimiter] || &quot;,&quot;)) if type == Array</code>
499
535
  </li>
500
536
 
501
- <li class="covered" data-hits="25" data-linenumber="69">
537
+ <li class="covered" data-hits="25" data-linenumber="75">
502
538
  <span class="hits">25</span>
503
539
 
504
540
  <code class="ruby"> return Hash[param.split(options[:delimiter] || &quot;,&quot;).map{|c| c.split(options[:separator] || &quot;:&quot;)}] if type == Hash</code>
505
541
  </li>
506
542
 
507
- <li class="covered" data-hits="21" data-linenumber="70">
543
+ <li class="covered" data-hits="21" data-linenumber="76">
508
544
  <span class="hits">21</span>
509
545
 
510
546
  <code class="ruby"> return (/(false|f|no|n|0)$/i === param.to_s ? false : (/(true|t|yes|y|1)$/i === param.to_s ? true : nil)) if type == TrueClass || type == FalseClass || type == Boolean</code>
511
547
  </li>
512
548
 
513
- <li class="never" data-hits="" data-linenumber="71">
549
+ <li class="never" data-hits="" data-linenumber="77">
514
550
 
515
551
 
516
552
  <code class="ruby"> return nil</code>
517
553
  </li>
518
554
 
519
- <li class="covered" data-hits="5" data-linenumber="72">
555
+ <li class="covered" data-hits="5" data-linenumber="78">
520
556
  <span class="hits">5</span>
521
557
 
522
558
  <code class="ruby"> rescue ArgumentError</code>
523
559
  </li>
524
560
 
525
- <li class="covered" data-hits="5" data-linenumber="73">
561
+ <li class="covered" data-hits="5" data-linenumber="79">
526
562
  <span class="hits">5</span>
527
563
 
528
564
  <code class="ruby"> raise InvalidParameterError, &quot;&#39;#{param}&#39; is not a valid #{type}&quot;</code>
529
565
  </li>
530
566
 
531
- <li class="never" data-hits="" data-linenumber="74">
567
+ <li class="never" data-hits="" data-linenumber="80">
532
568
 
533
569
 
534
570
  <code class="ruby"> end</code>
535
571
  </li>
536
572
 
537
- <li class="never" data-hits="" data-linenumber="75">
573
+ <li class="never" data-hits="" data-linenumber="81">
538
574
 
539
575
 
540
576
  <code class="ruby"> end</code>
541
577
  </li>
542
578
 
543
- <li class="never" data-hits="" data-linenumber="76">
579
+ <li class="never" data-hits="" data-linenumber="82">
544
580
 
545
581
 
546
582
  <code class="ruby"></code>
547
583
  </li>
548
584
 
549
- <li class="covered" data-hits="1" data-linenumber="77">
585
+ <li class="covered" data-hits="1" data-linenumber="83">
550
586
  <span class="hits">1</span>
551
587
 
552
588
  <code class="ruby"> def validate!(param, options)</code>
553
589
  </li>
554
590
 
555
- <li class="covered" data-hits="74" data-linenumber="78">
556
- <span class="hits">74</span>
591
+ <li class="covered" data-hits="79" data-linenumber="84">
592
+ <span class="hits">79</span>
557
593
 
558
594
  <code class="ruby"> options.each do |key, value|</code>
559
595
  </li>
560
596
 
561
- <li class="covered" data-hits="43" data-linenumber="79">
562
- <span class="hits">43</span>
597
+ <li class="covered" data-hits="45" data-linenumber="85">
598
+ <span class="hits">45</span>
563
599
 
564
600
  <code class="ruby"> case key</code>
565
601
  </li>
566
602
 
567
- <li class="never" data-hits="" data-linenumber="80">
603
+ <li class="never" data-hits="" data-linenumber="86">
568
604
 
569
605
 
570
606
  <code class="ruby"> when :required</code>
571
607
  </li>
572
608
 
573
- <li class="covered" data-hits="4" data-linenumber="81">
574
- <span class="hits">4</span>
609
+ <li class="covered" data-hits="5" data-linenumber="87">
610
+ <span class="hits">5</span>
575
611
 
576
612
  <code class="ruby"> raise InvalidParameterError, &quot;Parameter is required&quot; if value &amp;&amp; param.nil?</code>
577
613
  </li>
578
614
 
579
- <li class="never" data-hits="" data-linenumber="82">
615
+ <li class="never" data-hits="" data-linenumber="88">
580
616
 
581
617
 
582
618
  <code class="ruby"> when :blank</code>
583
619
  </li>
584
620
 
585
- <li class="never" data-hits="" data-linenumber="83">
621
+ <li class="never" data-hits="" data-linenumber="89">
586
622
 
587
623
 
588
624
  <code class="ruby"> raise InvalidParameterError, &quot;Parameter cannot be blank&quot; if !value &amp;&amp; case param</code>
589
625
  </li>
590
626
 
591
- <li class="never" data-hits="" data-linenumber="84">
627
+ <li class="never" data-hits="" data-linenumber="90">
592
628
 
593
629
 
594
630
  <code class="ruby"> when String</code>
595
631
  </li>
596
632
 
597
- <li class="covered" data-hits="1" data-linenumber="85">
633
+ <li class="covered" data-hits="1" data-linenumber="91">
598
634
  <span class="hits">1</span>
599
635
 
600
636
  <code class="ruby"> !(/\S/ === param)</code>
601
637
  </li>
602
638
 
603
- <li class="never" data-hits="" data-linenumber="86">
639
+ <li class="never" data-hits="" data-linenumber="92">
604
640
 
605
641
 
606
642
  <code class="ruby"> when Array, Hash</code>
607
643
  </li>
608
644
 
609
- <li class="covered" data-hits="2" data-linenumber="87">
645
+ <li class="covered" data-hits="2" data-linenumber="93">
610
646
  <span class="hits">2</span>
611
647
 
612
648
  <code class="ruby"> param.empty?</code>
613
649
  </li>
614
650
 
615
- <li class="never" data-hits="" data-linenumber="88">
651
+ <li class="never" data-hits="" data-linenumber="94">
616
652
 
617
653
 
618
654
  <code class="ruby"> else</code>
619
655
  </li>
620
656
 
621
- <li class="covered" data-hits="1" data-linenumber="89">
657
+ <li class="covered" data-hits="1" data-linenumber="95">
622
658
  <span class="hits">1</span>
623
659
 
624
660
  <code class="ruby"> param.nil?</code>
625
661
  </li>
626
662
 
627
- <li class="covered" data-hits="5" data-linenumber="90">
663
+ <li class="covered" data-hits="5" data-linenumber="96">
628
664
  <span class="hits">5</span>
629
665
 
630
666
  <code class="ruby"> end</code>
631
667
  </li>
632
668
 
633
- <li class="never" data-hits="" data-linenumber="91">
669
+ <li class="never" data-hits="" data-linenumber="97">
634
670
 
635
671
 
636
672
  <code class="ruby"> when :format</code>
637
673
  </li>
638
674
 
639
- <li class="covered" data-hits="3" data-linenumber="92">
675
+ <li class="covered" data-hits="3" data-linenumber="98">
640
676
  <span class="hits">3</span>
641
677
 
642
678
  <code class="ruby"> raise InvalidParameterError, &quot;Parameter must be a string if using the format validation&quot; unless param.kind_of?(String)</code>
643
679
  </li>
644
680
 
645
- <li class="covered" data-hits="2" data-linenumber="93">
681
+ <li class="covered" data-hits="2" data-linenumber="99">
646
682
  <span class="hits">2</span>
647
683
 
648
684
  <code class="ruby"> raise InvalidParameterError, &quot;Parameter must match format #{value}&quot; unless param =~ value</code>
649
685
  </li>
650
686
 
651
- <li class="never" data-hits="" data-linenumber="94">
687
+ <li class="never" data-hits="" data-linenumber="100">
652
688
 
653
689
 
654
690
  <code class="ruby"> when :is</code>
655
691
  </li>
656
692
 
657
- <li class="covered" data-hits="2" data-linenumber="95">
693
+ <li class="covered" data-hits="2" data-linenumber="101">
658
694
  <span class="hits">2</span>
659
695
 
660
696
  <code class="ruby"> raise InvalidParameterError, &quot;Parameter must be #{value}&quot; unless param === value</code>
661
697
  </li>
662
698
 
663
- <li class="never" data-hits="" data-linenumber="96">
699
+ <li class="never" data-hits="" data-linenumber="102">
664
700
 
665
701
 
666
702
  <code class="ruby"> when :in, :within, :range</code>
667
703
  </li>
668
704
 
669
- <li class="never" data-hits="" data-linenumber="97">
705
+ <li class="never" data-hits="" data-linenumber="103">
670
706
 
671
707
 
672
708
  <code class="ruby"> raise InvalidParameterError, &quot;Parameter must be within #{value}&quot; unless param.nil? || case value</code>
673
709
  </li>
674
710
 
675
- <li class="never" data-hits="" data-linenumber="98">
711
+ <li class="never" data-hits="" data-linenumber="104">
676
712
 
677
713
 
678
714
  <code class="ruby"> when Range</code>
679
715
  </li>
680
716
 
681
- <li class="covered" data-hits="4" data-linenumber="99">
717
+ <li class="covered" data-hits="4" data-linenumber="105">
682
718
  <span class="hits">4</span>
683
719
 
684
720
  <code class="ruby"> value.include?(param)</code>
685
721
  </li>
686
722
 
687
- <li class="never" data-hits="" data-linenumber="100">
723
+ <li class="never" data-hits="" data-linenumber="106">
688
724
 
689
725
 
690
726
  <code class="ruby"> else</code>
691
727
  </li>
692
728
 
693
- <li class="covered" data-hits="2" data-linenumber="101">
729
+ <li class="covered" data-hits="2" data-linenumber="107">
694
730
  <span class="hits">2</span>
695
731
 
696
732
  <code class="ruby"> Array(value).include?(param)</code>
697
733
  </li>
698
734
 
699
- <li class="covered" data-hits="6" data-linenumber="102">
735
+ <li class="covered" data-hits="6" data-linenumber="108">
700
736
  <span class="hits">6</span>
701
737
 
702
738
  <code class="ruby"> end</code>
703
739
  </li>
704
740
 
705
- <li class="never" data-hits="" data-linenumber="103">
741
+ <li class="never" data-hits="" data-linenumber="109">
706
742
 
707
743
 
708
744
  <code class="ruby"> when :min</code>
709
745
  </li>
710
746
 
711
- <li class="covered" data-hits="2" data-linenumber="104">
747
+ <li class="covered" data-hits="2" data-linenumber="110">
712
748
  <span class="hits">2</span>
713
749
 
714
750
  <code class="ruby"> raise InvalidParameterError, &quot;Parameter cannot be less than #{value}&quot; unless param.nil? || value &lt;= param</code>
715
751
  </li>
716
752
 
717
- <li class="never" data-hits="" data-linenumber="105">
753
+ <li class="never" data-hits="" data-linenumber="111">
718
754
 
719
755
 
720
756
  <code class="ruby"> when :max</code>
721
757
  </li>
722
758
 
723
- <li class="covered" data-hits="2" data-linenumber="106">
759
+ <li class="covered" data-hits="2" data-linenumber="112">
724
760
  <span class="hits">2</span>
725
761
 
726
762
  <code class="ruby"> raise InvalidParameterError, &quot;Parameter cannot be greater than #{value}&quot; unless param.nil? || value &gt;= param</code>
727
763
  </li>
728
764
 
729
- <li class="never" data-hits="" data-linenumber="107">
765
+ <li class="never" data-hits="" data-linenumber="113">
730
766
 
731
767
 
732
768
  <code class="ruby"> when :min_length</code>
733
769
  </li>
734
770
 
735
- <li class="covered" data-hits="1" data-linenumber="108">
771
+ <li class="covered" data-hits="1" data-linenumber="114">
736
772
  <span class="hits">1</span>
737
773
 
738
774
  <code class="ruby"> raise InvalidParameterError, &quot;Parameter cannot have length less than #{value}&quot; unless param.nil? || value &lt;= param.length</code>
739
775
  </li>
740
776
 
741
- <li class="never" data-hits="" data-linenumber="109">
777
+ <li class="never" data-hits="" data-linenumber="115">
742
778
 
743
779
 
744
780
  <code class="ruby"> when :max_length</code>
745
781
  </li>
746
782
 
747
- <li class="covered" data-hits="3" data-linenumber="110">
783
+ <li class="covered" data-hits="3" data-linenumber="116">
748
784
  <span class="hits">3</span>
749
785
 
750
786
  <code class="ruby"> raise InvalidParameterError, &quot;Parameter cannot have length greater than #{value}&quot; unless param.nil? || value &gt;= param.length</code>
751
787
  </li>
752
788
 
753
- <li class="never" data-hits="" data-linenumber="111">
789
+ <li class="never" data-hits="" data-linenumber="117">
754
790
 
755
791
 
756
792
  <code class="ruby"> end</code>
757
793
  </li>
758
794
 
759
- <li class="never" data-hits="" data-linenumber="112">
795
+ <li class="never" data-hits="" data-linenumber="118">
760
796
 
761
797
 
762
798
  <code class="ruby"> end</code>
763
799
  </li>
764
800
 
765
- <li class="never" data-hits="" data-linenumber="113">
801
+ <li class="never" data-hits="" data-linenumber="119">
766
802
 
767
803
 
768
804
  <code class="ruby"> end</code>
769
805
  </li>
770
806
 
771
- <li class="never" data-hits="" data-linenumber="114">
807
+ <li class="never" data-hits="" data-linenumber="120">
772
808
 
773
809
 
774
810
  <code class="ruby"></code>
775
811
  </li>
776
812
 
777
- <li class="never" data-hits="" data-linenumber="115">
813
+ <li class="covered" data-hits="1" data-linenumber="121">
814
+ <span class="hits">1</span>
815
+
816
+ <code class="ruby"> def validate_one_of!(params, names, options)</code>
817
+ </li>
818
+
819
+ <li class="covered" data-hits="32" data-linenumber="122">
820
+ <span class="hits">32</span>
821
+
822
+ <code class="ruby"> raise InvalidParameterError, &quot;Parameters #{names.join(&#39;, &#39;)} are mutually exclusive&quot; if names.count{|name| present?(params[name])} &gt; 1</code>
823
+ </li>
824
+
825
+ <li class="never" data-hits="" data-linenumber="123">
826
+
827
+
828
+ <code class="ruby"> end</code>
829
+ </li>
830
+
831
+ <li class="never" data-hits="" data-linenumber="124">
832
+
833
+
834
+ <code class="ruby"></code>
835
+ </li>
836
+
837
+ <li class="never" data-hits="" data-linenumber="125">
778
838
 
779
839
 
780
840
  <code class="ruby"> # ActiveSupport #present? and #blank? without patching Object</code>
781
841
  </li>
782
842
 
783
- <li class="covered" data-hits="1" data-linenumber="116">
843
+ <li class="covered" data-hits="1" data-linenumber="126">
784
844
  <span class="hits">1</span>
785
845
 
786
846
  <code class="ruby"> def present?(object)</code>
787
847
  </li>
788
848
 
789
- <li class="covered" data-hits="23" data-linenumber="117">
790
- <span class="hits">23</span>
849
+ <li class="covered" data-hits="24" data-linenumber="127">
850
+ <span class="hits">24</span>
791
851
 
792
852
  <code class="ruby"> !blank?(object)</code>
793
853
  </li>
794
854
 
795
- <li class="never" data-hits="" data-linenumber="118">
855
+ <li class="never" data-hits="" data-linenumber="128">
796
856
 
797
857
 
798
858
  <code class="ruby"> end</code>
799
859
  </li>
800
860
 
801
- <li class="never" data-hits="" data-linenumber="119">
861
+ <li class="never" data-hits="" data-linenumber="129">
802
862
 
803
863
 
804
864
  <code class="ruby"></code>
805
865
  </li>
806
866
 
807
- <li class="covered" data-hits="1" data-linenumber="120">
867
+ <li class="covered" data-hits="1" data-linenumber="130">
808
868
  <span class="hits">1</span>
809
869
 
810
870
  <code class="ruby"> def blank?(object)</code>
811
871
  </li>
812
872
 
813
- <li class="covered" data-hits="23" data-linenumber="121">
814
- <span class="hits">23</span>
873
+ <li class="covered" data-hits="24" data-linenumber="131">
874
+ <span class="hits">24</span>
815
875
 
816
876
  <code class="ruby"> object.respond_to?(:empty?) ? object.empty? : !object</code>
817
877
  </li>
818
878
 
819
- <li class="never" data-hits="" data-linenumber="122">
879
+ <li class="never" data-hits="" data-linenumber="132">
820
880
 
821
881
 
822
882
  <code class="ruby"> end</code>
823
883
  </li>
824
884
 
825
- <li class="never" data-hits="" data-linenumber="123">
885
+ <li class="never" data-hits="" data-linenumber="133">
826
886
 
827
887
 
828
888
  <code class="ruby"> end</code>
829
889
  </li>
830
890
 
831
- <li class="never" data-hits="" data-linenumber="124">
891
+ <li class="never" data-hits="" data-linenumber="134">
832
892
 
833
893
 
834
894
  <code class="ruby"></code>
835
895
  </li>
836
896
 
837
- <li class="covered" data-hits="1" data-linenumber="125">
897
+ <li class="covered" data-hits="1" data-linenumber="135">
838
898
  <span class="hits">1</span>
839
899
 
840
900
  <code class="ruby"> helpers Param</code>
841
901
  </li>
842
902
 
843
- <li class="never" data-hits="" data-linenumber="126">
903
+ <li class="never" data-hits="" data-linenumber="136">
844
904
 
845
905
 
846
906
  <code class="ruby">end</code>