rails_param 1.0.1 → 1.3.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: e0433392677737954501a0577b9dc911b61ae536c3df0debc8a57e7afc33caf5
4
- data.tar.gz: 00f9a773e1225ea1be8dde2ff33869f1004d5bb2827781ec76b58dea0fe53fac
3
+ metadata.gz: f7548ff9d3a5851e52153ea5ad00840da23b245a5f03605d1bdd15e4f252f229
4
+ data.tar.gz: 0dfb6578fbf82389851427104d7489ee9341afc614e2556bb93f00951a9222ad
5
5
  SHA512:
6
- metadata.gz: 141eab82b37de3c01cc8257e203de5ebc2423aeada6e37b28acef706b61477eba9149fed47c045c447b0ed93d85e1868125f519cd5207bfa3b780eb30f72d850
7
- data.tar.gz: 5afa1e7b4a2293de09e703bf07628cac2030fca5e975d07e66d3813edbfaa79500b428ee94e8d7d409b99f0093e055e79df2c1687405d7b0cf3e91d7293fea17
6
+ metadata.gz: 169efbc2ce24496da87055af5708d4ca70adb0855ae2a8a3f57bd7138809073a51ce2af68d7d77562447f07ced60eb4aab2dc671678290eaa6a885d1c7d08cc0
7
+ data.tar.gz: f472e6a6b81699ccd7ecd10c69a91de5451e2f9ab4e94d93060faebcffbe8472ee34aa02aa7c290ed014c1d4afbb3b842b8904985d93ecfadba6f31cba6bb3b2
@@ -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
@@ -1,3 +1,3 @@
1
1
  module RailsParam #:nodoc
2
- VERSION = "1.0.1"
2
+ VERSION = "1.3.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.1
4
+ version: 1.3.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-28 00:00:00.000000000 Z
11
+ date: 2022-01-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -45,7 +45,7 @@ dependencies:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: 3.2.0
48
- type: :development
48
+ type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
@@ -54,20 +54,6 @@ dependencies:
54
54
  version: 3.2.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: activesupport
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: 3.2.0
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: 3.2.0
69
- - !ruby/object:Gem::Dependency
70
- name: rails
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
59
  - - ">="