sinatra-param-validator 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 +4 -4
- data/CHANGELOG.md +29 -0
- data/Gemfile.lock +1 -1
- data/README.md +10 -6
- data/lib/sinatra/param_validator/helpers.rb +3 -2
- data/lib/sinatra/param_validator/parser.rb +1 -1
- data/lib/sinatra/param_validator/snake_case.rb +12 -0
- data/lib/sinatra/param_validator/validator.rb +15 -4
- data/lib/sinatra/param_validator/version.rb +1 -1
- data/lib/sinatra/param_validator.rb +23 -11
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 54d6ed44b4046ecc9fd330aef4e719cbe10d4a953a8d07a80226822f59ed66d7
|
4
|
+
data.tar.gz: e70164b07f23972aeffa920719c6de35baff4576eed46260944daf3a1b5e404b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d4d54fc8f4d76d1499d9c15adec02e35ff2f7c36bf99f5606d15b60a579e45da1c0905624c12be5e4a01b645670a5f23603191cf87fd6be0fd3541c1f94f6afb
|
7
|
+
data.tar.gz: c1c40e3b72dcb644adaf9437b0b7b67cfec8e33efad17ded176b74f3d6cf942fd76d3e4b7bf47f11442ebbb279d08907678e7600813b0b8da37c13736e0fdef4
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,34 @@
|
|
1
1
|
## [Unreleased]
|
2
2
|
|
3
|
+
## [0.3.0] - 2022-06-08
|
4
|
+
|
5
|
+
- Don't create entries in `params` for parameters that are not passed
|
6
|
+
- Don't set validator type during definition
|
7
|
+
- Add unique validator conditionals for each validator:
|
8
|
+
- validate
|
9
|
+
- validate_form
|
10
|
+
- validate_url_param
|
11
|
+
|
12
|
+
## [0.2.0] - 2022-06-08
|
13
|
+
|
14
|
+
- Add validators:
|
15
|
+
- Standard
|
16
|
+
- URL Parameter
|
17
|
+
- Form
|
18
|
+
- Add parameters:
|
19
|
+
- Array
|
20
|
+
- Boolean
|
21
|
+
- Date
|
22
|
+
- Float
|
23
|
+
- Hash
|
24
|
+
- Integer
|
25
|
+
- String
|
26
|
+
- Time
|
27
|
+
- Add rules:
|
28
|
+
- All or none of
|
29
|
+
- Any of
|
30
|
+
- One of
|
31
|
+
|
3
32
|
## [0.1.0] - 2022-05-16
|
4
33
|
|
5
34
|
- Initial release
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -15,7 +15,7 @@ If bundler is not being used to manage dependencies, install the gem by executin
|
|
15
15
|
## Sample Usage
|
16
16
|
|
17
17
|
```ruby
|
18
|
-
validator
|
18
|
+
validator :user_id do
|
19
19
|
param :id, Integer, required: true
|
20
20
|
end
|
21
21
|
|
@@ -23,7 +23,7 @@ get '/user/:id', validate: :user_id do
|
|
23
23
|
# ...
|
24
24
|
end
|
25
25
|
|
26
|
-
validator
|
26
|
+
validator :new_user do
|
27
27
|
param :name, String, required: true
|
28
28
|
param :age, Integer, required: true, min: 0
|
29
29
|
end
|
@@ -113,12 +113,16 @@ There are two other provided validators, that handle failure differently:
|
|
113
113
|
* will provide a JSON object with errors to an XHR request
|
114
114
|
* will `halt 400`
|
115
115
|
|
116
|
-
These validators can be
|
116
|
+
These validators can be invoked with a different conditional on the route:
|
117
117
|
|
118
118
|
```ruby
|
119
|
-
|
120
|
-
|
121
|
-
|
119
|
+
post '/new-user', validate_form: :new_user do
|
120
|
+
# ...
|
121
|
+
end
|
122
|
+
|
123
|
+
|
124
|
+
get '/user/:id', validate_url_param: :user_id do
|
125
|
+
# ...
|
122
126
|
end
|
123
127
|
```
|
124
128
|
|
@@ -13,8 +13,9 @@ module Sinatra
|
|
13
13
|
raise "Filter params failed: #{e}"
|
14
14
|
end
|
15
15
|
|
16
|
-
def validate(identifier, args = {})
|
17
|
-
|
16
|
+
def validate(klass, identifier, args = {})
|
17
|
+
definition = settings.validator_definitions.get(identifier)
|
18
|
+
validator = klass.new(&definition)
|
18
19
|
validator.run(self, *args)
|
19
20
|
validator.handle_failure(self) unless validator.success?
|
20
21
|
end
|
@@ -21,7 +21,7 @@ module Sinatra
|
|
21
21
|
|
22
22
|
def param(key, type, **args)
|
23
23
|
parameter = Parameter.new(@context.params[key], type, **args)
|
24
|
-
@context.params[key] = parameter.coerced
|
24
|
+
@context.params[key] = parameter.coerced if @context.params.key? key
|
25
25
|
@errors[key] = parameter.errors unless parameter.valid?
|
26
26
|
rescue NameError
|
27
27
|
raise 'Invalid parameter type'
|
@@ -1,9 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative 'validation_failed_error'
|
4
|
-
require_relative 'validator/form'
|
5
|
-
require_relative 'validator/url_param'
|
6
|
-
|
7
3
|
module Sinatra
|
8
4
|
module ParamValidator
|
9
5
|
# Definition of a single validator
|
@@ -26,6 +22,21 @@ module Sinatra
|
|
26
22
|
def success?
|
27
23
|
@errors.empty?
|
28
24
|
end
|
25
|
+
|
26
|
+
@validators = []
|
27
|
+
|
28
|
+
class << self
|
29
|
+
attr_reader :validators
|
30
|
+
|
31
|
+
def inherited(subclass)
|
32
|
+
super
|
33
|
+
@validators << subclass
|
34
|
+
end
|
35
|
+
end
|
29
36
|
end
|
30
37
|
end
|
31
38
|
end
|
39
|
+
|
40
|
+
require_relative 'validation_failed_error'
|
41
|
+
require_relative 'validator/form'
|
42
|
+
require_relative 'validator/url_param'
|
@@ -1,8 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative 'param_validator/camelize'
|
3
4
|
require_relative 'param_validator/definitions'
|
4
5
|
require_relative 'param_validator/helpers'
|
5
6
|
require_relative 'param_validator/parser'
|
7
|
+
require_relative 'param_validator/snake_case'
|
6
8
|
require_relative 'param_validator/validator'
|
7
9
|
require_relative 'param_validator/version'
|
8
10
|
|
@@ -11,19 +13,29 @@ module Sinatra
|
|
11
13
|
module ParamValidator
|
12
14
|
include Camelize
|
13
15
|
|
14
|
-
def validator(identifier
|
15
|
-
|
16
|
-
class_name = "#{class_name}::#{camelize(type)}" unless type.nil?
|
17
|
-
settings.validator_definitions.add(identifier, Object.const_get(class_name).new(&definition))
|
16
|
+
def validator(identifier, &definition)
|
17
|
+
settings.validator_definitions.add(identifier, definition)
|
18
18
|
end
|
19
19
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
app
|
24
|
-
|
25
|
-
|
26
|
-
|
20
|
+
class << self
|
21
|
+
include SnakeCase
|
22
|
+
|
23
|
+
def registered(app)
|
24
|
+
app.helpers Helpers
|
25
|
+
app.before { filter_params }
|
26
|
+
app.set(:validator_definitions, Definitions.new)
|
27
|
+
validator_conditional app, :validate, Sinatra::ParamValidator::Validator
|
28
|
+
|
29
|
+
Sinatra::ParamValidator::Validator.validators.each do |validator|
|
30
|
+
validator_conditional app, :"validate_#{snake_case(validator.to_s.split('::').last)}", validator
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def validator_conditional(app, name, klass)
|
35
|
+
app.set(name) do |*identifiers|
|
36
|
+
condition do
|
37
|
+
identifiers.each { |identifier| validate klass, identifier }
|
38
|
+
end
|
27
39
|
end
|
28
40
|
end
|
29
41
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sinatra-param-validator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rick Selby
|
@@ -157,6 +157,7 @@ files:
|
|
157
157
|
- lib/sinatra/param_validator/rule/all_or_none_of.rb
|
158
158
|
- lib/sinatra/param_validator/rule/any_of.rb
|
159
159
|
- lib/sinatra/param_validator/rule/one_of.rb
|
160
|
+
- lib/sinatra/param_validator/snake_case.rb
|
160
161
|
- lib/sinatra/param_validator/validation_failed_error.rb
|
161
162
|
- lib/sinatra/param_validator/validator.rb
|
162
163
|
- lib/sinatra/param_validator/validator/form.rb
|