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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5b9804f13269515b113bb73dfe65c20304145df75e20d00f41ed0c231d6fd99e
4
- data.tar.gz: c0c522b2ad74c5c376a302ca4b9d141f981df498e42239fc1baa45baaab77e70
3
+ metadata.gz: 2f94e83b8a50e45743393eff54f46c692095fbad50942f68e047713b55397512
4
+ data.tar.gz: 1394c62c964ad2e4bc51dbd44abf98313757babbbe13748c09f32dc2a2e8863d
5
5
  SHA512:
6
- metadata.gz: 321cd999434f06ed80943b059aabe476745981d84f0446a247691fea1e836cbdbb011ce8adabe3278f43c5ecfc248f59b603f39aa187e332188531d1030130f0
7
- data.tar.gz: e7a9052b36681fe7f84e5b6b519f04db2ea915008511a23027ffa7c0134d9458e9df08b3f356507d149eda4f63c2ea4773c63dbb0acf90f9014a99c3d7a38635
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
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sinatra-param-validator (0.11.0)
4
+ sinatra-param-validator (0.14.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -85,4 +85,4 @@ DEPENDENCIES
85
85
  sinatra-param-validator!
86
86
 
87
87
  BUNDLED WITH
88
- 2.3.16
88
+ 2.3.17
@@ -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
@@ -15,6 +15,7 @@ module Sinatra
15
15
 
16
16
  def coerce(value)
17
17
  return nil if value.nil?
18
+ return value if value.is_a? ::Date
18
19
 
19
20
  ::Date.parse(value)
20
21
  end
@@ -14,6 +14,7 @@ module Sinatra
14
14
 
15
15
  def coerce(value)
16
16
  return nil if value.nil?
17
+ return value if value.is_a? ::Integer
17
18
 
18
19
  Integer(value, 10)
19
20
  end
@@ -15,6 +15,7 @@ module Sinatra
15
15
 
16
16
  def coerce(value)
17
17
  return nil if value.nil?
18
+ return value if value.is_a? ::Time
18
19
 
19
20
  ::Time.parse(value)
20
21
  end
@@ -16,7 +16,11 @@ module Sinatra
16
16
  end
17
17
 
18
18
  def run(context, *args)
19
- @errors = Parser.new(context).parse(@definition, *args).errors
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?
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Sinatra
4
4
  module ParamValidator
5
- VERSION = '0.11.0'
5
+ VERSION = '0.14.0'
6
6
  end
7
7
  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/parser'
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.11.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-15 00:00:00.000000000 Z
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