sinatra-validation 0.2.0 → 0.3.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.
- checksums.yaml +4 -4
- data/.circleci/config.yml +18 -1
- data/README.md +14 -8
- data/example/app.rb +10 -6
- data/lib/sinatra/validation.rb +24 -11
- data/lib/sinatra/validation/version.rb +1 -1
- data/sinatra-validation.gemspec +4 -3
- metadata +23 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3c6d73fb93ce10147af36e30aa8a529bc54f64ed
|
4
|
+
data.tar.gz: 23600a4dc99a57383bede5a0ac0eca8910c9b996
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d05baea6fe7d4d6ba0b9690e0b4827bf64ab0dc60a0cf3aa4f67e8ef3756d08f6b3869903f0eb8be216ed8fba6c75d59cd08677c6c2f9becc340d5d32caa66a9
|
7
|
+
data.tar.gz: 9cbed7f024c8ab78218fe4c14995e12ec4883c893296489cd7880d76c885586dc6d656dace9cbda66ff4a1dd608b16d2ba1381a6e1e2af5a92cd0b1287a0f801
|
data/.circleci/config.yml
CHANGED
@@ -4,7 +4,24 @@ jobs:
|
|
4
4
|
build:
|
5
5
|
docker:
|
6
6
|
- image: circleci/ruby:2.4.4-jessie
|
7
|
+
environment:
|
8
|
+
BUNDLER_VERSION: 2.0.2
|
9
|
+
|
10
|
+
working_directory: ~/repo
|
11
|
+
|
7
12
|
steps:
|
8
13
|
- checkout
|
9
|
-
|
14
|
+
|
15
|
+
- run:
|
16
|
+
name: setup bundler 2
|
17
|
+
command: |
|
18
|
+
sudo gem update --system
|
19
|
+
sudo gem uninstall -ax bundler
|
20
|
+
sudo gem install bundler
|
21
|
+
|
22
|
+
- run:
|
23
|
+
name: install deps
|
24
|
+
command: |
|
25
|
+
bundle install --jobs=4 --retry=3 --path vendor/bundle
|
26
|
+
|
10
27
|
- run: bundle exec rake spec
|
data/README.md
CHANGED
@@ -29,8 +29,10 @@ Now you can use `validates` helper in your routes. The validation logic itself i
|
|
29
29
|
```ruby
|
30
30
|
get '/basic' do
|
31
31
|
validates do
|
32
|
-
|
33
|
-
|
32
|
+
params do
|
33
|
+
required("name").filled(:str?)
|
34
|
+
required("age").filled(:str?)
|
35
|
+
end
|
34
36
|
end
|
35
37
|
|
36
38
|
...
|
@@ -43,8 +45,10 @@ You can suppress the default behavior which `validates` helper halts with 400 wh
|
|
43
45
|
```ruby
|
44
46
|
get '/silent' do
|
45
47
|
result = validates silent: true do
|
46
|
-
|
47
|
-
|
48
|
+
params do
|
49
|
+
required("name").filled(:str?)
|
50
|
+
required("age").filled(:str?)
|
51
|
+
end
|
48
52
|
end
|
49
53
|
|
50
54
|
p result # <struct Sinatra::Validation::Result params={"name"=>"justine"}, messages=["age is missing"]>
|
@@ -59,10 +63,12 @@ By default, `validates` helper halts with 400, but if you set the option `raise`
|
|
59
63
|
get '/raise' do
|
60
64
|
begin
|
61
65
|
validates raise: true do
|
62
|
-
|
66
|
+
params do
|
67
|
+
required("name").filled(:str?)
|
68
|
+
end
|
63
69
|
end
|
64
|
-
rescue =>
|
65
|
-
p
|
70
|
+
rescue => e
|
71
|
+
p e.result # <Sinatra::Validation::InvalidParameterError: {:params=>{}, :messages=>["name is missing"]}>
|
66
72
|
end
|
67
73
|
|
68
74
|
...
|
@@ -73,7 +79,7 @@ if you want to enable this option to all validations, you can do `enable :raise_
|
|
73
79
|
enable :raise_sinatra_validation_exception
|
74
80
|
|
75
81
|
error Sinatra::Validation::InvalidParameterError do
|
76
|
-
# do
|
82
|
+
# do anything you want
|
77
83
|
end
|
78
84
|
```
|
79
85
|
|
data/example/app.rb
CHANGED
@@ -9,7 +9,9 @@ class Application < Sinatra::Base
|
|
9
9
|
|
10
10
|
get '/basic' do
|
11
11
|
validates do
|
12
|
-
|
12
|
+
params do
|
13
|
+
required(:name).filled(:str?)
|
14
|
+
end
|
13
15
|
end
|
14
16
|
|
15
17
|
'ok'
|
@@ -19,22 +21,24 @@ class Application < Sinatra::Base
|
|
19
21
|
content_type :json
|
20
22
|
|
21
23
|
result = validates silent: true do
|
22
|
-
|
24
|
+
params do
|
25
|
+
required(:name).filled(:str?)
|
26
|
+
end
|
23
27
|
end
|
24
28
|
|
25
|
-
p result
|
26
|
-
|
27
29
|
'ok'
|
28
30
|
end
|
29
31
|
|
30
32
|
get '/raise' do
|
31
33
|
begin
|
32
34
|
validates raise: true do
|
33
|
-
|
35
|
+
params do
|
36
|
+
required(:name).filled(:str?)
|
37
|
+
end
|
34
38
|
end
|
35
39
|
|
36
40
|
'ok'
|
37
|
-
rescue Sinatra::Validation::InvalidParameterError
|
41
|
+
rescue Sinatra::Validation::InvalidParameterError => e
|
38
42
|
halt 500, 'invalid'
|
39
43
|
end
|
40
44
|
end
|
data/lib/sinatra/validation.rb
CHANGED
@@ -4,33 +4,46 @@ require "dry-validation"
|
|
4
4
|
module Sinatra
|
5
5
|
module Validation
|
6
6
|
class InvalidParameterError < StandardError
|
7
|
-
|
7
|
+
attr_reader :result
|
8
|
+
|
9
|
+
def initialize(result)
|
10
|
+
@result = result
|
11
|
+
end
|
8
12
|
end
|
9
13
|
|
10
|
-
class Result
|
14
|
+
class Result
|
15
|
+
attr_reader :params, :messages
|
16
|
+
|
17
|
+
def initialize(params)
|
18
|
+
@params = params
|
19
|
+
end
|
20
|
+
|
21
|
+
def with_message(errors)
|
22
|
+
@messages = errors.to_h.map { |key, message| "#{key.to_s} #{message.first}" }
|
23
|
+
self
|
24
|
+
end
|
11
25
|
end
|
12
26
|
|
13
27
|
module Helpers
|
14
28
|
def validates(options = {}, &block)
|
15
|
-
schema = Dry::Validation
|
29
|
+
schema = Class.new(Dry::Validation::Contract, &block).new
|
16
30
|
validation = schema.call(params)
|
31
|
+
result = Result.new(params).with_message(validation.errors)
|
17
32
|
|
18
|
-
if validation.success?
|
19
|
-
return Result.new(validation.output)
|
20
|
-
end
|
21
|
-
|
22
|
-
errors = validation.messages(full: true).values.flatten;
|
23
33
|
if options[:silent] || settings.silent_validation
|
24
|
-
return
|
34
|
+
return result
|
25
35
|
end
|
26
36
|
|
27
|
-
|
37
|
+
if validation.failure?
|
38
|
+
raise InvalidParameterError.new(result)
|
39
|
+
end
|
28
40
|
rescue InvalidParameterError => exception
|
29
41
|
if options[:raise] || settings.raise_sinatra_validation_exception
|
30
42
|
raise exception
|
31
43
|
end
|
32
44
|
|
33
|
-
|
45
|
+
errors = exception.result.messages
|
46
|
+
error = errors.first
|
34
47
|
|
35
48
|
if content_type && content_type.match(mime_type(:json))
|
36
49
|
error = { errors: errors }.to_json
|
data/sinatra-validation.gemspec
CHANGED
@@ -21,10 +21,11 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
22
22
|
spec.require_paths = ["lib"]
|
23
23
|
|
24
|
-
spec.add_dependency 'sinatra', '~> 2.0.
|
25
|
-
spec.add_dependency '
|
24
|
+
spec.add_dependency 'sinatra', '~> 2.0.7'
|
25
|
+
spec.add_dependency 'rack', '>= 2.0.6'
|
26
|
+
spec.add_dependency 'dry-validation', '~> 1.3'
|
26
27
|
|
27
|
-
spec.add_development_dependency "bundler", "~>
|
28
|
+
spec.add_development_dependency "bundler", "~> 2.0.2"
|
28
29
|
spec.add_development_dependency "rake", "~> 10.0"
|
29
30
|
spec.add_development_dependency "rspec", "~> 3.0"
|
30
31
|
spec.add_development_dependency "rack-test"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sinatra-validation
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- IzumiSy
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-10-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sinatra
|
@@ -16,42 +16,56 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 2.0.
|
19
|
+
version: 2.0.7
|
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: 2.0.
|
26
|
+
version: 2.0.7
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: rack
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 2.0.6
|
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:
|
40
|
+
version: 2.0.6
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: dry-validation
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.3'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.3'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: bundler
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
59
|
- - "~>"
|
46
60
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
61
|
+
version: 2.0.2
|
48
62
|
type: :development
|
49
63
|
prerelease: false
|
50
64
|
version_requirements: !ruby/object:Gem::Requirement
|
51
65
|
requirements:
|
52
66
|
- - "~>"
|
53
67
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
68
|
+
version: 2.0.2
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: rake
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|