sinatra-dry_param 0.0.1 → 0.0.2
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.
- checksums.yaml +4 -4
- data/.gitignore +4 -0
- data/.travis.yml +6 -3
- data/README.md +137 -5
- data/Rakefile +10 -3
- data/lib/sinatra-dry_param.rb +3 -0
- data/lib/sinatra/dry_param.rb +24 -5
- data/lib/sinatra/dry_param/version.rb +1 -1
- data/sinatra-dry_param.gemspec +5 -4
- metadata +25 -25
- data/Gemfile.lock +0 -81
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b6463c4978cf3eaed12b4d8ee9eedc2100b6fefb5f99b0c20e95cc9185f4eb3a
|
4
|
+
data.tar.gz: 2580d83d97408439d5a041729394adda20084fc55f7ddb6828b4d4016dddfee1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 10a5a61f6f752898d49db7370f728962348b62ae2f527d3071c22abf4e8ff9aef0156debc21c9e9f9af6c4384d5d200c413ffa3f67f0312b65fbe2a1cb83979a
|
7
|
+
data.tar.gz: 2109f819e752c331500f2689ae170e460dcb6bcfbadf138f87d5bd15840fafe7718a6ebe6efb4d568f70181cb03c33681458c8993188c540d8f4779ba9a10397
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# Sinatra::DryParam
|
2
2
|
|
3
|
-
|
3
|
+
This sinatra extension provides easy interfaces for validating params. It serves both schema validation and strong-params feature.
|
4
4
|
|
5
|
-
|
5
|
+
Validation is processed by [dry-schema](https://github.com/dry-rb/dry-schema), provides robust type and schema validation.
|
6
6
|
|
7
7
|
## Installation
|
8
8
|
|
@@ -22,7 +22,139 @@ Or install it yourself as:
|
|
22
22
|
|
23
23
|
## Usage
|
24
24
|
|
25
|
-
|
25
|
+
Register and use the extension in your sinatra app, for classic style sinatra app:
|
26
|
+
|
27
|
+
|
28
|
+
```ruby
|
29
|
+
require 'sinatra'
|
30
|
+
require 'sinatra/dry_param'
|
31
|
+
|
32
|
+
params do
|
33
|
+
required(:name).filled(:string)
|
34
|
+
end
|
35
|
+
|
36
|
+
get '/hello' do
|
37
|
+
data = validate_params
|
38
|
+
h "Hello #{data[:name]}!"
|
39
|
+
end
|
40
|
+
```
|
41
|
+
|
42
|
+
Or for modular style sinatra app:
|
43
|
+
|
44
|
+
```ruby
|
45
|
+
require 'sinatra/base'
|
46
|
+
require 'sinatra/dry_param'
|
47
|
+
|
48
|
+
class App < Sinatra::Base
|
49
|
+
register Sinatra::DryParam
|
50
|
+
|
51
|
+
params do
|
52
|
+
required(:name).filled(:string)
|
53
|
+
end
|
54
|
+
|
55
|
+
get '/hello' do
|
56
|
+
data = validate_params
|
57
|
+
h "Hello #{data[:name]}!"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
```
|
61
|
+
|
62
|
+
### Define params schemas
|
63
|
+
|
64
|
+
One or more schemas can be defined using method `::params`, distinguised by names:
|
65
|
+
|
66
|
+
```ruby
|
67
|
+
class App < Sinatra::Base
|
68
|
+
register Sinatra::DryParam
|
69
|
+
|
70
|
+
params do
|
71
|
+
# dry-schema definitions
|
72
|
+
end
|
73
|
+
|
74
|
+
params :paging do
|
75
|
+
# different name as :paging
|
76
|
+
end
|
77
|
+
|
78
|
+
params do
|
79
|
+
# Override the previous schema in whole class scope.
|
80
|
+
# Should only override parent class' schemas.
|
81
|
+
end
|
82
|
+
|
83
|
+
get '/' do
|
84
|
+
validate_params # Use the default schema to validate params
|
85
|
+
validate_params :dry, params # Same with above line, the default schema name is :dry
|
86
|
+
validate_params :paging, params[:paging] # Use the :paging schema to validate one param
|
87
|
+
end
|
88
|
+
```
|
89
|
+
|
90
|
+
### Schema definition
|
91
|
+
|
92
|
+
The block passed in `::params` is the block passed to `Dry::Schema.Params` of dry-schema.
|
93
|
+
|
94
|
+
For syntax of schema definition, please refer to dry-schema [documentation](https://dry-rb.org/gems/dry-schema/).
|
95
|
+
|
96
|
+
### Reusing param schemas
|
97
|
+
|
98
|
+
Defined params can be retrieved as app settings, using the schema name with `"_params"` suffix.
|
99
|
+
|
100
|
+
```ruby
|
101
|
+
settings.dry_params
|
102
|
+
settings.paging_params
|
103
|
+
```
|
104
|
+
|
105
|
+
And we can reuse schemas as how dry-schema is [reused](https://dry-rb.org/gems/dry-schema/reusing-schemas/)
|
106
|
+
|
107
|
+
```ruby
|
108
|
+
params :address do
|
109
|
+
required(:city).filled(:string)
|
110
|
+
required(:street).filled(:string)
|
111
|
+
required(:zipcode).filled(:string)
|
112
|
+
end
|
113
|
+
|
114
|
+
params do
|
115
|
+
required(:email).filled(:string)
|
116
|
+
required(:name).filled(:string)
|
117
|
+
required(:address).hash(settings.address_params)
|
118
|
+
end
|
119
|
+
|
120
|
+
post '/users' do
|
121
|
+
input = validate_params
|
122
|
+
User.create_with_address(input)
|
123
|
+
end
|
124
|
+
```
|
125
|
+
|
126
|
+
### Render response
|
127
|
+
|
128
|
+
By default, if `validate_params` failed, the action is halted with status 400 and render errors.
|
129
|
+
|
130
|
+
```ruby
|
131
|
+
params do
|
132
|
+
required(:page).filled(:integer, gt?: 0)
|
133
|
+
required(:per_page).filled(:integer, gt?: 0)
|
134
|
+
end
|
135
|
+
|
136
|
+
get '/' do
|
137
|
+
validate_params
|
138
|
+
end
|
139
|
+
|
140
|
+
#client
|
141
|
+
get '/', page: 0
|
142
|
+
#> Response body: { "page": ['must be greater than 0'], "per_page": ['is missing'] }
|
143
|
+
```
|
144
|
+
|
145
|
+
You can customize the behavior with this enable setting `raise_dry_param_exceptions` and catch the exception:
|
146
|
+
|
147
|
+
```ruby
|
148
|
+
class App < Sinatra::Base
|
149
|
+
register Sinatra::DryParam
|
150
|
+
|
151
|
+
enable :raise_dry_param_exceptions
|
152
|
+
|
153
|
+
error Sinatra::DryParam::InvalidParamsError do
|
154
|
+
"Your params is not valid: " + env['sinatra.error'].results.to_h.to_s
|
155
|
+
end
|
156
|
+
end
|
157
|
+
```
|
26
158
|
|
27
159
|
## Development
|
28
160
|
|
@@ -32,7 +164,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
32
164
|
|
33
165
|
## Contributing
|
34
166
|
|
35
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/
|
167
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/tiev/sinatra-dry_param. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
36
168
|
|
37
169
|
## License
|
38
170
|
|
@@ -40,4 +172,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
|
|
40
172
|
|
41
173
|
## Code of Conduct
|
42
174
|
|
43
|
-
Everyone interacting in the Sinatra::DryParam project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/
|
175
|
+
Everyone interacting in the Sinatra::DryParam project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/tiev/sinatra-dry_param/blob/master/CODE_OF_CONDUCT.md).
|
data/Rakefile
CHANGED
@@ -1,6 +1,13 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require 'bundler/gem_tasks'
|
5
|
+
|
6
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), 'lib'))
|
7
|
+
|
8
|
+
require 'rspec/core'
|
9
|
+
require 'rspec/core/rake_task'
|
3
10
|
|
4
11
|
RSpec::Core::RakeTask.new(:spec)
|
5
12
|
|
6
|
-
task :
|
13
|
+
task default: :spec
|
data/lib/sinatra/dry_param.rb
CHANGED
@@ -5,19 +5,38 @@ require 'sinatra/dry_param/version'
|
|
5
5
|
|
6
6
|
module Sinatra
|
7
7
|
module DryParam
|
8
|
-
class
|
8
|
+
class InvalidParamsError < StandardError
|
9
|
+
attr_reader :results
|
10
|
+
|
11
|
+
def initialize(msg, results)
|
12
|
+
@results = results
|
13
|
+
super(msg)
|
14
|
+
end
|
15
|
+
end
|
9
16
|
|
10
17
|
module Helpers
|
11
|
-
def validate_params
|
12
|
-
|
13
|
-
|
18
|
+
def validate_params(name = :dry, prs = params)
|
19
|
+
result = settings.send("#{name}_params").call(prs)
|
20
|
+
if result.success?
|
21
|
+
result.to_h
|
22
|
+
else
|
23
|
+
raise InvalidParamsError.new(result.errors.to_h.to_s, result.errors) if settings.raise_dry_param_exceptions?
|
24
|
+
|
25
|
+
halt 400, result.errors.to_h.to_json
|
26
|
+
end
|
14
27
|
end
|
15
28
|
end
|
16
29
|
|
30
|
+
def params(name = :dry, schema: nil, &block)
|
31
|
+
schema ||= Dry::Schema.Params(&block)
|
32
|
+
set "#{name}_params", schema
|
33
|
+
end
|
34
|
+
|
17
35
|
def self.registered(app)
|
18
36
|
require 'dry/schema'
|
19
|
-
|
20
37
|
app.helpers DryParam::Helpers
|
38
|
+
|
39
|
+
app.disable :raise_dry_param_exceptions
|
21
40
|
end
|
22
41
|
end
|
23
42
|
|
data/sinatra-dry_param.gemspec
CHANGED
@@ -23,12 +23,13 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.bindir = 'exe'
|
24
24
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
25
25
|
spec.require_paths = ['lib']
|
26
|
+
spec.required_ruby_version = '>= 2.4'
|
26
27
|
|
28
|
+
spec.add_runtime_dependency 'dry-schema', '>= 0.3.0'
|
27
29
|
spec.add_runtime_dependency 'sinatra', '>= 2.0'
|
28
|
-
spec.add_runtime_dependency 'dry-schema', '>= 0.5.1'
|
29
30
|
|
30
|
-
spec.add_development_dependency 'bundler'
|
31
|
-
spec.add_development_dependency 'rake', '~> 10.0'
|
32
|
-
spec.add_development_dependency 'rspec', '~> 3.0'
|
31
|
+
spec.add_development_dependency 'bundler'
|
33
32
|
spec.add_development_dependency 'rack-test'
|
33
|
+
spec.add_development_dependency 'rake'
|
34
|
+
spec.add_development_dependency 'rspec'
|
34
35
|
end
|
metadata
CHANGED
@@ -1,87 +1,87 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sinatra-dry_param
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Viet (Drake) Tran
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-05-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: dry-schema
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 0.3.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 0.3.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: sinatra
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0
|
33
|
+
version: '2.0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0
|
40
|
+
version: '2.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: rack-test
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: rake
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
75
|
+
version: '0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
82
|
+
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: rspec
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - ">="
|
@@ -106,12 +106,12 @@ files:
|
|
106
106
|
- ".travis.yml"
|
107
107
|
- CODE_OF_CONDUCT.md
|
108
108
|
- Gemfile
|
109
|
-
- Gemfile.lock
|
110
109
|
- LICENSE.txt
|
111
110
|
- README.md
|
112
111
|
- Rakefile
|
113
112
|
- bin/console
|
114
113
|
- bin/setup
|
114
|
+
- lib/sinatra-dry_param.rb
|
115
115
|
- lib/sinatra/dry_param.rb
|
116
116
|
- lib/sinatra/dry_param/version.rb
|
117
117
|
- sinatra-dry_param.gemspec
|
@@ -127,7 +127,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
127
127
|
requirements:
|
128
128
|
- - ">="
|
129
129
|
- !ruby/object:Gem::Version
|
130
|
-
version: '
|
130
|
+
version: '2.4'
|
131
131
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
132
132
|
requirements:
|
133
133
|
- - ">="
|
data/Gemfile.lock
DELETED
@@ -1,81 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
sinatra-dry_param (0.0.1)
|
5
|
-
dry-schema (>= 0.5.1)
|
6
|
-
sinatra (>= 2.0)
|
7
|
-
|
8
|
-
GEM
|
9
|
-
remote: https://rubygems.org/
|
10
|
-
specs:
|
11
|
-
concurrent-ruby (1.1.5)
|
12
|
-
diff-lcs (1.3)
|
13
|
-
dry-configurable (0.8.2)
|
14
|
-
concurrent-ruby (~> 1.0)
|
15
|
-
dry-core (~> 0.4, >= 0.4.7)
|
16
|
-
dry-container (0.7.0)
|
17
|
-
concurrent-ruby (~> 1.0)
|
18
|
-
dry-configurable (~> 0.1, >= 0.1.3)
|
19
|
-
dry-core (0.4.7)
|
20
|
-
concurrent-ruby (~> 1.0)
|
21
|
-
dry-equalizer (0.2.2)
|
22
|
-
dry-inflector (0.1.2)
|
23
|
-
dry-initializer (2.5.0)
|
24
|
-
dry-logic (0.6.1)
|
25
|
-
concurrent-ruby (~> 1.0)
|
26
|
-
dry-core (~> 0.2)
|
27
|
-
dry-equalizer (~> 0.2)
|
28
|
-
dry-schema (0.5.1)
|
29
|
-
concurrent-ruby (~> 1.0)
|
30
|
-
dry-configurable (~> 0.8, >= 0.8.0)
|
31
|
-
dry-core (~> 0.2, >= 0.2.1)
|
32
|
-
dry-equalizer (~> 0.2)
|
33
|
-
dry-initializer (~> 2.4)
|
34
|
-
dry-logic (~> 0.6, >= 0.6.0)
|
35
|
-
dry-types (~> 0.15, >= 0.15.0)
|
36
|
-
dry-types (0.15.0)
|
37
|
-
concurrent-ruby (~> 1.0)
|
38
|
-
dry-container (~> 0.3)
|
39
|
-
dry-core (~> 0.4, >= 0.4.4)
|
40
|
-
dry-equalizer (~> 0.2, >= 0.2.2)
|
41
|
-
dry-inflector (~> 0.1, >= 0.1.2)
|
42
|
-
dry-logic (~> 0.5, >= 0.5)
|
43
|
-
mustermann (1.0.3)
|
44
|
-
rack (2.0.7)
|
45
|
-
rack-protection (2.0.5)
|
46
|
-
rack
|
47
|
-
rack-test (1.1.0)
|
48
|
-
rack (>= 1.0, < 3)
|
49
|
-
rake (10.5.0)
|
50
|
-
rspec (3.8.0)
|
51
|
-
rspec-core (~> 3.8.0)
|
52
|
-
rspec-expectations (~> 3.8.0)
|
53
|
-
rspec-mocks (~> 3.8.0)
|
54
|
-
rspec-core (3.8.0)
|
55
|
-
rspec-support (~> 3.8.0)
|
56
|
-
rspec-expectations (3.8.2)
|
57
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
58
|
-
rspec-support (~> 3.8.0)
|
59
|
-
rspec-mocks (3.8.0)
|
60
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
61
|
-
rspec-support (~> 3.8.0)
|
62
|
-
rspec-support (3.8.0)
|
63
|
-
sinatra (2.0.5)
|
64
|
-
mustermann (~> 1.0)
|
65
|
-
rack (~> 2.0)
|
66
|
-
rack-protection (= 2.0.5)
|
67
|
-
tilt (~> 2.0)
|
68
|
-
tilt (2.0.9)
|
69
|
-
|
70
|
-
PLATFORMS
|
71
|
-
ruby
|
72
|
-
|
73
|
-
DEPENDENCIES
|
74
|
-
bundler (~> 1.17)
|
75
|
-
rack-test
|
76
|
-
rake (~> 10.0)
|
77
|
-
rspec (~> 3.0)
|
78
|
-
sinatra-dry_param!
|
79
|
-
|
80
|
-
BUNDLED WITH
|
81
|
-
1.17.2
|