sinatra-param-validator 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 +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
|