sinatra-validation 0.1.0 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 19d3baa6aa52b1f1456f8f3f9062d800e2bef90d
4
- data.tar.gz: a73f583804f69227267c156a84807dee73aecc63
2
+ SHA256:
3
+ metadata.gz: aa3a3b73cd49ac6a0b7b6e8aa3c4398e40dae9abb464a59ecc2dec9952ac3f23
4
+ data.tar.gz: 1d4a20b3554ed689d80b4dd524e1fd6aebf6e315c7e5de45c905f3d7faae379c
5
5
  SHA512:
6
- metadata.gz: 3b392f0906b84e75661aeede4083f1562d7d36046100c056d9d74b0de6ff50a95c048263341e2ac3088657abe42fd16cf921b24e78d35ed7da9f5965e0e54b59
7
- data.tar.gz: d2ea2847d51c5c5ac9d70398616514b3292b4eaee9c6f2b97904f5172390a9f8deed1d0962f8155621fdedcd9a598440b7b73c61067a8791061b99b032b567ca
6
+ metadata.gz: 54e9deffe50aa5f7e3b5a660a84b777881fc1829083a0d8f16c02cd2d204d3072d835f937d4e2013643b258883d49461f3343678e0bda3d10b1ac47a2c5bc195
7
+ data.tar.gz: b542a570e3ea3a817230c759630f49a37b22ce34b8c12e3019377acc0add144446313eac1b23f647e9caac12f6457be5253d1088e37956f62e621b7922c631c6
@@ -0,0 +1,20 @@
1
+ version: 2
2
+
3
+ jobs:
4
+ build:
5
+ docker:
6
+ - image: circleci/ruby:2.6.6
7
+
8
+ working_directory: ~/repo
9
+
10
+ steps:
11
+ - checkout
12
+ - run:
13
+ name: install deps
14
+ command: |
15
+ bundle install --jobs=4 --retry=3 --path vendor/bundle
16
+
17
+ - run:
18
+ name: run tests
19
+ command: |
20
+ bundle exec rake spec
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.6.6
data/Gemfile CHANGED
@@ -1,4 +1,5 @@
1
1
  source 'https://rubygems.org'
2
+ ruby '2.6.6'
2
3
 
3
4
  # Specify your gem's dependencies in sinatra-validation.gemspec
4
5
  gemspec
data/README.md CHANGED
@@ -1,4 +1,5 @@
1
1
  # Sinatra::Validation
2
+ [![Gem Version](https://badge.fury.io/rb/sinatra-validation.svg)](https://badge.fury.io/rb/sinatra-validation)
2
3
  [![CircleCI](https://circleci.com/gh/IzumiSy/sinatra-validation.svg?style=shield)](https://circleci.com/gh/IzumiSy/sinatra-validation)
3
4
 
4
5
  > Sinatra extension for request parameter validation powered with dry-validation
@@ -28,8 +29,10 @@ Now you can use `validates` helper in your routes. The validation logic itself i
28
29
  ```ruby
29
30
  get '/basic' do
30
31
  validates do
31
- required("name").filled(:str?)
32
- required("age").filled(:str?)
32
+ params do
33
+ required("name").filled(:str?)
34
+ required("age").filled(:str?)
35
+ end
33
36
  end
34
37
 
35
38
  ...
@@ -42,8 +45,10 @@ You can suppress the default behavior which `validates` helper halts with 400 wh
42
45
  ```ruby
43
46
  get '/silent' do
44
47
  result = validates silent: true do
45
- required("name").filled(:str?)
46
- required("age").filled(:str?)
48
+ params do
49
+ required("name").filled(:str?)
50
+ required("age").filled(:str?)
51
+ end
47
52
  end
48
53
 
49
54
  p result # <struct Sinatra::Validation::Result params={"name"=>"justine"}, messages=["age is missing"]>
@@ -58,10 +63,12 @@ By default, `validates` helper halts with 400, but if you set the option `raise`
58
63
  get '/raise' do
59
64
  begin
60
65
  validates raise: true do
61
- required("name").filled(:str?)
66
+ params do
67
+ required("name").filled(:str?)
68
+ end
62
69
  end
63
- rescue => exception
64
- 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"]}>
65
72
  end
66
73
 
67
74
  ...
@@ -72,7 +79,7 @@ if you want to enable this option to all validations, you can do `enable :raise_
72
79
  enable :raise_sinatra_validation_exception
73
80
 
74
81
  error Sinatra::Validation::InvalidParameterError do
75
- # do something
82
+ # do anything you want
76
83
  end
77
84
  ```
78
85
 
@@ -82,6 +89,13 @@ After checking out the repo, run `bin/setup` to install dependencies. Then, run
82
89
 
83
90
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
84
91
 
92
+ ### Test
93
+
94
+ ```bash
95
+ $ bundle install
96
+ $ rake
97
+ ```
98
+
85
99
  ## Contributing
86
100
 
87
101
  Bug reports and pull requests are welcome on GitHub at https://github.com/IzumiSy/sinatra-validation. 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.
data/example/Gemfile.lock CHANGED
@@ -1,62 +1,59 @@
1
1
  PATH
2
- remote: /home/izumisy/Devs/sinatra-validation
2
+ remote: /Users/izumi/Devs/sinatra-validation
3
3
  specs:
4
- sinatra-validation (0.1.0)
5
- dry-validation
6
- sinatra
7
- sinatra-contrib
4
+ sinatra-validation (0.3.2)
5
+ dry-validation (~> 1.3)
6
+ rack (>= 2.0.6)
7
+ sinatra (~> 2.1.0)
8
8
 
9
9
  GEM
10
10
  remote: https://rubygems.org/
11
11
  specs:
12
- backports (3.10.3)
13
- concurrent-ruby (1.0.5)
14
- dry-configurable (0.7.0)
12
+ concurrent-ruby (1.1.9)
13
+ dry-configurable (0.13.0)
15
14
  concurrent-ruby (~> 1.0)
16
- dry-container (0.6.0)
15
+ dry-core (~> 0.6)
16
+ dry-container (0.9.0)
17
17
  concurrent-ruby (~> 1.0)
18
- dry-configurable (~> 0.1, >= 0.1.3)
19
- dry-core (0.4.1)
18
+ dry-configurable (~> 0.13, >= 0.13.0)
19
+ dry-core (0.7.1)
20
20
  concurrent-ruby (~> 1.0)
21
- dry-equalizer (0.2.0)
22
- dry-logic (0.4.2)
23
- dry-container (~> 0.2, >= 0.2.6)
24
- dry-core (~> 0.2)
25
- dry-equalizer (~> 0.2)
26
- dry-types (0.12.2)
21
+ dry-inflector (0.2.1)
22
+ dry-initializer (3.0.4)
23
+ dry-logic (1.2.0)
24
+ concurrent-ruby (~> 1.0)
25
+ dry-core (~> 0.5, >= 0.5)
26
+ dry-schema (1.8.0)
27
+ concurrent-ruby (~> 1.0)
28
+ dry-configurable (~> 0.13, >= 0.13.0)
29
+ dry-core (~> 0.5, >= 0.5)
30
+ dry-initializer (~> 3.0)
31
+ dry-logic (~> 1.0)
32
+ dry-types (~> 1.5)
33
+ dry-types (1.5.1)
27
34
  concurrent-ruby (~> 1.0)
28
- dry-configurable (~> 0.1)
29
35
  dry-container (~> 0.3)
30
- dry-core (~> 0.2, >= 0.2.1)
31
- dry-equalizer (~> 0.2)
32
- dry-logic (~> 0.4, >= 0.4.2)
33
- inflecto (~> 0.0.0, >= 0.0.2)
34
- dry-validation (0.11.1)
36
+ dry-core (~> 0.5, >= 0.5)
37
+ dry-inflector (~> 0.1, >= 0.1.2)
38
+ dry-logic (~> 1.0, >= 1.0.2)
39
+ dry-validation (1.7.0)
35
40
  concurrent-ruby (~> 1.0)
36
- dry-configurable (~> 0.1, >= 0.1.3)
37
- dry-core (~> 0.2, >= 0.2.1)
38
- dry-equalizer (~> 0.2)
39
- dry-logic (~> 0.4, >= 0.4.0)
40
- dry-types (~> 0.12.0)
41
- inflecto (0.0.2)
42
- multi_json (1.12.2)
43
- mustermann (1.0.1)
44
- rack (2.0.3)
45
- rack-protection (2.0.0)
41
+ dry-container (~> 0.7, >= 0.7.1)
42
+ dry-core (~> 0.5, >= 0.5)
43
+ dry-initializer (~> 3.0)
44
+ dry-schema (~> 1.8, >= 1.8.0)
45
+ mustermann (1.1.1)
46
+ ruby2_keywords (~> 0.0.1)
47
+ rack (2.2.3)
48
+ rack-protection (2.1.0)
46
49
  rack
47
- sinatra (2.0.0)
50
+ ruby2_keywords (0.0.5)
51
+ sinatra (2.1.0)
48
52
  mustermann (~> 1.0)
49
- rack (~> 2.0)
50
- rack-protection (= 2.0.0)
53
+ rack (~> 2.2)
54
+ rack-protection (= 2.1.0)
51
55
  tilt (~> 2.0)
52
- sinatra-contrib (2.0.0)
53
- backports (>= 2.0)
54
- multi_json
55
- mustermann (~> 1.0)
56
- rack-protection (= 2.0.0)
57
- sinatra (= 2.0.0)
58
- tilt (>= 1.3, < 3)
59
- tilt (2.0.8)
56
+ tilt (2.0.10)
60
57
 
61
58
  PLATFORMS
62
59
  ruby
@@ -66,4 +63,4 @@ DEPENDENCIES
66
63
  sinatra-validation!
67
64
 
68
65
  BUNDLED WITH
69
- 1.14.6
66
+ 1.17.2
data/example/app.rb CHANGED
@@ -1,15 +1,33 @@
1
+ require 'rack/contrib'
1
2
  require 'sinatra'
2
3
  require 'sinatra/base'
3
4
  require 'sinatra/validation'
5
+ require 'pry' if development? or test?
4
6
 
5
7
  class Application < Sinatra::Base
6
8
  configure do
7
9
  register Sinatra::Validation
10
+
11
+ use Rack::JSONBodyParser
12
+ end
13
+
14
+ post '/post' do
15
+ content_type :json
16
+
17
+ validates do
18
+ params do
19
+ required(:name).filled(:str?)
20
+ end
21
+ end
22
+
23
+ 'ok'
8
24
  end
9
25
 
10
26
  get '/basic' do
11
27
  validates do
12
- required('name').filled(:str?)
28
+ params do
29
+ required(:name).filled(:str?)
30
+ end
13
31
  end
14
32
 
15
33
  'ok'
@@ -18,20 +36,44 @@ class Application < Sinatra::Base
18
36
  get '/silent' do
19
37
  content_type :json
20
38
 
21
- result = validates silent: true do
22
- required('name').filled(:str?)
39
+ validates silent: true do
40
+ params do
41
+ required(:name).filled(:str?)
42
+ end
23
43
  end
24
44
 
25
- p result
26
-
27
45
  'ok'
28
46
  end
29
47
 
30
48
  get '/raise' do
31
- validates raise: true do
32
- required('name').filled(:str?)
49
+ begin
50
+ validates raise: true do
51
+ params do
52
+ required(:name).filled(:str?)
53
+ end
54
+ end
55
+
56
+ 'ok'
57
+ rescue Sinatra::Validation::InvalidParameterError => e
58
+ halt 500, 'invalid'
33
59
  end
60
+ end
34
61
 
35
- 'ok'
62
+ get '/filter' do
63
+ validates filter_unpermitted_params: true do
64
+ params do
65
+ optional(:allowed).filled(:str?)
66
+ end
67
+ end
68
+ params.map{|k, v| "#{k}=#{v}"}.join(' ')
69
+ end
70
+
71
+ get '/result' do
72
+ result = validates do
73
+ params do
74
+ optional(:allowed).filled(:str?)
75
+ end
76
+ end
77
+ result.params.map{|k, v| "#{k}=#{v}"}.join(' ')
36
78
  end
37
79
  end
@@ -1,5 +1,5 @@
1
1
  module Sinatra
2
2
  module Validation
3
- VERSION = "0.1.0"
3
+ VERSION = "0.3.2"
4
4
  end
5
5
  end
@@ -4,33 +4,53 @@ 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(Sinatra::IndifferentHash[validation.to_h])
32
+ .with_message(validation.errors)
17
33
 
18
- if validation.success?
19
- return Result.new(validation.output)
34
+ if options[:filter_unpermitted_params] || settings.filter_unpermitted_params
35
+ params.replace validation.to_h
20
36
  end
21
37
 
22
- errors = validation.messages(full: true).values.flatten;
23
38
  if options[:silent] || settings.silent_validation
24
- return Result.new(validation.output, errors)
39
+ return result
40
+ end
41
+
42
+ if validation.failure?
43
+ raise InvalidParameterError.new(result)
25
44
  end
26
45
 
27
- raise InvalidParameterError.new(params: validation.output, messages: errors)
46
+ result
28
47
  rescue InvalidParameterError => exception
29
48
  if options[:raise] || settings.raise_sinatra_validation_exception
30
49
  raise exception
31
50
  end
32
51
 
33
- error = exception.to_s
52
+ errors = exception.result.messages
53
+ error = errors.first
34
54
 
35
55
  if content_type && content_type.match(mime_type(:json))
36
56
  error = { errors: errors }.to_json
@@ -44,6 +64,7 @@ module Sinatra
44
64
  app.helpers Validation::Helpers
45
65
  app.set :silent_validation, false
46
66
  app.set :raise_sinatra_validation_exception, false
67
+ app.set :filter_unpermitted_params, false
47
68
  end
48
69
  end
49
70
  end
@@ -21,12 +21,13 @@ 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'
25
- spec.add_dependency 'sinatra-contrib'
26
- spec.add_dependency 'dry-validation'
24
+ spec.add_dependency 'sinatra', '~> 2.1.0'
25
+ spec.add_dependency 'rack', '>= 2.0.6'
26
+ spec.add_dependency 'dry-validation', '~> 1.3'
27
27
 
28
- spec.add_development_dependency "bundler", "~> 1.14"
29
28
  spec.add_development_dependency "rake", "~> 10.0"
30
29
  spec.add_development_dependency "rspec", "~> 3.0"
30
+ spec.add_development_dependency "rack-contrib"
31
31
  spec.add_development_dependency "rack-test"
32
+ spec.add_development_dependency "pry"
32
33
  end
metadata CHANGED
@@ -1,99 +1,99 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sinatra-validation
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - IzumiSy
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-12-03 00:00:00.000000000 Z
11
+ date: 2022-01-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sinatra
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 2.1.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: '0'
26
+ version: 2.1.0
27
27
  - !ruby/object:Gem::Dependency
28
- name: sinatra-contrib
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
41
  - !ruby/object:Gem::Dependency
42
42
  name: dry-validation
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: '1.3'
48
48
  type: :runtime
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: '0'
54
+ version: '1.3'
55
55
  - !ruby/object:Gem::Dependency
56
- name: bundler
56
+ name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '1.14'
61
+ version: '10.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: '1.14'
68
+ version: '10.0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: rake
70
+ name: rspec
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '10.0'
75
+ version: '3.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: '10.0'
82
+ version: '3.0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: rspec
84
+ name: rack-contrib
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - "~>"
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
- version: '3.0'
89
+ version: '0'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - "~>"
94
+ - - ">="
95
95
  - !ruby/object:Gem::Version
96
- version: '3.0'
96
+ version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rack-test
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -108,6 +108,20 @@ dependencies:
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: pry
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
111
125
  description: ' "sinatra-validation is a gem to define parameter validation with dry-validation"'
112
126
  email:
113
127
  - beetle-noise@gmx.com
@@ -115,9 +129,10 @@ executables: []
115
129
  extensions: []
116
130
  extra_rdoc_files: []
117
131
  files:
132
+ - ".circleci/config.yml"
118
133
  - ".gitignore"
119
134
  - ".rspec"
120
- - ".travis.yml"
135
+ - ".ruby-version"
121
136
  - CODE_OF_CONDUCT.md
122
137
  - Gemfile
123
138
  - LICENSE.txt
@@ -136,7 +151,7 @@ homepage: https://github.com/IzumiSy/sinatra-validation
136
151
  licenses:
137
152
  - MIT
138
153
  metadata: {}
139
- post_install_message:
154
+ post_install_message:
140
155
  rdoc_options: []
141
156
  require_paths:
142
157
  - lib
@@ -151,9 +166,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
151
166
  - !ruby/object:Gem::Version
152
167
  version: '0'
153
168
  requirements: []
154
- rubyforge_project:
155
- rubygems_version: 2.6.10
156
- signing_key:
169
+ rubygems_version: 3.0.3
170
+ signing_key:
157
171
  specification_version: 4
158
172
  summary: '"Sinatra extension for request parameter validation"'
159
173
  test_files: []
data/.travis.yml DELETED
@@ -1,5 +0,0 @@
1
- sudo: false
2
- language: ruby
3
- rvm:
4
- - 2.4.0
5
- before_install: gem install bundler -v 1.14.6