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,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