sinatra-param2 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +3 -0
  3. data/Gemfile.lock +77 -0
  4. data/LICENSE +19 -0
  5. data/README.md +190 -0
  6. data/Rakefile +18 -0
  7. data/build/reports/assets/0.10.1/application.css +799 -0
  8. data/build/reports/assets/0.10.1/application.js +1707 -0
  9. data/build/reports/assets/0.10.1/colorbox/border.png +0 -0
  10. data/build/reports/assets/0.10.1/colorbox/controls.png +0 -0
  11. data/build/reports/assets/0.10.1/colorbox/loading.gif +0 -0
  12. data/build/reports/assets/0.10.1/colorbox/loading_background.png +0 -0
  13. data/build/reports/assets/0.10.1/favicon_green.png +0 -0
  14. data/build/reports/assets/0.10.1/favicon_red.png +0 -0
  15. data/build/reports/assets/0.10.1/favicon_yellow.png +0 -0
  16. data/build/reports/assets/0.10.1/loading.gif +0 -0
  17. data/build/reports/assets/0.10.1/magnify.png +0 -0
  18. data/build/reports/assets/0.10.1/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  19. data/build/reports/assets/0.10.1/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  20. data/build/reports/assets/0.10.1/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  21. data/build/reports/assets/0.10.1/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  22. data/build/reports/assets/0.10.1/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  23. data/build/reports/assets/0.10.1/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  24. data/build/reports/assets/0.10.1/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  25. data/build/reports/assets/0.10.1/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  26. data/build/reports/assets/0.10.1/smoothness/images/ui-icons_222222_256x240.png +0 -0
  27. data/build/reports/assets/0.10.1/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  28. data/build/reports/assets/0.10.1/smoothness/images/ui-icons_454545_256x240.png +0 -0
  29. data/build/reports/assets/0.10.1/smoothness/images/ui-icons_888888_256x240.png +0 -0
  30. data/build/reports/assets/0.10.1/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  31. data/build/reports/coverage.xml +165 -0
  32. data/build/reports/index.html +1643 -0
  33. data/example/Gemfile +7 -0
  34. data/example/Gemfile.lock +33 -0
  35. data/example/Procfile +1 -0
  36. data/example/app.rb +52 -0
  37. data/example/config.ru +6 -0
  38. data/lib/sinatra/param.rb +245 -0
  39. data/lib/sinatra/param/version.rb +5 -0
  40. data/sinatra-param2.gemspec +27 -0
  41. data/spec/dummy/app.rb +346 -0
  42. data/spec/parameter_conjunctivity_spec.rb +34 -0
  43. data/spec/parameter_exclusivity_spec.rb +55 -0
  44. data/spec/parameter_inclusivity_spec.rb +30 -0
  45. data/spec/parameter_nested_validations_spec.rb +151 -0
  46. data/spec/parameter_raise_spec.rb +25 -0
  47. data/spec/parameter_spec.rb +19 -0
  48. data/spec/parameter_transformations_spec.rb +42 -0
  49. data/spec/parameter_type_coercion_spec.rb +211 -0
  50. data/spec/parameter_validations_spec.rb +247 -0
  51. data/spec/spec_helper.rb +29 -0
  52. metadata +190 -0
@@ -0,0 +1,247 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Parameter Validations' do
4
+ describe 'required' do
5
+ it 'returns 400 on requests without required fields' do
6
+ get('/validation/required') do |response|
7
+ expect(response.status).to eq(400)
8
+ expect(JSON.parse(response.body)['message']).to eq("Parameter is required")
9
+ end
10
+ end
11
+
12
+ it 'returns 200 on requests when required field present' do
13
+ get('/validation/required', arg: 'foo') do |response|
14
+ expect(response.status).to eq(200)
15
+ end
16
+ end
17
+ end
18
+
19
+ describe 'blank' do
20
+ it 'returns 400 on requests when string is blank' do
21
+ get('/validation/blank/string', arg: '') do |response|
22
+ expect(response.status).to eq(400)
23
+ expect(JSON.parse(response.body)['message']).to eq("Parameter cannot be blank")
24
+ end
25
+ end
26
+
27
+ it 'returns 400 on requests when array is blank' do
28
+ get('/validation/blank/array', arg: '') do |response|
29
+ expect(response.status).to eq(400)
30
+ expect(JSON.parse(response.body)['message']).to eq("Parameter cannot be blank")
31
+ end
32
+ end
33
+
34
+ it 'returns 400 on requests when hash is blank' do
35
+ get('/validation/blank/hash', arg: '') do |response|
36
+ expect(response.status).to eq(400)
37
+ expect(JSON.parse(response.body)['message']).to eq("Parameter cannot be blank")
38
+ end
39
+ end
40
+
41
+ it 'returns 400 on requests when hash is blank' do
42
+ get('/validation/blank/other', arg: '') do |response|
43
+ expect(response.status).to eq(400)
44
+ expect(JSON.parse(response.body)['message']).to eq("Parameter cannot be blank")
45
+ end
46
+ end
47
+
48
+ it 'returns 200 on request when blank is true' do
49
+ get('/validation/nonblank/string', arg: '') do |response|
50
+ expect(response.status).to eq(200)
51
+ end
52
+ end
53
+ end
54
+
55
+ describe 'format' do
56
+ it 'returns 200 on requests when value matches the param regex' do
57
+ get('/validation/format/hello', arg: 'hello world') do |response|
58
+ expect(response.status).to eq(200)
59
+ end
60
+ end
61
+
62
+ it 'returns 400 on requests when value does not match the param regex' do
63
+ get('/validation/format/hello', arg: 'world') do |response|
64
+ expect(response.status).to eq(400)
65
+ end
66
+ end
67
+
68
+ it 'returns 400 on requests when value is not a string' do
69
+ get('/validation/format/9000', arg: 9000) do |response|
70
+ expect(response.status).to eq(400)
71
+ end
72
+ end
73
+ end
74
+
75
+ describe 'is' do
76
+ it 'returns 400 on requests when value is other than defined' do
77
+ get('/validation/is', arg: 'bar') do |response|
78
+ expect(response.status).to eq(400)
79
+ expect(JSON.parse(response.body)['message']).to eq("Parameter must be foo")
80
+ end
81
+ end
82
+
83
+ it 'returns 200 on requests with a value is other than defined' do
84
+ get('/validation/is', arg: 'foo') do |response|
85
+ expect(response.status).to eq(200)
86
+ end
87
+ end
88
+ end
89
+
90
+ describe 'in' do
91
+ it 'returns 400 on requests with a value not in the set' do
92
+ get('/validation/in', arg: 'MISC') do |response|
93
+ expect(response.status).to eq(400)
94
+ expect(JSON.parse(response.body)['message']).to eq("Parameter must be within [\"ASC\", \"DESC\"]")
95
+ end
96
+ end
97
+
98
+ it 'returns 200 on requests with a value in the set' do
99
+ get('/validation/in', arg: 'ASC') do |response|
100
+ expect(response.status).to eq(200)
101
+ end
102
+ end
103
+
104
+ describe 'for Arrays' do
105
+ it 'returns 400 on requests with any value not in the set' do
106
+ get('/validation/in/array', arg: 'MISC,ASC') do |response|
107
+ expect(response.status).to eq(400)
108
+ expect(JSON.parse(response.body)['message']).to eq("Parameter must be within [\"ASC\", \"DESC\"]")
109
+ end
110
+ end
111
+
112
+ it 'returns 200 on requests with all values in the set' do
113
+ get('/validation/in/array', arg: 'ASC,DESC') do |response|
114
+ expect(response.status).to eq(200)
115
+ end
116
+ end
117
+ end
118
+ end
119
+
120
+ describe 'within' do
121
+ it 'returns 400 on requests with a value outside the range' do
122
+ get('/validation/within', arg: 20) do |response|
123
+ expect(response.status).to eq(400)
124
+ expect(JSON.parse(response.body)['message']).to eq("Parameter must be within 1..10")
125
+ end
126
+ end
127
+
128
+ it 'returns 200 on requests with a value within the range' do
129
+ get('/validation/within', arg: 5) do |response|
130
+ expect(response.status).to eq(200)
131
+ end
132
+ end
133
+
134
+ describe 'for Arrays' do
135
+ it 'returns 400 on requests with any value outside the range' do
136
+ get('/validation/within/array', arg: [20,5]) do |response|
137
+ expect(response.status).to eq(400)
138
+ expect(JSON.parse(response.body)['message']).to eq("Parameter must be within 1..10")
139
+ end
140
+ end
141
+
142
+ it 'returns 200 on requests with all values within the range' do
143
+ get('/validation/within/array', arg: [5,10]) do |response|
144
+ expect(response.status).to eq(200)
145
+ end
146
+ end
147
+ end
148
+ end
149
+
150
+ describe 'range' do
151
+ it 'returns 400 on requests with a value outside the range' do
152
+ get('/validation/range', arg: 20) do |response|
153
+ expect(response.status).to eq(400)
154
+ expect(JSON.parse(response.body)['message']).to eq("Parameter must be within 1..10")
155
+ end
156
+ end
157
+
158
+ it 'returns 200 on requests within the range' do
159
+ get('/validation/range', arg: 10) do |response|
160
+ expect(response.status).to eq(200)
161
+ end
162
+ end
163
+
164
+ describe 'for Arrays' do
165
+ it 'returns 400 on requests with any value outside the range' do
166
+ get('/validation/range/array', arg: [20,5]) do |response|
167
+ expect(response.status).to eq(400)
168
+ expect(JSON.parse(response.body)['message']).to eq("Parameter must be within 1..10")
169
+ end
170
+ end
171
+
172
+ it 'returns 200 on requests with all values within the range' do
173
+ get('/validation/range/array', arg: [5,10]) do |response|
174
+ expect(response.status).to eq(200)
175
+ end
176
+ end
177
+ end
178
+ end
179
+
180
+ describe 'min' do
181
+ it 'returns 400 on requests with a value smaller than min' do
182
+ get('/validation/min', arg: 5) do |response|
183
+ expect(response.status).to eq(400)
184
+ expect(JSON.parse(response.body)['message']).to eq("Parameter cannot be less than 12")
185
+ end
186
+ end
187
+
188
+ it 'returns 200 on requests with a value larger than min' do
189
+ get('/validation/min', arg: 200) do |response|
190
+ expect(response.status).to eq(200)
191
+ end
192
+ end
193
+ end
194
+
195
+ describe 'max' do
196
+ it 'returns 400 on requests with a value larger than max' do
197
+ get('/validation/max', arg: 100) do |response|
198
+ expect(response.status).to eq(400)
199
+ expect(JSON.parse(response.body)['message']).to eq("Parameter cannot be greater than 20")
200
+ end
201
+ end
202
+
203
+ it 'returns 200 on requests with a value smaller than max' do
204
+ get('/validation/max', arg: 2) do |response|
205
+ expect(response.status).to eq(200)
206
+ end
207
+ end
208
+ end
209
+
210
+ describe 'min_length' do
211
+ it 'returns 400 on requests with a string shorter than min_length' do
212
+ get('/validation/min_length', arg: 'hi') do |response|
213
+ expect(response.status).to eq(400)
214
+ expect(JSON.parse(response.body)['message']).to eq("Parameter cannot have length less than 5")
215
+ end
216
+ end
217
+
218
+ it 'returns 200 on requests with a string longer than min_length' do
219
+ get('/validation/max_length', arg: 'longer') do |response|
220
+ expect(response.status).to eq(200)
221
+ end
222
+ end
223
+ end
224
+
225
+ describe 'max_length' do
226
+ it 'returns 400 on requests with a string longer than max_length' do
227
+ get('/validation/max_length', arg: 'reallylongstringlongerthanmax') do |response|
228
+ expect(response.status).to eq(400)
229
+ expect(JSON.parse(response.body)['message']).to eq("Parameter cannot have length greater than 10")
230
+ end
231
+ end
232
+
233
+ it 'returns 200 on requests with a string shorter than max_length' do
234
+ get('/validation/max_length', arg: 'short') do |response|
235
+ expect(response.status).to eq(200)
236
+ end
237
+ end
238
+ end
239
+
240
+ context 'custom message ' do
241
+ it 'returns a custom message when configured' do
242
+ get('/custommessage') do |response|
243
+ expect(JSON.parse(response.body)['message']).to eq("'a' must be less than 10")
244
+ end
245
+ end
246
+ end
247
+ end
@@ -0,0 +1,29 @@
1
+ unless ENV['CI']
2
+ require 'simplecov'
3
+ require 'simplecov-cobertura'
4
+ SimpleCov.start do
5
+ add_filter '/spec/'
6
+ add_filter '.bundle'
7
+ minimum_coverage(70)
8
+ coverage_dir "#{Dir.pwd}/build/reports"
9
+ SimpleCov.formatters = [
10
+ SimpleCov::Formatter::HTMLFormatter,
11
+ SimpleCov::Formatter::CoberturaFormatter
12
+ ]
13
+ end
14
+ end
15
+
16
+
17
+
18
+ require 'sinatra/param'
19
+
20
+ require 'rspec'
21
+ require 'rack/test'
22
+
23
+ require 'dummy/app'
24
+
25
+ def app
26
+ App
27
+ end
28
+
29
+ include Rack::Test::Methods
metadata ADDED
@@ -0,0 +1,190 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sinatra-param2
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Mattt Thompson
8
+ - Adrian Bravo
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2017-06-13 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: sinatra
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '2.0'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '2.0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: rake
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: rspec
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: rack-test
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: simplecov
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: simplecov-cobertura
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ description: sinatra-param2 allows you to declare, validate, and transform endpoint
99
+ parameters as you would in frameworks like ActiveModel or DataMapper.
100
+ email: adrianbn@gmail.com
101
+ executables: []
102
+ extensions: []
103
+ extra_rdoc_files: []
104
+ files:
105
+ - "./Gemfile"
106
+ - "./Gemfile.lock"
107
+ - "./LICENSE"
108
+ - "./README.md"
109
+ - "./Rakefile"
110
+ - "./build/reports/assets/0.10.1/application.css"
111
+ - "./build/reports/assets/0.10.1/application.js"
112
+ - "./build/reports/assets/0.10.1/colorbox/border.png"
113
+ - "./build/reports/assets/0.10.1/colorbox/controls.png"
114
+ - "./build/reports/assets/0.10.1/colorbox/loading.gif"
115
+ - "./build/reports/assets/0.10.1/colorbox/loading_background.png"
116
+ - "./build/reports/assets/0.10.1/favicon_green.png"
117
+ - "./build/reports/assets/0.10.1/favicon_red.png"
118
+ - "./build/reports/assets/0.10.1/favicon_yellow.png"
119
+ - "./build/reports/assets/0.10.1/loading.gif"
120
+ - "./build/reports/assets/0.10.1/magnify.png"
121
+ - "./build/reports/assets/0.10.1/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png"
122
+ - "./build/reports/assets/0.10.1/smoothness/images/ui-bg_flat_75_ffffff_40x100.png"
123
+ - "./build/reports/assets/0.10.1/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png"
124
+ - "./build/reports/assets/0.10.1/smoothness/images/ui-bg_glass_65_ffffff_1x400.png"
125
+ - "./build/reports/assets/0.10.1/smoothness/images/ui-bg_glass_75_dadada_1x400.png"
126
+ - "./build/reports/assets/0.10.1/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png"
127
+ - "./build/reports/assets/0.10.1/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png"
128
+ - "./build/reports/assets/0.10.1/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
129
+ - "./build/reports/assets/0.10.1/smoothness/images/ui-icons_222222_256x240.png"
130
+ - "./build/reports/assets/0.10.1/smoothness/images/ui-icons_2e83ff_256x240.png"
131
+ - "./build/reports/assets/0.10.1/smoothness/images/ui-icons_454545_256x240.png"
132
+ - "./build/reports/assets/0.10.1/smoothness/images/ui-icons_888888_256x240.png"
133
+ - "./build/reports/assets/0.10.1/smoothness/images/ui-icons_cd0a0a_256x240.png"
134
+ - "./build/reports/coverage.xml"
135
+ - "./build/reports/index.html"
136
+ - "./example/Gemfile"
137
+ - "./example/Gemfile.lock"
138
+ - "./example/Procfile"
139
+ - "./example/app.rb"
140
+ - "./example/config.ru"
141
+ - "./lib/sinatra/param.rb"
142
+ - "./lib/sinatra/param/version.rb"
143
+ - "./sinatra-param2.gemspec"
144
+ - spec/dummy/app.rb
145
+ - spec/parameter_conjunctivity_spec.rb
146
+ - spec/parameter_exclusivity_spec.rb
147
+ - spec/parameter_inclusivity_spec.rb
148
+ - spec/parameter_nested_validations_spec.rb
149
+ - spec/parameter_raise_spec.rb
150
+ - spec/parameter_spec.rb
151
+ - spec/parameter_transformations_spec.rb
152
+ - spec/parameter_type_coercion_spec.rb
153
+ - spec/parameter_validations_spec.rb
154
+ - spec/spec_helper.rb
155
+ homepage: https://github.com/adrianbn/sinatra-param2
156
+ licenses:
157
+ - MIT
158
+ metadata: {}
159
+ post_install_message:
160
+ rdoc_options: []
161
+ require_paths:
162
+ - lib
163
+ required_ruby_version: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - ">="
166
+ - !ruby/object:Gem::Version
167
+ version: '0'
168
+ required_rubygems_version: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ version: '0'
173
+ requirements: []
174
+ rubyforge_project:
175
+ rubygems_version: 2.5.1
176
+ signing_key:
177
+ specification_version: 4
178
+ summary: Parameter Validation & Type Coercion for Sinatra 2.
179
+ test_files:
180
+ - spec/dummy/app.rb
181
+ - spec/parameter_conjunctivity_spec.rb
182
+ - spec/parameter_exclusivity_spec.rb
183
+ - spec/parameter_inclusivity_spec.rb
184
+ - spec/parameter_nested_validations_spec.rb
185
+ - spec/parameter_raise_spec.rb
186
+ - spec/parameter_spec.rb
187
+ - spec/parameter_transformations_spec.rb
188
+ - spec/parameter_type_coercion_spec.rb
189
+ - spec/parameter_validations_spec.rb
190
+ - spec/spec_helper.rb