sinatra-param 1.2.0 → 1.2.1

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: 51bb4d9b8f81421a0d793c498715a28f329f2b03
4
- data.tar.gz: dcf4efc7ef4741d3911f9d257b5b93290c76c298
3
+ metadata.gz: 8f56711fb7a3deeffa2be390d4653e939c0c0bd9
4
+ data.tar.gz: 4cee9c0eece1a97c04565ce6b3b9929921c94cda
5
5
  SHA512:
6
- metadata.gz: 99308c05d8a95b98e2a6e7d8b535ef9a8f190075e805e0eb9784e6cfd430a5467c68f26185e6f0a08ed15d8ea36f93095a220311655627a6b7c22b8208d3178e
7
- data.tar.gz: d94dd2f94a98df3c8645f580dce22a3985555465dc06b57427f5be6cc2c2eace4737cae39fe41136b394cee3139b664ab0e2a8985f1ad74ae69b65fee67aef93
6
+ metadata.gz: 595865db457636cf6005697a18694de4609d4fe632812fc2cc45377e14711efa54ca540bdf67348171db01e7c34a3d0aaee8f36a20db87ba942cce66051ae564
7
+ data.tar.gz: 7a15f035edd7e388bc2a5fe65d07b55f4be43f8f7e2f82628bd54c77ddc3dbc252b87e49645830fc871fbfd6eb48c16f7bd4c0184f63192884d2c1b7e28cec88
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sinatra-param (1.2.0)
4
+ sinatra-param (1.2.1)
5
5
  sinatra (~> 1.3)
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  # sinatra-param
2
- _Parameter Contracts for Sinatra_
2
+ _Parameter Validation & Type Coercion for Sinatra_
3
3
 
4
4
  REST conventions take the guesswork out of designing and consuming web APIs. Simply `GET`, `POST`, `PATCH`, or `DELETE` resource endpoints, and you get what you'd expect.
5
5
 
@@ -50,6 +50,7 @@ By declaring parameter types, incoming parameters will automatically be transfor
50
50
  - `Boolean` _("1/0", "true/false", "t/f", "yes/no", "y/n")_
51
51
  - `Array` _("1,2,3,4,5")_
52
52
  - `Hash` _(key1:value1,key2:value2)_
53
+ - `Date`, `Time`, & `DateTime`
53
54
 
54
55
  ### Validations
55
56
 
@@ -91,7 +92,7 @@ By default, when a parameter precondition fails, `Sinatra::Param` will `halt 400
91
92
  }
92
93
  ```
93
94
 
94
- To change this, you can set `:raise_sinatra_param_exceptions` to `true`, and intercept `Sinatra::Param::InvalidParameterError` with a Sinatra `error do...end` block. (To make this work in development, set `:show_exceptions` to `false`):
95
+ To change this, you can set `:raise_sinatra_param_exceptions` to `true`, and intercept `Sinatra::Param::InvalidParameterError` with a Sinatra `error do...end` block. (To make this work in development, set `:show_exceptions` to `false` and `:raise_errors` to `true`):
95
96
 
96
97
  ```ruby
97
98
  set :raise_sinatra_param_exceptions, true
data/coverage/index.html CHANGED
@@ -14,27 +14,27 @@
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-02-18T09:42:37-08:00">2014-02-18T09:42:37-08:00</abbr></div>
17
+ <div class="timestamp">Generated <abbr class="timeago" title="2014-04-05T12:42:49-07:00">2014-04-05T12:42:49-07:00</abbr></div>
18
18
  <ul class="group_tabs"></ul>
19
19
 
20
20
  <div id="content">
21
21
  <div class="file_list_container" id="AllFiles">
22
22
  <h2>
23
23
  <span class="group_name">All Files</span>
24
- (<span class="covered_percent"><span class="green">97.1%</span></span>
24
+ (<span class="covered_percent"><span class="green">100.0%</span></span>
25
25
  covered at
26
26
  <span class="covered_strength">
27
27
  <span class="green">
28
- 17.6
28
+ 19.9
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>69</b> relevant lines.
36
- <span class="green"><b>67</b> lines covered</span> and
37
- <span class="red"><b>2</b> lines missed </span>
35
+ <b>74</b> relevant lines.
36
+ <span class="green"><b>74</b> lines covered</span> and
37
+ <span class="red"><b>0</b> lines missed </span>
38
38
  </div>
39
39
  <table class="file_list">
40
40
  <thead>
@@ -52,12 +52,12 @@
52
52
 
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
- <td class="green strong">97.1 %</td>
56
- <td>119</td>
57
- <td>69</td>
58
- <td>67</td>
59
- <td>2</td>
60
- <td>17.6</td>
55
+ <td class="green strong">100.0 %</td>
56
+ <td>126</td>
57
+ <td>74</td>
58
+ <td>74</td>
59
+ <td>0</td>
60
+ <td>19.9</td>
61
61
  </tr>
62
62
 
63
63
  </tbody>
@@ -79,11 +79,11 @@
79
79
  <div class="source_table" id="0f7926ededdfd8418773c107837b6dc4182659b8">
80
80
  <div class="header">
81
81
  <h3>lib/sinatra/param.rb</h3>
82
- <h4><span class="green">97.1 %</span> covered</h4>
82
+ <h4><span class="green">100.0 %</span> covered</h4>
83
83
  <div>
84
- <b>69</b> relevant lines.
85
- <span class="green"><b>67</b> lines covered</span> and
86
- <span class="red"><b>2</b> lines missed.</span>
84
+ <b>74</b> relevant lines.
85
+ <span class="green"><b>74</b> lines covered</span> and
86
+ <span class="red"><b>0</b> lines missed.</span>
87
87
  </div>
88
88
  </div>
89
89
 
@@ -105,13 +105,13 @@
105
105
  <li class="covered" data-hits="1" data-linenumber="3">
106
106
  <span class="hits">1</span>
107
107
 
108
- <code class="ruby">require &#39;time&#39;</code>
108
+ <code class="ruby">require &#39;date&#39;</code>
109
109
  </li>
110
110
 
111
111
  <li class="covered" data-hits="1" data-linenumber="4">
112
112
  <span class="hits">1</span>
113
113
 
114
- <code class="ruby">require &#39;date&#39;</code>
114
+ <code class="ruby">require &#39;time&#39;</code>
115
115
  </li>
116
116
 
117
117
  <li class="never" data-hits="" data-linenumber="5">
@@ -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="77" data-linenumber="15">
178
- <span class="hits">77</span>
177
+ <li class="covered" data-hits="88" data-linenumber="15">
178
+ <span class="hits">88</span>
179
179
 
180
180
  <code class="ruby"> name = name.to_s</code>
181
181
  </li>
@@ -186,8 +186,8 @@
186
186
  <code class="ruby"></code>
187
187
  </li>
188
188
 
189
- <li class="covered" data-hits="77" data-linenumber="17">
190
- <span class="hits">77</span>
189
+ <li class="covered" data-hits="88" data-linenumber="17">
190
+ <span class="hits">88</span>
191
191
 
192
192
  <code class="ruby"> return unless params.member?(name) or present?(options[:default]) or options[:required]</code>
193
193
  </li>
@@ -198,56 +198,56 @@
198
198
  <code class="ruby"></code>
199
199
  </li>
200
200
 
201
- <li class="covered" data-hits="68" data-linenumber="19">
202
- <span class="hits">68</span>
201
+ <li class="covered" data-hits="79" data-linenumber="19">
202
+ <span class="hits">79</span>
203
203
 
204
204
  <code class="ruby"> begin</code>
205
205
  </li>
206
206
 
207
- <li class="covered" data-hits="68" data-linenumber="20">
208
- <span class="hits">68</span>
207
+ <li class="covered" data-hits="79" data-linenumber="20">
208
+ <span class="hits">79</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="68" data-linenumber="21">
214
- <span class="hits">68</span>
213
+ <li class="covered" data-hits="74" data-linenumber="21">
214
+ <span class="hits">74</span>
215
215
 
216
216
  <code class="ruby"> params[name] = (options[:default].call if options[:default].is_a?(Proc)) || options[:default] if params[name].nil? and options[:default]</code>
217
217
  </li>
218
218
 
219
- <li class="covered" data-hits="68" data-linenumber="22">
220
- <span class="hits">68</span>
219
+ <li class="covered" data-hits="74" data-linenumber="22">
220
+ <span class="hits">74</span>
221
221
 
222
222
  <code class="ruby"> params[name] = options[:transform].to_proc.call(params[name]) if options[:transform]</code>
223
223
  </li>
224
224
 
225
- <li class="covered" data-hits="68" data-linenumber="23">
226
- <span class="hits">68</span>
225
+ <li class="covered" data-hits="74" data-linenumber="23">
226
+ <span class="hits">74</span>
227
227
 
228
228
  <code class="ruby"> validate!(params[name], options)</code>
229
229
  </li>
230
230
 
231
- <li class="covered" data-hits="13" data-linenumber="24">
232
- <span class="hits">13</span>
231
+ <li class="covered" data-hits="21" data-linenumber="24">
232
+ <span class="hits">21</span>
233
233
 
234
234
  <code class="ruby"> rescue InvalidParameterError =&gt; exception</code>
235
235
  </li>
236
236
 
237
- <li class="covered" data-hits="13" data-linenumber="25">
238
- <span class="hits">13</span>
237
+ <li class="covered" data-hits="21" data-linenumber="25">
238
+ <span class="hits">21</span>
239
239
 
240
240
  <code class="ruby"> if options[:raise] or (settings.raise_sinatra_param_exceptions rescue false)</code>
241
241
  </li>
242
242
 
243
- <li class="missed" data-hits="0" data-linenumber="26">
244
-
243
+ <li class="covered" data-hits="1" data-linenumber="26">
244
+ <span class="hits">1</span>
245
245
 
246
246
  <code class="ruby"> exception.param, exception.options = name, options</code>
247
247
  </li>
248
248
 
249
- <li class="missed" data-hits="0" data-linenumber="27">
250
-
249
+ <li class="covered" data-hits="1" data-linenumber="27">
250
+ <span class="hits">1</span>
251
251
 
252
252
  <code class="ruby"> raise exception</code>
253
253
  </li>
@@ -264,20 +264,20 @@
264
264
  <code class="ruby"></code>
265
265
  </li>
266
266
 
267
- <li class="covered" data-hits="13" data-linenumber="30">
268
- <span class="hits">13</span>
267
+ <li class="covered" data-hits="20" data-linenumber="30">
268
+ <span class="hits">20</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="13" data-linenumber="31">
274
- <span class="hits">13</span>
273
+ <li class="covered" data-hits="20" data-linenumber="31">
274
+ <span class="hits">20</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="13" data-linenumber="32">
280
- <span class="hits">13</span>
279
+ <li class="covered" data-hits="20" data-linenumber="32">
280
+ <span class="hits">20</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="13" data-linenumber="35">
298
- <span class="hits">13</span>
297
+ <li class="covered" data-hits="20" data-linenumber="35">
298
+ <span class="hits">20</span>
299
299
 
300
300
  <code class="ruby"> halt 400, error</code>
301
301
  </li>
@@ -438,367 +438,409 @@
438
438
  <code class="ruby"> def coerce(param, type, options = {})</code>
439
439
  </li>
440
440
 
441
- <li class="covered" data-hits="68" data-linenumber="59">
442
- <span class="hits">68</span>
441
+ <li class="covered" data-hits="79" data-linenumber="59">
442
+ <span class="hits">79</span>
443
443
 
444
- <code class="ruby"> return nil if param.nil?</code>
444
+ <code class="ruby"> begin</code>
445
445
  </li>
446
446
 
447
- <li class="covered" data-hits="64" data-linenumber="60">
448
- <span class="hits">64</span>
447
+ <li class="covered" data-hits="79" data-linenumber="60">
448
+ <span class="hits">79</span>
449
449
 
450
- <code class="ruby"> return param if (param.is_a?(type) rescue false)</code>
450
+ <code class="ruby"> return nil if param.nil?</code>
451
451
  </li>
452
452
 
453
- <li class="covered" data-hits="39" data-linenumber="61">
454
- <span class="hits">39</span>
453
+ <li class="covered" data-hits="74" data-linenumber="61">
454
+ <span class="hits">74</span>
455
455
 
456
- <code class="ruby"> return Integer(param) if type == Integer</code>
456
+ <code class="ruby"> return param if (param.is_a?(type) rescue false)</code>
457
457
  </li>
458
458
 
459
- <li class="covered" data-hits="30" data-linenumber="62">
460
- <span class="hits">30</span>
459
+ <li class="covered" data-hits="46" data-linenumber="62">
460
+ <span class="hits">46</span>
461
461
 
462
- <code class="ruby"> return Float(param) if type == Float</code>
462
+ <code class="ruby"> return Integer(param) if type == Integer</code>
463
463
  </li>
464
464
 
465
- <li class="covered" data-hits="29" data-linenumber="63">
466
- <span class="hits">29</span>
465
+ <li class="covered" data-hits="35" data-linenumber="63">
466
+ <span class="hits">35</span>
467
467
 
468
- <code class="ruby"> return String(param) if type == String</code>
468
+ <code class="ruby"> return Float(param) if type == Float</code>
469
469
  </li>
470
470
 
471
- <li class="covered" data-hits="28" data-linenumber="64">
472
- <span class="hits">28</span>
471
+ <li class="covered" data-hits="33" data-linenumber="64">
472
+ <span class="hits">33</span>
473
473
 
474
- <code class="ruby"> return Time.parse(param) if type == Time</code>
474
+ <code class="ruby"> return String(param) if type == String</code>
475
475
  </li>
476
476
 
477
- <li class="covered" data-hits="27" data-linenumber="65">
478
- <span class="hits">27</span>
477
+ <li class="covered" data-hits="32" data-linenumber="65">
478
+ <span class="hits">32</span>
479
479
 
480
- <code class="ruby"> return Date.parse(param) if type == Date</code>
480
+ <code class="ruby"> return Date.parse(param) if type == Date</code>
481
481
  </li>
482
482
 
483
- <li class="covered" data-hits="26" data-linenumber="66">
484
- <span class="hits">26</span>
483
+ <li class="covered" data-hits="30" data-linenumber="66">
484
+ <span class="hits">30</span>
485
485
 
486
- <code class="ruby"> return DateTime.parse(param) if type == DateTime</code>
486
+ <code class="ruby"> return Time.parse(param) if type == Time</code>
487
487
  </li>
488
488
 
489
- <li class="covered" data-hits="25" data-linenumber="67">
490
- <span class="hits">25</span>
489
+ <li class="covered" data-hits="28" data-linenumber="67">
490
+ <span class="hits">28</span>
491
+
492
+ <code class="ruby"> return DateTime.parse(param) if type == DateTime</code>
493
+ </li>
494
+
495
+ <li class="covered" data-hits="26" data-linenumber="68">
496
+ <span class="hits">26</span>
491
497
 
492
- <code class="ruby"> return Array(param.split(options[:delimiter] || &quot;,&quot;)) if type == Array</code>
498
+ <code class="ruby"> return Array(param.split(options[:delimiter] || &quot;,&quot;)) if type == Array</code>
493
499
  </li>
494
500
 
495
- <li class="covered" data-hits="25" data-linenumber="68">
501
+ <li class="covered" data-hits="25" data-linenumber="69">
496
502
  <span class="hits">25</span>
497
503
 
498
- <code class="ruby"> return Hash[param.split(options[:delimiter] || &quot;,&quot;).map{|c| c.split(options[:separator] || &quot;:&quot;)}] if type == Hash</code>
504
+ <code class="ruby"> return Hash[param.split(options[:delimiter] || &quot;,&quot;).map{|c| c.split(options[:separator] || &quot;:&quot;)}] if type == Hash</code>
499
505
  </li>
500
506
 
501
- <li class="covered" data-hits="21" data-linenumber="69">
507
+ <li class="covered" data-hits="21" data-linenumber="70">
502
508
  <span class="hits">21</span>
503
509
 
504
- <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>
510
+ <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>
505
511
  </li>
506
512
 
507
- <li class="never" data-hits="" data-linenumber="70">
513
+ <li class="never" data-hits="" data-linenumber="71">
508
514
 
509
515
 
510
- <code class="ruby"> return nil</code>
516
+ <code class="ruby"> return nil</code>
511
517
  </li>
512
518
 
513
- <li class="never" data-hits="" data-linenumber="71">
519
+ <li class="covered" data-hits="5" data-linenumber="72">
520
+ <span class="hits">5</span>
521
+
522
+ <code class="ruby"> rescue ArgumentError</code>
523
+ </li>
524
+
525
+ <li class="covered" data-hits="5" data-linenumber="73">
526
+ <span class="hits">5</span>
527
+
528
+ <code class="ruby"> raise InvalidParameterError, &quot;&#39;#{param}&#39; is not a valid #{type}&quot;</code>
529
+ </li>
530
+
531
+ <li class="never" data-hits="" data-linenumber="74">
532
+
533
+
534
+ <code class="ruby"> end</code>
535
+ </li>
536
+
537
+ <li class="never" data-hits="" data-linenumber="75">
514
538
 
515
539
 
516
540
  <code class="ruby"> end</code>
517
541
  </li>
518
542
 
519
- <li class="never" data-hits="" data-linenumber="72">
543
+ <li class="never" data-hits="" data-linenumber="76">
520
544
 
521
545
 
522
546
  <code class="ruby"></code>
523
547
  </li>
524
548
 
525
- <li class="covered" data-hits="1" data-linenumber="73">
549
+ <li class="covered" data-hits="1" data-linenumber="77">
526
550
  <span class="hits">1</span>
527
551
 
528
552
  <code class="ruby"> def validate!(param, options)</code>
529
553
  </li>
530
554
 
531
- <li class="covered" data-hits="68" data-linenumber="74">
532
- <span class="hits">68</span>
555
+ <li class="covered" data-hits="74" data-linenumber="78">
556
+ <span class="hits">74</span>
533
557
 
534
558
  <code class="ruby"> options.each do |key, value|</code>
535
559
  </li>
536
560
 
537
- <li class="covered" data-hits="39" data-linenumber="75">
538
- <span class="hits">39</span>
561
+ <li class="covered" data-hits="43" data-linenumber="79">
562
+ <span class="hits">43</span>
539
563
 
540
564
  <code class="ruby"> case key</code>
541
565
  </li>
542
566
 
543
- <li class="never" data-hits="" data-linenumber="76">
567
+ <li class="never" data-hits="" data-linenumber="80">
544
568
 
545
569
 
546
570
  <code class="ruby"> when :required</code>
547
571
  </li>
548
572
 
549
- <li class="covered" data-hits="3" data-linenumber="77">
550
- <span class="hits">3</span>
573
+ <li class="covered" data-hits="4" data-linenumber="81">
574
+ <span class="hits">4</span>
551
575
 
552
576
  <code class="ruby"> raise InvalidParameterError, &quot;Parameter is required&quot; if value &amp;&amp; param.nil?</code>
553
577
  </li>
554
578
 
555
- <li class="never" data-hits="" data-linenumber="78">
579
+ <li class="never" data-hits="" data-linenumber="82">
556
580
 
557
581
 
558
582
  <code class="ruby"> when :blank</code>
559
583
  </li>
560
584
 
561
- <li class="never" data-hits="" data-linenumber="79">
585
+ <li class="never" data-hits="" data-linenumber="83">
562
586
 
563
587
 
564
588
  <code class="ruby"> raise InvalidParameterError, &quot;Parameter cannot be blank&quot; if !value &amp;&amp; case param</code>
565
589
  </li>
566
590
 
567
- <li class="never" data-hits="" data-linenumber="80">
591
+ <li class="never" data-hits="" data-linenumber="84">
568
592
 
569
593
 
570
594
  <code class="ruby"> when String</code>
571
595
  </li>
572
596
 
573
- <li class="covered" data-hits="1" data-linenumber="81">
597
+ <li class="covered" data-hits="1" data-linenumber="85">
574
598
  <span class="hits">1</span>
575
599
 
576
600
  <code class="ruby"> !(/\S/ === param)</code>
577
601
  </li>
578
602
 
579
- <li class="never" data-hits="" data-linenumber="82">
603
+ <li class="never" data-hits="" data-linenumber="86">
580
604
 
581
605
 
582
606
  <code class="ruby"> when Array, Hash</code>
583
607
  </li>
584
608
 
585
- <li class="covered" data-hits="2" data-linenumber="83">
609
+ <li class="covered" data-hits="2" data-linenumber="87">
586
610
  <span class="hits">2</span>
587
611
 
588
612
  <code class="ruby"> param.empty?</code>
589
613
  </li>
590
614
 
591
- <li class="never" data-hits="" data-linenumber="84">
615
+ <li class="never" data-hits="" data-linenumber="88">
592
616
 
593
617
 
594
618
  <code class="ruby"> else</code>
595
619
  </li>
596
620
 
597
- <li class="covered" data-hits="1" data-linenumber="85">
621
+ <li class="covered" data-hits="1" data-linenumber="89">
598
622
  <span class="hits">1</span>
599
623
 
600
624
  <code class="ruby"> param.nil?</code>
601
625
  </li>
602
626
 
603
- <li class="covered" data-hits="5" data-linenumber="86">
627
+ <li class="covered" data-hits="5" data-linenumber="90">
604
628
  <span class="hits">5</span>
605
629
 
606
630
  <code class="ruby"> end</code>
607
631
  </li>
608
632
 
609
- <li class="never" data-hits="" data-linenumber="87">
633
+ <li class="never" data-hits="" data-linenumber="91">
634
+
635
+
636
+ <code class="ruby"> when :format</code>
637
+ </li>
638
+
639
+ <li class="covered" data-hits="3" data-linenumber="92">
640
+ <span class="hits">3</span>
641
+
642
+ <code class="ruby"> raise InvalidParameterError, &quot;Parameter must be a string if using the format validation&quot; unless param.kind_of?(String)</code>
643
+ </li>
644
+
645
+ <li class="covered" data-hits="2" data-linenumber="93">
646
+ <span class="hits">2</span>
647
+
648
+ <code class="ruby"> raise InvalidParameterError, &quot;Parameter must match format #{value}&quot; unless param =~ value</code>
649
+ </li>
650
+
651
+ <li class="never" data-hits="" data-linenumber="94">
610
652
 
611
653
 
612
654
  <code class="ruby"> when :is</code>
613
655
  </li>
614
656
 
615
- <li class="covered" data-hits="2" data-linenumber="88">
657
+ <li class="covered" data-hits="2" data-linenumber="95">
616
658
  <span class="hits">2</span>
617
659
 
618
- <code class="ruby"> raise InvalidParameterError, &quot;Parameter must be #{value}&quot; unless value === param</code>
660
+ <code class="ruby"> raise InvalidParameterError, &quot;Parameter must be #{value}&quot; unless param === value</code>
619
661
  </li>
620
662
 
621
- <li class="never" data-hits="" data-linenumber="89">
663
+ <li class="never" data-hits="" data-linenumber="96">
622
664
 
623
665
 
624
666
  <code class="ruby"> when :in, :within, :range</code>
625
667
  </li>
626
668
 
627
- <li class="never" data-hits="" data-linenumber="90">
669
+ <li class="never" data-hits="" data-linenumber="97">
628
670
 
629
671
 
630
672
  <code class="ruby"> raise InvalidParameterError, &quot;Parameter must be within #{value}&quot; unless param.nil? || case value</code>
631
673
  </li>
632
674
 
633
- <li class="never" data-hits="" data-linenumber="91">
675
+ <li class="never" data-hits="" data-linenumber="98">
634
676
 
635
677
 
636
678
  <code class="ruby"> when Range</code>
637
679
  </li>
638
680
 
639
- <li class="covered" data-hits="4" data-linenumber="92">
681
+ <li class="covered" data-hits="4" data-linenumber="99">
640
682
  <span class="hits">4</span>
641
683
 
642
684
  <code class="ruby"> value.include?(param)</code>
643
685
  </li>
644
686
 
645
- <li class="never" data-hits="" data-linenumber="93">
687
+ <li class="never" data-hits="" data-linenumber="100">
646
688
 
647
689
 
648
690
  <code class="ruby"> else</code>
649
691
  </li>
650
692
 
651
- <li class="covered" data-hits="2" data-linenumber="94">
693
+ <li class="covered" data-hits="2" data-linenumber="101">
652
694
  <span class="hits">2</span>
653
695
 
654
696
  <code class="ruby"> Array(value).include?(param)</code>
655
697
  </li>
656
698
 
657
- <li class="covered" data-hits="6" data-linenumber="95">
699
+ <li class="covered" data-hits="6" data-linenumber="102">
658
700
  <span class="hits">6</span>
659
701
 
660
702
  <code class="ruby"> end</code>
661
703
  </li>
662
704
 
663
- <li class="never" data-hits="" data-linenumber="96">
705
+ <li class="never" data-hits="" data-linenumber="103">
664
706
 
665
707
 
666
708
  <code class="ruby"> when :min</code>
667
709
  </li>
668
710
 
669
- <li class="covered" data-hits="2" data-linenumber="97">
711
+ <li class="covered" data-hits="2" data-linenumber="104">
670
712
  <span class="hits">2</span>
671
713
 
672
714
  <code class="ruby"> raise InvalidParameterError, &quot;Parameter cannot be less than #{value}&quot; unless param.nil? || value &lt;= param</code>
673
715
  </li>
674
716
 
675
- <li class="never" data-hits="" data-linenumber="98">
717
+ <li class="never" data-hits="" data-linenumber="105">
676
718
 
677
719
 
678
720
  <code class="ruby"> when :max</code>
679
721
  </li>
680
722
 
681
- <li class="covered" data-hits="2" data-linenumber="99">
723
+ <li class="covered" data-hits="2" data-linenumber="106">
682
724
  <span class="hits">2</span>
683
725
 
684
726
  <code class="ruby"> raise InvalidParameterError, &quot;Parameter cannot be greater than #{value}&quot; unless param.nil? || value &gt;= param</code>
685
727
  </li>
686
728
 
687
- <li class="never" data-hits="" data-linenumber="100">
729
+ <li class="never" data-hits="" data-linenumber="107">
688
730
 
689
731
 
690
732
  <code class="ruby"> when :min_length</code>
691
733
  </li>
692
734
 
693
- <li class="covered" data-hits="1" data-linenumber="101">
735
+ <li class="covered" data-hits="1" data-linenumber="108">
694
736
  <span class="hits">1</span>
695
737
 
696
738
  <code class="ruby"> raise InvalidParameterError, &quot;Parameter cannot have length less than #{value}&quot; unless param.nil? || value &lt;= param.length</code>
697
739
  </li>
698
740
 
699
- <li class="never" data-hits="" data-linenumber="102">
741
+ <li class="never" data-hits="" data-linenumber="109">
700
742
 
701
743
 
702
744
  <code class="ruby"> when :max_length</code>
703
745
  </li>
704
746
 
705
- <li class="covered" data-hits="3" data-linenumber="103">
747
+ <li class="covered" data-hits="3" data-linenumber="110">
706
748
  <span class="hits">3</span>
707
749
 
708
750
  <code class="ruby"> raise InvalidParameterError, &quot;Parameter cannot have length greater than #{value}&quot; unless param.nil? || value &gt;= param.length</code>
709
751
  </li>
710
752
 
711
- <li class="never" data-hits="" data-linenumber="104">
753
+ <li class="never" data-hits="" data-linenumber="111">
712
754
 
713
755
 
714
756
  <code class="ruby"> end</code>
715
757
  </li>
716
758
 
717
- <li class="never" data-hits="" data-linenumber="105">
759
+ <li class="never" data-hits="" data-linenumber="112">
718
760
 
719
761
 
720
762
  <code class="ruby"> end</code>
721
763
  </li>
722
764
 
723
- <li class="never" data-hits="" data-linenumber="106">
765
+ <li class="never" data-hits="" data-linenumber="113">
724
766
 
725
767
 
726
768
  <code class="ruby"> end</code>
727
769
  </li>
728
770
 
729
- <li class="never" data-hits="" data-linenumber="107">
771
+ <li class="never" data-hits="" data-linenumber="114">
730
772
 
731
773
 
732
774
  <code class="ruby"></code>
733
775
  </li>
734
776
 
735
- <li class="never" data-hits="" data-linenumber="108">
777
+ <li class="never" data-hits="" data-linenumber="115">
736
778
 
737
779
 
738
780
  <code class="ruby"> # ActiveSupport #present? and #blank? without patching Object</code>
739
781
  </li>
740
782
 
741
- <li class="covered" data-hits="1" data-linenumber="109">
783
+ <li class="covered" data-hits="1" data-linenumber="116">
742
784
  <span class="hits">1</span>
743
785
 
744
786
  <code class="ruby"> def present?(object)</code>
745
787
  </li>
746
788
 
747
- <li class="covered" data-hits="22" data-linenumber="110">
748
- <span class="hits">22</span>
789
+ <li class="covered" data-hits="23" data-linenumber="117">
790
+ <span class="hits">23</span>
749
791
 
750
792
  <code class="ruby"> !blank?(object)</code>
751
793
  </li>
752
794
 
753
- <li class="never" data-hits="" data-linenumber="111">
795
+ <li class="never" data-hits="" data-linenumber="118">
754
796
 
755
797
 
756
798
  <code class="ruby"> end</code>
757
799
  </li>
758
800
 
759
- <li class="never" data-hits="" data-linenumber="112">
801
+ <li class="never" data-hits="" data-linenumber="119">
760
802
 
761
803
 
762
804
  <code class="ruby"></code>
763
805
  </li>
764
806
 
765
- <li class="covered" data-hits="1" data-linenumber="113">
807
+ <li class="covered" data-hits="1" data-linenumber="120">
766
808
  <span class="hits">1</span>
767
809
 
768
810
  <code class="ruby"> def blank?(object)</code>
769
811
  </li>
770
812
 
771
- <li class="covered" data-hits="22" data-linenumber="114">
772
- <span class="hits">22</span>
813
+ <li class="covered" data-hits="23" data-linenumber="121">
814
+ <span class="hits">23</span>
773
815
 
774
816
  <code class="ruby"> object.respond_to?(:empty?) ? object.empty? : !object</code>
775
817
  </li>
776
818
 
777
- <li class="never" data-hits="" data-linenumber="115">
819
+ <li class="never" data-hits="" data-linenumber="122">
778
820
 
779
821
 
780
822
  <code class="ruby"> end</code>
781
823
  </li>
782
824
 
783
- <li class="never" data-hits="" data-linenumber="116">
825
+ <li class="never" data-hits="" data-linenumber="123">
784
826
 
785
827
 
786
828
  <code class="ruby"> end</code>
787
829
  </li>
788
830
 
789
- <li class="never" data-hits="" data-linenumber="117">
831
+ <li class="never" data-hits="" data-linenumber="124">
790
832
 
791
833
 
792
834
  <code class="ruby"></code>
793
835
  </li>
794
836
 
795
- <li class="covered" data-hits="1" data-linenumber="118">
837
+ <li class="covered" data-hits="1" data-linenumber="125">
796
838
  <span class="hits">1</span>
797
839
 
798
840
  <code class="ruby"> helpers Param</code>
799
841
  </li>
800
842
 
801
- <li class="never" data-hits="" data-linenumber="119">
843
+ <li class="never" data-hits="" data-linenumber="126">
802
844
 
803
845
 
804
846
  <code class="ruby">end</code>
data/lib/sinatra/param.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'sinatra/base'
2
2
  require 'sinatra/param/version'
3
- require 'time'
4
3
  require 'date'
4
+ require 'time'
5
5
 
6
6
  module Sinatra
7
7
  module Param
@@ -62,8 +62,8 @@ module Sinatra
62
62
  return Integer(param) if type == Integer
63
63
  return Float(param) if type == Float
64
64
  return String(param) if type == String
65
- return Time.parse(param) if type == Time
66
65
  return Date.parse(param) if type == Date
66
+ return Time.parse(param) if type == Time
67
67
  return DateTime.parse(param) if type == DateTime
68
68
  return Array(param.split(options[:delimiter] || ",")) if type == Array
69
69
  return Hash[param.split(options[:delimiter] || ",").map{|c| c.split(options[:separator] || ":")}] if type == Hash
@@ -1,5 +1,5 @@
1
1
  module Sinatra
2
2
  module Param
3
- VERSION = '1.2.0'
3
+ VERSION = '1.2.1'
4
4
  end
5
5
  end
Binary file
@@ -9,7 +9,7 @@ Gem::Specification.new do |s|
9
9
  s.homepage = "https://github.com/mattt/sinatra-param"
10
10
  s.version = Sinatra::Param::VERSION
11
11
  s.platform = Gem::Platform::RUBY
12
- s.summary = "Parameter Contracts for Sinatra"
12
+ s.summary = "Parameter Validation & Type Coercion for Sinatra."
13
13
  s.description = "sinatra-param allows you to declare, validate, and transform endpoint parameters as you would in frameworks like ActiveModel or DataMapper."
14
14
 
15
15
  s.add_dependency "sinatra", "~> 1.3"
data/spec/dummy/app.rb CHANGED
@@ -1,11 +1,15 @@
1
1
  require 'sinatra/base'
2
2
  require 'sinatra/param'
3
- require 'json'
3
+ require 'date'
4
4
  require 'time'
5
+ require 'json'
5
6
 
6
7
  class App < Sinatra::Base
7
8
  helpers Sinatra::Param
8
9
 
10
+ set :show_exceptions, false
11
+ set :raise_errors, true
12
+
9
13
  before do
10
14
  content_type :json
11
15
  end
@@ -182,4 +186,9 @@ class App < Sinatra::Base
182
186
  message: 'OK'
183
187
  }.to_json
184
188
  end
189
+
190
+ get '/raise' do
191
+ param :arg, String, required: true, raise: true
192
+ params.to_json
193
+ end
185
194
  end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Exception' do
4
+ describe 'raise' do
5
+ it 'should raise error when option is specified' do
6
+ expect {
7
+ get('/raise')
8
+ }.to raise_error
9
+ end
10
+ end
11
+ end
@@ -99,6 +99,24 @@ describe 'Parameter Types' do
99
99
  parsed_body['arg'].should eq(%w(1 2 3 4 5))
100
100
  end
101
101
  end
102
+
103
+ it 'coerces arrays of size 1' do
104
+ get('/coerce/array', arg: '1') do |response|
105
+ response.status.should == 200
106
+ parsed_body = JSON.parse(response.body)
107
+ parsed_body['arg'].should be_an(Array)
108
+ parsed_body['arg'].should eq(%w(1))
109
+ end
110
+ end
111
+
112
+ it 'coerces arrays with arg[] style' do
113
+ get('/coerce/array', 'arg[]' => ['1','2','3','4','5']) do |response|
114
+ response.status.should == 200
115
+ parsed_body = JSON.parse(response.body)
116
+ parsed_body['arg'].should be_an(Array)
117
+ parsed_body['arg'].should eq(%w(1 2 3 4 5))
118
+ end
119
+ end
102
120
  end
103
121
 
104
122
  describe 'Hash' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sinatra-param
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mattt Thompson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-24 00:00:00.000000000 Z
11
+ date: 2014-04-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sinatra
@@ -143,8 +143,10 @@ files:
143
143
  - ./sinatra-param-1.1.0.gem
144
144
  - ./sinatra-param-1.1.1.gem
145
145
  - ./sinatra-param-1.1.2.gem
146
+ - ./sinatra-param-1.2.0.gem
146
147
  - ./sinatra-param.gemspec
147
148
  - spec/dummy/app.rb
149
+ - spec/parameter_raise_spec.rb
148
150
  - spec/parameter_sets_spec.rb
149
151
  - spec/parameter_spec.rb
150
152
  - spec/parameter_transformations_spec.rb
@@ -174,9 +176,10 @@ rubyforge_project:
174
176
  rubygems_version: 2.1.11
175
177
  signing_key:
176
178
  specification_version: 4
177
- summary: Parameter Contracts for Sinatra
179
+ summary: Parameter Validation & Type Coercion for Sinatra.
178
180
  test_files:
179
181
  - spec/dummy/app.rb
182
+ - spec/parameter_raise_spec.rb
180
183
  - spec/parameter_sets_spec.rb
181
184
  - spec/parameter_spec.rb
182
185
  - spec/parameter_transformations_spec.rb