stronger_parameters 2.10.1 → 2.13.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 +4 -4
- data/README.md +23 -1
- data/lib/stronger_parameters.rb +0 -1
- data/lib/stronger_parameters/constraint.rb +30 -0
- data/lib/stronger_parameters/constraints.rb +1 -0
- data/lib/stronger_parameters/constraints/array_constraint.rb +1 -0
- data/lib/stronger_parameters/constraints/date_time_constraint.rb +0 -2
- data/lib/stronger_parameters/constraints/date_time_iso8601_constraint.rb +12 -0
- data/lib/stronger_parameters/constraints/regexp_constraint.rb +1 -0
- data/lib/stronger_parameters/parameters.rb +20 -9
- data/lib/stronger_parameters/version.rb +1 -1
- metadata +13 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 598d8d30678b80a1fff8224887b69dacd1975b8c3849f123961b3514a643e6e3
|
4
|
+
data.tar.gz: d80b6fa97333c507ab7e2282ed78e22260c352f528d50f434340afdd206b2c3a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b8f5201eeb8a1eb53a58f6eaacae23d40f08dcdb28da8ba9c650f607c19d126e5eea951a788fedc6cd82f0b4e9a020385952662ea6f44655f65e0c992e89b6e4
|
7
|
+
data.tar.gz: 932b7e76c8d86afefe1aa9d5cfdbf9af19ea2f784ed678e469bebde5761cd6317fd39075e86a029cc13ed5f2ce1a4fe3221775c48f4ff765db30e86e74593bfe
|
data/README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# stronger_parameters
|
2
|
-
|
2
|
+

|
3
3
|
|
4
4
|
This is an extension of `strong_parameters` with added type checking and conversion.
|
5
5
|
|
@@ -32,6 +32,27 @@ Rails converts empty arrays to nil, so often `Parameters.array | Parameters.nil`
|
|
32
32
|
It can be convenient to allow nil for all attributes since ActiveRecord converts it to false/0.
|
33
33
|
`ActionController::Parameters.allow_nil_for_everything = true`
|
34
34
|
|
35
|
+
### Rejecting nils
|
36
|
+
|
37
|
+
You can reject a request that fails to supply certain parameters by marking them
|
38
|
+
as required with the `.required` operator:
|
39
|
+
|
40
|
+
```ruby
|
41
|
+
params.permit(
|
42
|
+
name: Parameters.string.required, # will not accept a nil or a non-String
|
43
|
+
email: Parameters.string # optional, may be omitted
|
44
|
+
)
|
45
|
+
```
|
46
|
+
|
47
|
+
This also works in conjunction with the `&` and `|` constraints. For example, to
|
48
|
+
express that a `uid` must be either a string or a number:
|
49
|
+
|
50
|
+
```ruby
|
51
|
+
params.permit(
|
52
|
+
uid: (Parameters.string | Parameters.integer).required
|
53
|
+
)
|
54
|
+
```
|
55
|
+
|
35
56
|
## Nested Parameters
|
36
57
|
|
37
58
|
```ruby
|
@@ -228,6 +249,7 @@ curl -I 'http://localhost/api/users/1.json' -X POST -d '{ "user": { "id": 1 } }'
|
|
228
249
|
| Parameters.integer | value.is_a?(Fixnum) or '-1' |
|
229
250
|
| Parameters.float | value.is_a?(Float) or '-1.2' |
|
230
251
|
| Parameters.datetime | value.is_a?(DateTime) or '2014-05-13' or '2015-03-31T14:34:56Z' |
|
252
|
+
| Parameters.datetime_iso8601 | value is a date that conforms to ISO8601: '2014-05-13' or '2015-03-31T14:34:56Z' |
|
231
253
|
| Parameters.regexp(/foo/) | value =~ regexp |
|
232
254
|
| Parameters.enum('asc', 'desc') | ['asc', 'desc'].include?(value) |
|
233
255
|
| Parameters.lt(10) | value < 10 |
|
data/lib/stronger_parameters.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
require 'stronger_parameters/version'
|
3
3
|
require 'action_pack'
|
4
|
-
require 'strong_parameters' if ActionPack::VERSION::MAJOR == 3
|
5
4
|
require 'stronger_parameters/parameters'
|
6
5
|
require 'stronger_parameters/constraints'
|
7
6
|
require 'stronger_parameters/controller_support/permitted_parameters'
|
@@ -18,6 +18,14 @@ module StrongerParameters
|
|
18
18
|
def ==(other)
|
19
19
|
self.class == other.class
|
20
20
|
end
|
21
|
+
|
22
|
+
def required
|
23
|
+
RequiredConstraint.new(self)
|
24
|
+
end
|
25
|
+
|
26
|
+
def required?
|
27
|
+
false
|
28
|
+
end
|
21
29
|
end
|
22
30
|
|
23
31
|
class OrConstraint < Constraint
|
@@ -50,6 +58,10 @@ module StrongerParameters
|
|
50
58
|
def ==(other)
|
51
59
|
super && constraints == other.constraints
|
52
60
|
end
|
61
|
+
|
62
|
+
def required?
|
63
|
+
constraints.all?(&:required?)
|
64
|
+
end
|
53
65
|
end
|
54
66
|
|
55
67
|
class AndConstraint < Constraint
|
@@ -75,5 +87,23 @@ module StrongerParameters
|
|
75
87
|
def ==(other)
|
76
88
|
super && constraints == other.constraints
|
77
89
|
end
|
90
|
+
|
91
|
+
def required?
|
92
|
+
constraints.any?(&:required?)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
class RequiredConstraint < Constraint
|
97
|
+
def initialize(other)
|
98
|
+
@other = other
|
99
|
+
end
|
100
|
+
|
101
|
+
def value(v)
|
102
|
+
@other.value(v)
|
103
|
+
end
|
104
|
+
|
105
|
+
def required?
|
106
|
+
true
|
107
|
+
end
|
78
108
|
end
|
79
109
|
end
|
@@ -3,6 +3,7 @@ require 'stronger_parameters/constraint'
|
|
3
3
|
require 'stronger_parameters/constraints/string_constraint'
|
4
4
|
require 'stronger_parameters/constraints/float_constraint'
|
5
5
|
require 'stronger_parameters/constraints/date_time_constraint'
|
6
|
+
require 'stronger_parameters/constraints/date_time_iso8601_constraint'
|
6
7
|
require 'stronger_parameters/constraints/regexp_constraint'
|
7
8
|
require 'stronger_parameters/constraints/integer_constraint'
|
8
9
|
require 'stronger_parameters/constraints/nil_constraint'
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'stronger_parameters/constraint'
|
3
|
+
|
4
|
+
module StrongerParameters
|
5
|
+
class DateTimeIso8601Constraint < Constraint
|
6
|
+
def value(v)
|
7
|
+
DateTime.iso8601 v
|
8
|
+
rescue ArgumentError, TypeError
|
9
|
+
StrongerParameters::InvalidValue.new(v, "must be an iso8601 date")
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -1,12 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
require 'action_pack'
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
else
|
7
|
-
require 'action_controller/base'
|
8
|
-
require 'action_controller/metal/strong_parameters'
|
9
|
-
end
|
4
|
+
require 'action_controller/base'
|
5
|
+
require 'action_controller/metal/strong_parameters'
|
10
6
|
|
11
7
|
require 'stronger_parameters/constraints'
|
12
8
|
require 'stronger_parameters/errors'
|
@@ -112,6 +108,10 @@ module StrongerParameters
|
|
112
108
|
DateTimeConstraint.new
|
113
109
|
end
|
114
110
|
|
111
|
+
def datetime_iso8601
|
112
|
+
DateTimeIso8601Constraint.new
|
113
|
+
end
|
114
|
+
|
115
115
|
def file
|
116
116
|
FileConstraint.new
|
117
117
|
end
|
@@ -139,14 +139,25 @@ module StrongerParameters
|
|
139
139
|
|
140
140
|
hash_filter_without_stronger_parameters(params, other_filter)
|
141
141
|
|
142
|
-
|
142
|
+
stronger_filter.keys.each do |key|
|
143
|
+
value = fetch(key, nil)
|
144
|
+
result = nil
|
145
|
+
|
143
146
|
if value.nil? && self.class.allow_nil_for_everything
|
144
|
-
params[key] = nil
|
147
|
+
params[key] = nil if key?(key)
|
145
148
|
next
|
146
149
|
end
|
147
150
|
|
148
151
|
constraint = stronger_filter[key]
|
149
|
-
|
152
|
+
|
153
|
+
if key?(key)
|
154
|
+
result = constraint.value(value)
|
155
|
+
elsif constraint.required?
|
156
|
+
result = InvalidValue.new(nil, 'must be present')
|
157
|
+
else
|
158
|
+
next
|
159
|
+
end
|
160
|
+
|
150
161
|
if result.is_a?(InvalidValue)
|
151
162
|
name = "invalid_parameter.action_controller"
|
152
163
|
ActiveSupport::Notifications.publish(name, key: key, value: value, message: result.message)
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stronger_parameters
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.13.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mick Staugaard
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-12-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "<="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '3'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "<="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '3'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,20 +94,6 @@ dependencies:
|
|
94
94
|
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: wwtd
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - ">="
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '0'
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - ">="
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '0'
|
111
97
|
- !ruby/object:Gem::Dependency
|
112
98
|
name: bump
|
113
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -170,20 +156,20 @@ dependencies:
|
|
170
156
|
requirements:
|
171
157
|
- - ">="
|
172
158
|
- !ruby/object:Gem::Version
|
173
|
-
version: '
|
159
|
+
version: '4.2'
|
174
160
|
- - "<"
|
175
161
|
- !ruby/object:Gem::Version
|
176
|
-
version: '
|
162
|
+
version: '6.2'
|
177
163
|
type: :runtime
|
178
164
|
prerelease: false
|
179
165
|
version_requirements: !ruby/object:Gem::Requirement
|
180
166
|
requirements:
|
181
167
|
- - ">="
|
182
168
|
- !ruby/object:Gem::Version
|
183
|
-
version: '
|
169
|
+
version: '4.2'
|
184
170
|
- - "<"
|
185
171
|
- !ruby/object:Gem::Version
|
186
|
-
version: '
|
172
|
+
version: '6.2'
|
187
173
|
description:
|
188
174
|
email:
|
189
175
|
- mick@zendesk.com
|
@@ -199,6 +185,7 @@ files:
|
|
199
185
|
- lib/stronger_parameters/constraints/boolean_constraint.rb
|
200
186
|
- lib/stronger_parameters/constraints/comparison_constraints.rb
|
201
187
|
- lib/stronger_parameters/constraints/date_time_constraint.rb
|
188
|
+
- lib/stronger_parameters/constraints/date_time_iso8601_constraint.rb
|
202
189
|
- lib/stronger_parameters/constraints/decimal_constraint.rb
|
203
190
|
- lib/stronger_parameters/constraints/enumeration_constraint.rb
|
204
191
|
- lib/stronger_parameters/constraints/file_constraint.rb
|
@@ -226,15 +213,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
226
213
|
requirements:
|
227
214
|
- - ">="
|
228
215
|
- !ruby/object:Gem::Version
|
229
|
-
version: 2.
|
216
|
+
version: 2.5.0
|
230
217
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
231
218
|
requirements:
|
232
219
|
- - ">="
|
233
220
|
- !ruby/object:Gem::Version
|
234
221
|
version: '0'
|
235
222
|
requirements: []
|
236
|
-
|
237
|
-
rubygems_version: 2.7.6
|
223
|
+
rubygems_version: 3.1.3
|
238
224
|
signing_key:
|
239
225
|
specification_version: 4
|
240
226
|
summary: Type checking and type casting of parameters for Action Pack
|