sinatra-param-validator 0.11.0 → 0.14.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 +14 -0
- data/Gemfile.lock +2 -2
- data/lib/sinatra/param_validator/helpers.rb +40 -0
- data/lib/sinatra/param_validator/parameter/date.rb +1 -0
- data/lib/sinatra/param_validator/parameter/integer.rb +1 -0
- data/lib/sinatra/param_validator/parameter/time.rb +1 -0
- data/lib/sinatra/param_validator/validator.rb +5 -1
- data/lib/sinatra/param_validator/version.rb +1 -1
- data/lib/sinatra/param_validator.rb +3 -1
- metadata +2 -3
- data/lib/sinatra/param_validator/parser.rb +0 -71
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2f94e83b8a50e45743393eff54f46c692095fbad50942f68e047713b55397512
|
|
4
|
+
data.tar.gz: 1394c62c964ad2e4bc51dbd44abf98313757babbbe13748c09f32dc2a2e8863d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: '09cd666c97ce8ffd0750361ca52cfa04b2687351bd4db39918ba6d393ce476917943a16311817cddd50507939978687a4820d8aeb2fbda130dfd64d01a12ac72'
|
|
7
|
+
data.tar.gz: 2589470cf72e955854bc68ade46b6ccb1ddf2a5e9d1a7ad142e3fcfa5a2f714aa547b850090ee26caec29d33bf3d8c5b476809cb6ef392e3dad20222588bd6b9
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
## [Unreleased]
|
|
2
2
|
|
|
3
|
+
## [0.14.0] - 2022-07-15
|
|
4
|
+
|
|
5
|
+
- Fix parameter coercion if a parameter is validated multiple times
|
|
6
|
+
- Refactor `param` and `rule` functions into helpers
|
|
7
|
+
- Allow `param` and `rule` to be run independently
|
|
8
|
+
|
|
9
|
+
## [0.13.0] - 2022-07-15
|
|
10
|
+
|
|
11
|
+
- Capture `InvalidParameterError`s raised when running the parser
|
|
12
|
+
|
|
13
|
+
## [0.12.0] - 2022-07-15
|
|
14
|
+
|
|
15
|
+
- Switch from a delegator to extending the context
|
|
16
|
+
|
|
3
17
|
## [0.11.0] - 2022-07-15
|
|
4
18
|
|
|
5
19
|
- Fix setting param values to false
|
data/Gemfile.lock
CHANGED
|
@@ -13,6 +13,25 @@ module Sinatra
|
|
|
13
13
|
raise "Filter params failed: #{e}"
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
+
def param(key, type, default: nil, message: nil, **args, &block)
|
|
17
|
+
parameter = Parameter.new(params[key], type, **args)
|
|
18
|
+
_update_params_hash key, parameter, default
|
|
19
|
+
if parameter.valid?
|
|
20
|
+
_run_block(key, block) if block
|
|
21
|
+
else
|
|
22
|
+
_handle_error key, message || parameter.errors
|
|
23
|
+
end
|
|
24
|
+
rescue NameError
|
|
25
|
+
raise 'Invalid parameter type'
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def rule(name, *args, **kwargs)
|
|
29
|
+
rule = Rule.new(name, params, *args, **kwargs)
|
|
30
|
+
_handle_error :rules, rule.errors unless rule.passes?
|
|
31
|
+
rescue NameError
|
|
32
|
+
raise 'Invalid rule type'
|
|
33
|
+
end
|
|
34
|
+
|
|
16
35
|
def validate(klass, identifier)
|
|
17
36
|
identifier = Identifier.new(identifier) if identifier.is_a? Symbol
|
|
18
37
|
definition = settings.validator_definitions.get(identifier.identifier)
|
|
@@ -20,6 +39,27 @@ module Sinatra
|
|
|
20
39
|
validator.run(self, *identifier.args)
|
|
21
40
|
validator.handle_failure(self) unless validator.success?
|
|
22
41
|
end
|
|
42
|
+
|
|
43
|
+
def _handle_error(key, error)
|
|
44
|
+
raise InvalidParameterError unless defined? @_validator_errors
|
|
45
|
+
|
|
46
|
+
@_validator_errors[key] = @_validator_errors.fetch(key, []).concat(Array(error))
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def _run_block(key, block)
|
|
50
|
+
args = block.arity == 1 ? [self] : []
|
|
51
|
+
instance_exec(*args, &block)
|
|
52
|
+
rescue InvalidParameterError => e
|
|
53
|
+
_handle_error key, e.message
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def _update_params_hash(key, parameter, default)
|
|
57
|
+
if params.key?(key)
|
|
58
|
+
params[key] = parameter.coerced unless parameter.coerced.nil?
|
|
59
|
+
elsif !default.nil?
|
|
60
|
+
params[key] = default.respond_to?(:call) ? default.call : default
|
|
61
|
+
end
|
|
62
|
+
end
|
|
23
63
|
end
|
|
24
64
|
end
|
|
25
65
|
end
|
|
@@ -16,7 +16,11 @@ module Sinatra
|
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
def run(context, *args)
|
|
19
|
-
|
|
19
|
+
context.instance_variable_set(:@_validator_errors, {})
|
|
20
|
+
context.instance_exec(*args, &@definition)
|
|
21
|
+
@errors = context.remove_instance_variable(:@_validator_errors)
|
|
22
|
+
rescue InvalidParameterError => e
|
|
23
|
+
@errors[:general] = [e.message]
|
|
20
24
|
end
|
|
21
25
|
|
|
22
26
|
def success?
|
|
@@ -4,7 +4,9 @@ require_relative 'param_validator/camelize'
|
|
|
4
4
|
require_relative 'param_validator/definitions'
|
|
5
5
|
require_relative 'param_validator/helpers'
|
|
6
6
|
require_relative 'param_validator/identifier'
|
|
7
|
-
require_relative 'param_validator/
|
|
7
|
+
require_relative 'param_validator/invalid_parameter_error'
|
|
8
|
+
require_relative 'param_validator/parameter'
|
|
9
|
+
require_relative 'param_validator/rule'
|
|
8
10
|
require_relative 'param_validator/snake_case'
|
|
9
11
|
require_relative 'param_validator/validator'
|
|
10
12
|
require_relative 'param_validator/version'
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
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.14.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Rick Selby
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2022-07-
|
|
11
|
+
date: 2022-07-18 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rack-test
|
|
@@ -154,7 +154,6 @@ files:
|
|
|
154
154
|
- lib/sinatra/param_validator/parameter/integer.rb
|
|
155
155
|
- lib/sinatra/param_validator/parameter/string.rb
|
|
156
156
|
- lib/sinatra/param_validator/parameter/time.rb
|
|
157
|
-
- lib/sinatra/param_validator/parser.rb
|
|
158
157
|
- lib/sinatra/param_validator/rule.rb
|
|
159
158
|
- lib/sinatra/param_validator/rule/all_or_none_of.rb
|
|
160
159
|
- lib/sinatra/param_validator/rule/any_of.rb
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'delegate'
|
|
4
|
-
|
|
5
|
-
require_relative 'invalid_parameter_error'
|
|
6
|
-
require_relative 'parameter'
|
|
7
|
-
require_relative 'rule'
|
|
8
|
-
|
|
9
|
-
module Sinatra
|
|
10
|
-
module ParamValidator
|
|
11
|
-
# Run the definition in the given scope
|
|
12
|
-
class Parser < SimpleDelegator
|
|
13
|
-
attr_reader :errors
|
|
14
|
-
|
|
15
|
-
def initialize(context)
|
|
16
|
-
super(context)
|
|
17
|
-
@context = context
|
|
18
|
-
@errors = {}
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def parse(definition, *args)
|
|
22
|
-
instance_exec(*args, &definition)
|
|
23
|
-
|
|
24
|
-
self
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def add_error(key, error)
|
|
28
|
-
@errors[key] = @errors.fetch(key, []).concat(Array(error))
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def param(key, type, default: nil, message: nil, **args, &block)
|
|
32
|
-
parameter = Parameter.new(@context.params[key], type, **args)
|
|
33
|
-
update_params_hash key, parameter, default
|
|
34
|
-
if parameter.valid?
|
|
35
|
-
run_block(key, block) if block
|
|
36
|
-
else
|
|
37
|
-
add_error key, message || parameter.errors
|
|
38
|
-
end
|
|
39
|
-
rescue NameError
|
|
40
|
-
raise 'Invalid parameter type'
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def rule(name, *args, **kwargs)
|
|
44
|
-
rule = Rule.new(name, @context.params, *args, **kwargs)
|
|
45
|
-
unless rule.passes?
|
|
46
|
-
@errors[:rules] ||= []
|
|
47
|
-
@errors[:rules].push(rule.errors)
|
|
48
|
-
end
|
|
49
|
-
rescue NameError
|
|
50
|
-
raise 'Invalid rule type'
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
private
|
|
54
|
-
|
|
55
|
-
def run_block(key, block)
|
|
56
|
-
args = block.arity == 1 ? [self] : []
|
|
57
|
-
@context.instance_exec(*args, &block)
|
|
58
|
-
rescue InvalidParameterError => e
|
|
59
|
-
add_error key, e.message
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
def update_params_hash(key, parameter, default)
|
|
63
|
-
if @context.params.key?(key)
|
|
64
|
-
@context.params[key] = parameter.coerced unless parameter.coerced.nil?
|
|
65
|
-
elsif !default.nil?
|
|
66
|
-
@context.params[key] = default.respond_to?(:call) ? default.call : default
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
end
|
|
70
|
-
end
|
|
71
|
-
end
|