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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9f97a8559e2ec07afa81d651f62678c47842d09b
4
- data.tar.gz: b2fe39fbf25d859a68ae006f43f94ccb803ea356
3
+ metadata.gz: 3c6d73fb93ce10147af36e30aa8a529bc54f64ed
4
+ data.tar.gz: 23600a4dc99a57383bede5a0ac0eca8910c9b996
5
5
  SHA512:
6
- metadata.gz: 5dc1fe1ce6fb7d6d8e00c3da2559b6294326f9b8b7c8287492ef4937218be8705a8a86288332257edc9de74cd8935e439137cfbb2c8eaa68061a5e6addd9cf83
7
- data.tar.gz: 45eebe75d08e1d74266fca0ce7568ab64038a7658bf0f1ebf998b2c80cbeac6a169609eff1029f6ce0a0e56059fe3bc8a175c02e4254931d3a27a6a003cc3719
6
+ metadata.gz: d05baea6fe7d4d6ba0b9690e0b4827bf64ab0dc60a0cf3aa4f67e8ef3756d08f6b3869903f0eb8be216ed8fba6c75d59cd08677c6c2f9becc340d5d32caa66a9
7
+ data.tar.gz: 9cbed7f024c8ab78218fe4c14995e12ec4883c893296489cd7880d76c885586dc6d656dace9cbda66ff4a1dd608b16d2ba1381a6e1e2af5a92cd0b1287a0f801
@@ -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
- - run: bundle install
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
- required("name").filled(:str?)
33
- required("age").filled(:str?)
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
- required("name").filled(:str?)
47
- required("age").filled(:str?)
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
- required("name").filled(:str?)
66
+ params do
67
+ required("name").filled(:str?)
68
+ end
63
69
  end
64
- rescue => exception
65
- p exception # <Sinatra::Validation::InvalidParameterError: {:params=>{}, :messages=>["name is missing"]}>
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 something
82
+ # do anything you want
77
83
  end
78
84
  ```
79
85
 
@@ -9,7 +9,9 @@ class Application < Sinatra::Base
9
9
 
10
10
  get '/basic' do
11
11
  validates do
12
- required('name').filled(:str?)
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
- required('name').filled(:str?)
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
- required('name').filled(:str?)
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
@@ -4,33 +4,46 @@ require "dry-validation"
4
4
  module Sinatra
5
5
  module Validation
6
6
  class InvalidParameterError < StandardError
7
- attr_accessor :params, :messages
7
+ attr_reader :result
8
+
9
+ def initialize(result)
10
+ @result = result
11
+ end
8
12
  end
9
13
 
10
- class Result < Struct.new("Result", :params, :messages)
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.Schema(&block)
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 Result.new(validation.output, errors)
34
+ return result
25
35
  end
26
36
 
27
- raise InvalidParameterError.new(params: validation.output, messages: errors)
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
- error = exception.to_s
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
@@ -1,5 +1,5 @@
1
1
  module Sinatra
2
2
  module Validation
3
- VERSION = "0.2.0"
3
+ VERSION = "0.3.0"
4
4
  end
5
5
  end
@@ -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.2'
25
- spec.add_dependency 'dry-validation'
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", "~> 1.14"
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.2.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: 2018-08-12 00:00:00.000000000 Z
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.2
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.2
26
+ version: 2.0.7
27
27
  - !ruby/object:Gem::Dependency
28
- name: dry-validation
28
+ name: rack
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.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: '0'
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: '1.14'
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: '1.14'
68
+ version: 2.0.2
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: rake
57
71
  requirement: !ruby/object:Gem::Requirement