paramore 3.8.1 → 3.9.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: 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