rails_param 1.0.0 → 1.2.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: d0d3e366d59b97f9e8453e2721f975afe0cbed9b29de26c35e786552707a3586
4
- data.tar.gz: ed1a7c052cd69b75e2551cce07c2004094b0b95307490d72b88185a0da693c79
3
+ metadata.gz: a28d7334766ecd5031f21b67d72d5e5b40441ba8494da496cc64a192401fccfc
4
+ data.tar.gz: 3ce0095c900ba61a7fe864cb175f19c5cf2a0decc50bfdbc038a3cd6c3b686a1
5
5
  SHA512:
6
- metadata.gz: f70757e8463748ec31be8f61176a80fb1da2460af184c8a096a2abf928cf1c3507d77290e4a7f38f979829bad259e850afc4a1f0c31fd0f5bcd3fccad46834f4
7
- data.tar.gz: 12074dad3f21ba4d0e1afd8bbc9db9ad827486dbe014f930c89d7fcc07ebed7c192da0aa31fe8b85041947541e1410d600d7ee630a5128522fc4da98b8bfd809
6
+ metadata.gz: 18c1d4e654c0ca5907452f40dbe89291b90772cdd822e900cb10a243a45bcdb35568daf62522b9537ef514fc4da3f19ea471f75ea55c450977d2fbcf8bc796c9
7
+ data.tar.gz: e09a3c0ae114cfda47ce329349934580ffa87f4976934ceb27ae0c2c07858131330aeea47ac41c821b736f2004b5a791616f01a21bf1c0aff8e50fcea3a9899a
@@ -2,22 +2,20 @@ module RailsParam
2
2
  class ParamEvaluator
3
3
  attr_accessor :params
4
4
 
5
- def initialize(params)
5
+ def initialize(params, context = nil)
6
6
  @params = params
7
+ @context = context
7
8
  end
8
9
 
9
10
  def param!(name, type, options = {}, &block)
10
11
  name = name.is_a?(Integer)? name : name.to_s
11
12
  return unless params.include?(name) || check_param_presence?(options[:default]) || options[:required]
12
13
 
13
- # coerce value
14
- coerced_value = coerce(
15
- params[name],
16
- type,
17
- options
18
- )
14
+ parameter_name = @context ? "#{@context}[#{name}]" : name
15
+ coerced_value = coerce(params[name], type, options)
16
+
19
17
  parameter = RailsParam::Parameter.new(
20
- name: name,
18
+ name: parameter_name,
21
19
  value: coerced_value,
22
20
  type: type,
23
21
  options: options,
@@ -29,8 +27,8 @@ module RailsParam
29
27
  # validate presence
30
28
  if params[name].nil? && options[:required]
31
29
  raise InvalidParameterError.new(
32
- "Parameter #{name} is required",
33
- param: name,
30
+ "Parameter #{parameter_name} is required",
31
+ param: parameter_name,
34
32
  options: options
35
33
  )
36
34
  end
@@ -50,23 +48,25 @@ module RailsParam
50
48
  private
51
49
 
52
50
  def recurse_on_parameter(parameter, &block)
51
+ return if parameter.value.nil?
52
+
53
53
  if parameter.type == Array
54
54
  parameter.value.each_with_index do |element, i|
55
55
  if element.is_a?(Hash) || element.is_a?(ActionController::Parameters)
56
- recurse element, &block
56
+ recurse element, "#{parameter.name}[#{i}]", &block
57
57
  else
58
- parameter.value[i] = recurse({ i => element }, i, &block) # supply index as key unless value is hash
58
+ parameter.value[i] = recurse({ i => element }, parameter.name, i, &block) # supply index as key unless value is hash
59
59
  end
60
60
  end
61
61
  else
62
- recurse parameter.value, &block
62
+ recurse parameter.value, parameter.name, &block
63
63
  end
64
64
  end
65
65
 
66
- def recurse(element, index = nil)
66
+ def recurse(element, context, index = nil)
67
67
  raise InvalidParameterError, 'no block given' unless block_given?
68
68
 
69
- yield(ParamEvaluator.new(element), index)
69
+ yield(ParamEvaluator.new(element, context), index)
70
70
  end
71
71
 
72
72
  def check_param_presence? param
@@ -75,6 +75,7 @@ module RailsParam
75
75
 
76
76
  def coerce(param, type, options = {})
77
77
  begin
78
+ return nil if param.nil?
78
79
  return param if (param.is_a?(type) rescue false)
79
80
 
80
81
  Coercion.new(param, type, options).coerce
@@ -4,7 +4,7 @@ module RailsParam
4
4
  private
5
5
 
6
6
  def valid_value?
7
- value.present? && options[:required]
7
+ !(value.nil? && options[:required])
8
8
  end
9
9
 
10
10
  def error_message
@@ -1,3 +1,3 @@
1
1
  module RailsParam #:nodoc
2
- VERSION = "1.0.0"
2
+ VERSION = "1.2.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_param
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nicolas Blanco
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-09-27 00:00:00.000000000 Z
11
+ date: 2021-12-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec