sinatra-validation 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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