sinatra-param-validator 0.13.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 +6 -0
- data/Gemfile.lock +1 -1
- 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 +3 -1
- data/lib/sinatra/param_validator/version.rb +1 -1
- data/lib/sinatra/param_validator.rb +3 -1
- metadata +1 -2
- data/lib/sinatra/param_validator/parser.rb +0 -73
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,11 @@
|
|
|
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
|
+
|
|
3
9
|
## [0.13.0] - 2022-07-15
|
|
4
10
|
|
|
5
11
|
- Capture `InvalidParameterError`s raised when running the parser
|
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,9 @@ 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)
|
|
20
22
|
rescue InvalidParameterError => e
|
|
21
23
|
@errors[:general] = [e.message]
|
|
22
24
|
end
|
|
@@ -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,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.14.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Rick Selby
|
|
@@ -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,73 +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
|
-
# Methods to add to the context for handling parameters
|
|
12
|
-
module ValidatorMethods
|
|
13
|
-
def _add_error(key, error)
|
|
14
|
-
@__validator_errors[key] = @__validator_errors.fetch(key, []).concat(Array(error))
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def param(key, type, default: nil, message: nil, **args, &block)
|
|
18
|
-
parameter = Parameter.new(params[key], type, **args)
|
|
19
|
-
_update_params_hash key, parameter, default
|
|
20
|
-
if parameter.valid?
|
|
21
|
-
_run_block(key, block) if block
|
|
22
|
-
else
|
|
23
|
-
_add_error key, message || parameter.errors
|
|
24
|
-
end
|
|
25
|
-
rescue NameError
|
|
26
|
-
raise 'Invalid parameter type'
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def rule(name, *args, **kwargs)
|
|
30
|
-
rule = Rule.new(name, params, *args, **kwargs)
|
|
31
|
-
unless rule.passes?
|
|
32
|
-
@__validator_errors[:rules] ||= []
|
|
33
|
-
@__validator_errors[:rules].push(rule.errors)
|
|
34
|
-
end
|
|
35
|
-
rescue NameError
|
|
36
|
-
raise 'Invalid rule type'
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def _run_block(key, block)
|
|
40
|
-
args = block.arity == 1 ? [self] : []
|
|
41
|
-
instance_exec(*args, &block)
|
|
42
|
-
rescue InvalidParameterError => e
|
|
43
|
-
_add_error key, e.message
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def _update_params_hash(key, parameter, default)
|
|
47
|
-
if params.key?(key)
|
|
48
|
-
params[key] = parameter.coerced unless parameter.coerced.nil?
|
|
49
|
-
elsif !default.nil?
|
|
50
|
-
params[key] = default.respond_to?(:call) ? default.call : default
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
# Run the definition in the given scope
|
|
56
|
-
class Parser
|
|
57
|
-
attr_reader :errors
|
|
58
|
-
|
|
59
|
-
def initialize(context)
|
|
60
|
-
@context = context
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
def parse(definition, *args)
|
|
64
|
-
@context.extend(ValidatorMethods)
|
|
65
|
-
@context.instance_variable_set(:@__validator_errors, {})
|
|
66
|
-
@context.instance_exec(*args, &definition)
|
|
67
|
-
@errors = @context.instance_variable_get(:@__validator_errors)
|
|
68
|
-
|
|
69
|
-
self
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
end
|