sinatra-validation 0.1.0 → 0.3.2

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
- 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