paramore 3.9.2 → 3.9.3

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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/paramore/cast_parameters.rb +39 -35
  3. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3ecad97758f06ed4c9666cc21dff1f109c96f99af568dc748909bc860d98e342
4
- data.tar.gz: 8391f84447ff31b61a715fda75ea51da38055d36d33ea8326627d0414a738e4b
3
+ metadata.gz: b1e0c787e647893bfc2aff716c26dc1451de26f947e372106e1888776926e22d
4
+ data.tar.gz: 79a9c035350ec1519c5a1ca546fbaca6c30c97047f101fc94bbdd4eccf1cf593
5
5
  SHA512:
6
- metadata.gz: d67a468476d57a80b2f0961ec02343b518cc01f3c5f2a68ebd46aafc41279ec7ed07d75c466e4a3a4e5e5e633637bee92cecea215d412defd91852346b7c426a
7
- data.tar.gz: b4ad88a4893c0365e2e805cbfac035ae26566c96fcddf86a4361931906c57bb4d9f98cbd6f8b412faa601da091222b9cfd1dfd3004b2326886413059ced5cd78
6
+ metadata.gz: 63fa1693e3a7031ed28af6c9eb0d7f960cd1f42562325e4f5bef6e38bb4231f1708b9923872f5d1cb36de17a2cdff2a2556bba850f6d62ceacde007f418bd82c
7
+ data.tar.gz: ac1f5eff659d7bbcfb0a723ea4d5a216486e805744aef060780e8d799ac1c859e3111bd0e8b9a52cd71388a7594fe396598ed70c2f28f7eff9135dc4017ab03c
@@ -15,81 +15,85 @@ module Paramore
15
15
  end
16
16
 
17
17
  def run
18
- cast(root_field, data, 'data')
18
+ cast(root_field, data, 'root')
19
19
  end
20
20
 
21
- def cast(field, value, name = nil)
21
+ def cast(field, value, key, namespace = nil)
22
+ full_name = [namespace, key].compact.join('.')
23
+
22
24
  if value.nil?
23
- if field.nullable? || field.default?
24
- return field.default
25
- else
26
- raise Paramore::NilParameter, name
27
- end
25
+ return field.default if field.nullable? || field.default?
26
+
27
+ raise Paramore::NilParameter, full_name
28
28
  elsif value == ''
29
- if field.allow_empty?
30
- return typecast_value(field.type, '', name)
31
- elsif field.default?
32
- return field.default
33
- elsif field.nullable?
34
- return
35
- else
36
- raise Paramore::NilParameter, name
37
- end
29
+ return typecast_value(field.type, '', key, full_name) if field.allow_empty?
30
+ return field.default if field.default?
31
+ return if field.nullable?
32
+
33
+ raise Paramore::NilParameter, full_name
38
34
  end
39
35
 
40
36
  case field.type
41
37
  when Hash
42
- typecast_hash(field, value || {}, name)
38
+ typecast_hash(field, value || {}, key, full_name)
43
39
  when Array
44
- typecast_array(field, value, name)
40
+ typecast_array(field, value, key, full_name)
45
41
  else
46
- typecast_value(field.type, value, name)
42
+ typecast_value(field.type, value, key, full_name)
47
43
  end
48
44
  end
49
45
 
50
- def typecast_hash(field, hash, name)
51
- raise Paramore::HashExpected.new(name, hash) unless hash.is_a?(Hash)
46
+ def typecast_hash(field, hash, key, full_name)
47
+ raise Paramore::HashExpected.new(full_name, hash) unless hash.is_a?(Hash)
52
48
 
53
49
  result =
54
50
  if field.wildly_keyed_hash?
55
- value_field = field.type.values.first
56
- key_type = field.type.keys.first
57
- hash.to_h do |name, value|
58
- [typecast_value(key_type, name, nil), cast(value_field, value, name)]
51
+ [field.type.values.first, field.type.keys.first].then do |value_field, key_type|
52
+ hash.to_h do |inner_key, value|
53
+ [
54
+ typecast_value(key_type, inner_key, nil, nil),
55
+ cast(value_field, value, inner_key, full_name)
56
+ ]
57
+ end
59
58
  end
60
59
  else
61
60
  if options[:no_extra_keys]
62
61
  extra = hash.keys - field.type.keys
63
- raise "Found extra keys in `#{name}`: #{extra}!" if extra.size > 0
62
+ raise "Found extra keys in `#{full_name}`: #{extra}!" if extra.any?
64
63
  end
65
64
 
66
65
  field
67
66
  .type
68
- .reject { |name, value_field| missing_and_optional?(hash, name, value_field) }
69
- .to_h { |name, value_field| [name, cast(value_field, hash[name], name)] }
67
+ .reject { |inner_key, value_field| missing_and_optional?(hash, inner_key, value_field) }
68
+ .to_h do |inner_key, value_field|
69
+ [
70
+ inner_key,
71
+ cast(value_field, hash[inner_key], inner_key, full_name)
72
+ ]
73
+ end
70
74
  end
71
75
 
72
76
  field.compact? ? result.compact : result
73
77
  end
74
78
 
75
- def typecast_array(field, array, name)
76
- raise Paramore::ArrayExpected.new(name, array) unless array.is_a?(Array)
79
+ def typecast_array(field, array, key, full_name)
80
+ raise Paramore::ArrayExpected.new(full_name, array) unless array.is_a?(Array)
77
81
 
78
82
  result = array
79
83
  .reject { |unit| unit.to_s == '' && field.compact? }
80
- .map { |unit| cast(Paramore.field(field.type.first, null: true), unit) }
84
+ .map { |unit| cast(Paramore.field(field.type.first, null: true), unit, nil, full_name) }
81
85
 
82
86
  field.compact? ? result.compact : result
83
87
  end
84
88
 
85
- def typecast_value(type, value, name)
89
+ def typecast_value(type, value, key, full_name)
86
90
  type.send(Paramore.configuration.type_method_name, value)
87
91
  rescue StandardError => e
88
- raise "The field `#{name}` raised \"#{e}\"!"
92
+ raise "The field `#{full_name}` raised \"#{e}\"!"
89
93
  end
90
94
 
91
- def missing_and_optional?(hash, name, field)
92
- !hash.key?(name) && !field.required?
95
+ def missing_and_optional?(hash, key, field)
96
+ !hash.key?(key) && !field.required?
93
97
  end
94
98
  end
95
99
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: paramore
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.9.2
4
+ version: 3.9.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lukas Kairevičius
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-12-07 00:00:00.000000000 Z
11
+ date: 2021-12-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec-rails
@@ -115,7 +115,7 @@ licenses:
115
115
  - MIT
116
116
  metadata: {}
117
117
  post_install_message: |
118
- Thank you for installing Paramore 3.9.2 !
118
+ Thank you for installing Paramore 3.9.3 !
119
119
  From the command line you can run `paramore` to generate a configuration file
120
120
 
121
121
  More details here : https://github.com/lumzdas/paramore/blob/master/README.md