sinatra-param-validator 0.11.0 → 0.14.0

Sign up to get free protection for your applications and to get access to all the features.
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