paramore 3.8.1 → 3.9.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: fb9cb65dc81c466a739cc7a64b97c0a4cefcc34e3307b045344146b03311538e
4
- data.tar.gz: 8705b38d4a047d8fd8bde08f3109419452f752a404a076a90fc4a53fcef3eee8
3
+ metadata.gz: 851431003d956d84bd81e2906e91bf7214dec4e545837ecb993da871b7b3d2db
4
+ data.tar.gz: f58885155ee86529b7e6fe70e3e02b930a4a20c2e47f3c33a46ca82a3809a781
5
5
  SHA512:
6
- metadata.gz: d881d9275da96cbb82100c3e2b3e3928631e2255068950c1d6f7fcddaf5bf01c96eee0d75781a27c2253200551a9c75d9497c420ab653ce1ae28738f3aa83a29
7
- data.tar.gz: 62ce73d067d64d61e244295b03cd93385e4235d85066cb57652946b70e6df28ed2f310f0f5d5c4a5ba53c980cc706677d49ed6516bad93f183e36f6b1ffef162
6
+ metadata.gz: ff41680f998907900897575c33276aa6c11e1027124b7844851996f6969edcac24904b0bc641a55379d47a66ccbab36b0319461b5cd408d570dafe31ae445007
7
+ data.tar.gz: 1184372ed73019ab06d2ad0c27937e42bfcc9c474d7c54abb784a2cd1f7630fc957eb052810d557f7c62699f03cbd49a12be3a21a7ff2ebe25e35df35c49172b
@@ -1,10 +1,21 @@
1
1
  require_relative 'errors'
2
2
 
3
3
  module Paramore
4
- module CastParameters
5
- module_function
6
- def run(field, data)
7
- cast(field, data, 'data')
4
+ class CastParameters
5
+ attr_accessor :root_field, :data, :options
6
+
7
+ def initialize(field, data, options)
8
+ @root_field = field
9
+ @data = data
10
+ @options = options
11
+ end
12
+
13
+ def self.run(field, data, options = {})
14
+ new(field, data, options).run
15
+ end
16
+
17
+ def run
18
+ cast(root_field, data, 'data')
8
19
  end
9
20
 
10
21
  def cast(field, value, name = nil)
@@ -14,6 +25,16 @@ module Paramore
14
25
  else
15
26
  raise Paramore::NilParameter, name
16
27
  end
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
17
38
  end
18
39
 
19
40
  case field.type
@@ -22,17 +43,7 @@ module Paramore
22
43
  when Array
23
44
  typecast_array(field, value, name)
24
45
  else
25
- if value == '' && !field.allow_empty?
26
- if field.default?
27
- field.default
28
- elsif field.nullable?
29
- nil
30
- else
31
- raise Paramore::NilParameter, name
32
- end
33
- else
34
- typecast_value(field.type, value, name)
35
- end
46
+ typecast_value(field.type, value, name)
36
47
  end
37
48
  end
38
49
 
@@ -47,13 +58,17 @@ module Paramore
47
58
  [typecast_value(key_type, name, nil), cast(value_field, value, name)]
48
59
  end
49
60
  else
61
+ if options[:no_extra_keys]
62
+ extra = hash.keys - field.type.keys
63
+ raise "Found extra keys in `name`: #{extra}!"
64
+ end
65
+
50
66
  field
51
67
  .type
52
68
  .reject { |name, value_field| missing_and_optional?(hash, name, value_field) }
53
69
  .to_h { |name, value_field| [name, cast(value_field, hash[name], name)] }
54
70
  end
55
71
 
56
-
57
72
  field.compact? ? result.compact : result
58
73
  end
59
74
 
@@ -69,6 +84,8 @@ module Paramore
69
84
 
70
85
  def typecast_value(type, value, name)
71
86
  type.send(Paramore.configuration.type_method_name, value)
87
+ rescue StandardError => e
88
+ raise "The field `#{name}` raised \"#{e}\"!"
72
89
  end
73
90
 
74
91
  def missing_and_optional?(hash, name, field)
@@ -30,20 +30,33 @@ module Paramore
30
30
  define_method(accessor_name) do |rails_parameters = params|
31
31
  return instance_variable_get("@#{accessor_name}") if instance_variable_defined?("@#{accessor_name}")
32
32
 
33
- if rails_parameters[required_parameter_name].nil? && types_definition.default
33
+ if rails_parameters[required_parameter_name].nil? && types_definition.default?
34
34
  instance_variable_set("@#{accessor_name}", types_definition.default)
35
35
  return instance_variable_get("@#{accessor_name}")
36
36
  end
37
37
 
38
- permitted_params = rails_parameters
39
- .require(required_parameter_name)
40
- .permit(permitted_parameter_argument)
38
+ required_params = rails_parameters.require(required_parameter_name)
39
+ should_permit = permitted_parameter_argument.any? && required_params.is_a?(ActionController::Parameters)
40
+
41
+ permitted_params =
42
+ if should_permit
43
+ required_params.permit(permitted_parameter_argument)
44
+ else
45
+ required_params
46
+ end
41
47
 
42
48
  parameter_values =
43
49
  if types_definition.is_a?(Paramore::Field)
44
- permitted_params.merge(
45
- Paramore::CastParameters.run(types_definition, permitted_params.to_hash.with_indifferent_access)
46
- ).permit!
50
+ if should_permit
51
+ permitted_params.merge(
52
+ Paramore::CastParameters.run(
53
+ types_definition,
54
+ permitted_params.to_hash.with_indifferent_access
55
+ )
56
+ ).permit!
57
+ else
58
+ Paramore::CastParameters.run(types_definition, permitted_params)
59
+ end
47
60
  else
48
61
  permitted_params.permit!
49
62
  end
@@ -6,7 +6,7 @@ module Paramore
6
6
  null: false,
7
7
  compact: false,
8
8
  default: nil,
9
- empty: true,
9
+ empty: false,
10
10
  required: true,
11
11
  }.freeze
12
12
 
@@ -18,6 +18,8 @@ module Paramore
18
18
  module Float
19
19
  module_function
20
20
  def [](input)
21
+ raise ArgumentError "#{input} is not a float!" unless input.to_s.match?(/-{0,1}\d*(\.\d*){0,1}/)
22
+
21
23
  input.to_f
22
24
  end
23
25
  end
@@ -25,6 +27,8 @@ module Paramore
25
27
  module Int
26
28
  module_function
27
29
  def [](input)
30
+ raise ArgumentError "#{input} is not an integer!" unless input.to_s.match?(/^-{0,1}\d*$/)
31
+
28
32
  input.to_i
29
33
  end
30
34
  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.8.1
4
+ version: 3.9.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-10-14 00:00:00.000000000 Z
11
+ date: 2021-12-07 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.8.1 !
118
+ Thank you for installing Paramore 3.9.0 !
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