rails_param 1.0.1 → 1.3.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: 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
  - - ">="