rails_param 1.0.0 → 1.2.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: 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