paramore 3.1.0 → 3.4.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: 9a617acfe047478a8c2082a94ad5151d3701bcc3ba964f1ccb0269242583e7c0
4
- data.tar.gz: ec1c58dd29e93bd0c931d6b9d422c3333888c112a4d6726f7e4833d7f7b90f8f
3
+ metadata.gz: 8e8663a895e1498608035c7717e8a881617d1ba889e67e6115472117717963fc
4
+ data.tar.gz: 3e6b5675baeae13d31abee6f1ed4b77261ed233be87e42a5277ce803f5801c0e
5
5
  SHA512:
6
- metadata.gz: f451b20d3078e38ffd716c8d186206a72e63287eb98a8c2a5832f9e8ced549371b90faf57450e97eb38d31b002f96ea6948af0b61612273624317028ac7fe720
7
- data.tar.gz: 47b62333f92a8f925e2f8d6319a0c23baefa6e97840fc57634323824a05023d651798025981f4ab81764b646a86eaefc21b006ea627b3faba0ea6bd6eee2a451
6
+ metadata.gz: b51afaf562c8671afadd367cdb9388d50b77939d5aaf939cc54f3b00e0046ee8ff218a54c04e29db3979edfb46635a2fb387643dc726c61c513a658c821c9a2a
7
+ data.tar.gz: 24528d33bbb924bfb1c75f7ee24a9c0853ae0c6af357695df0a3e29771a2e6084df26a4259e494d548bac1e26c781b862a5d0b4e1df9a480cdeb515d3e1ceaeb
@@ -4,22 +4,12 @@ module Paramore
4
4
  module CastParameters
5
5
  module_function
6
6
  def run(field, data)
7
- recursive_merge(cast(field, data, 'data'))
8
- end
9
-
10
- def recursive_merge(nested_hash_array)
11
- nested_hash_array.reduce(:merge).map do |name, value|
12
- if value.is_a?(Array) && value.all? { |_value| _value.is_a?(Hash) }
13
- { name => recursive_merge(value) }
14
- else
15
- { name => value }
16
- end
17
- end.reduce(:merge)
7
+ cast(field, data, 'data')
18
8
  end
19
9
 
20
10
  def cast(field, value, name = nil)
21
11
  if value.nil?
22
- if field.nullable? || field.default
12
+ if field.nullable? || field.default?
23
13
  return field.default
24
14
  else
25
15
  raise Paramore::NilParameter, name
@@ -28,24 +18,32 @@ module Paramore
28
18
 
29
19
  case field.type
30
20
  when Hash
31
- typecast_hash(field.type, value || {})
21
+ typecast_hash(field, value || {})
32
22
  when Array
33
23
  typecast_array(field, value)
34
24
  else
35
- typecast_value(field.type, value)
25
+ if value == '' && !field.allow_empty? && field.nullable?
26
+ nil
27
+ else
28
+ typecast_value(field.type, value)
29
+ end
36
30
  end
37
31
  end
38
32
 
39
33
  def typecast_hash(field, hash)
40
- field.map do |name, field|
41
- { name => cast(field, hash[name], name) }
42
- end
34
+ result = field
35
+ .type
36
+ .reject { |name, inner_field| !hash.key?(name) && !inner_field.required? }
37
+ .to_h { |name, inner_field| [name, cast(inner_field, hash[name], name)] }
38
+ field.compact? ? result.compact : result
43
39
  end
44
40
 
45
41
  def typecast_array(field, array)
46
42
  array
47
43
  .reject { |unit| unit.to_s == '' && field.compact? }
48
- .map { |unit| typecast_value(field.type.first, unit) }
44
+ .map do |unit|
45
+ cast(Paramore.field(field.type.first, null: true), unit)
46
+ end
49
47
  end
50
48
 
51
49
  def typecast_value(type, value)
@@ -4,17 +4,33 @@ module Paramore
4
4
  null: false,
5
5
  compact: false,
6
6
  default: nil,
7
+ empty: true,
8
+ required: true,
7
9
  }.freeze
8
10
 
9
- def initialize(given_type, null:, compact:, default:)
11
+ def initialize(given_type, null:, compact:, default:, empty:, required:)
10
12
  @given_type = given_type
11
13
  @nullable = null
12
14
  @compact = compact
15
+ @allow_empty = empty
13
16
  @default = default
17
+ @required = required
18
+ end
19
+
20
+ def required?
21
+ @required
22
+ end
23
+
24
+ def allow_empty?
25
+ @allow_empty
26
+ end
27
+
28
+ def default?
29
+ !@default.nil?
14
30
  end
15
31
 
16
32
  def default
17
- @default
33
+ @default.is_a?(Proc) ? @default.call : @default
18
34
  end
19
35
 
20
36
  def compact?
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.1.0
4
+ version: 3.4.0
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-09-16 00:00:00.000000000 Z
11
+ date: 2021-09-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec-rails
@@ -101,7 +101,7 @@ licenses:
101
101
  - MIT
102
102
  metadata: {}
103
103
  post_install_message: |
104
- Thank you for installing Paramore 3.1.0 !
104
+ Thank you for installing Paramore 3.4.0 !
105
105
  From the command line you can run `paramore` to generate a configuration file
106
106
 
107
107
  More details here : https://github.com/lumzdas/paramore/blob/master/README.md
@@ -120,7 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
120
120
  - !ruby/object:Gem::Version
121
121
  version: '0'
122
122
  requirements: []
123
- rubygems_version: 3.2.3
123
+ rubygems_version: 3.0.8
124
124
  signing_key:
125
125
  specification_version: 4
126
126
  summary: A declarative approach to Rails' strong parameter typing and sanitizing