weak_parameters 0.1.7 → 0.2.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/CHANGELOG.md +3 -0
- data/lib/weak_parameters/base_validator.rb +9 -0
- data/lib/weak_parameters/controller.rb +4 -0
- data/lib/weak_parameters/list_validator.rb +10 -0
- data/lib/weak_parameters/object_validator.rb +10 -0
- data/lib/weak_parameters/validator.rb +4 -0
- data/lib/weak_parameters/version.rb +1 -1
- data/spec/dummy/app/controllers/strongs_controller.rb +57 -0
- data/spec/dummy/config/routes.rb +1 -0
- data/spec/requests/strong_spec.rb +100 -0
- metadata +5 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ce72b5b0bbcb84e9bb99010f8d173ba34441a15a
|
4
|
+
data.tar.gz: 6b4ae1fff602fd5788c9bcaa757e31026650ce72
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 68fa4f22e20c97547cc4bcf47232e10e26046e56c85ce2fd6572b07b4cd49c40bd74b00d7c6ba87a18274930062a3ad0c1cd971870ce303bd3494a9bc8783bfd
|
7
|
+
data.tar.gz: 874e969e4eefe923012c0c66a7e293c69e65661504bdbc625ed202d1c666a580db2664d97d4102f565f3b9b770d153ce3fe9252ca387fe53a5ac2905b11ae316
|
data/CHANGELOG.md
CHANGED
@@ -19,6 +19,10 @@ module WeakParameters
|
|
19
19
|
!!options[:required]
|
20
20
|
end
|
21
21
|
|
22
|
+
def strong?
|
23
|
+
!!options[:strong]
|
24
|
+
end
|
25
|
+
|
22
26
|
def type
|
23
27
|
self.class.name.split("::").last.sub(/Validator$/, "").underscore.to_sym
|
24
28
|
end
|
@@ -27,6 +31,11 @@ module WeakParameters
|
|
27
31
|
path[-1]
|
28
32
|
end
|
29
33
|
|
34
|
+
def strong_params(*path)
|
35
|
+
@path = path
|
36
|
+
exist? && strong? ? {key => value} : {}
|
37
|
+
end
|
38
|
+
|
30
39
|
private
|
31
40
|
|
32
41
|
def valid?
|
@@ -5,7 +5,11 @@ module WeakParameters
|
|
5
5
|
validator = WeakParameters::Validator.new(self, &block)
|
6
6
|
WeakParameters.stats[params[:controller]][params[:action]] = validator
|
7
7
|
WeakParameters.stats[params[:controller]][params[:action]].validate
|
8
|
+
if Object.const_defined?(:ActionController) && ActionController.const_defined?(:StrongParameters)
|
9
|
+
@permitted_params = validator.strong_params.permit!
|
10
|
+
end
|
8
11
|
end
|
12
|
+
define_method(:permitted_params) { @permitted_params }
|
9
13
|
end
|
10
14
|
end
|
11
15
|
end
|
@@ -16,6 +16,16 @@ module WeakParameters
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
+
def strong_params(*args)
|
20
|
+
super
|
21
|
+
|
22
|
+
return {} unless exist?
|
23
|
+
strong_values = value.map.with_index do |_, i|
|
24
|
+
validator.strong_params(*path, i)[i]
|
25
|
+
end.compact
|
26
|
+
strong_values.present? ? { key => strong_values } : {}
|
27
|
+
end
|
28
|
+
|
19
29
|
def validators
|
20
30
|
[ validator ]
|
21
31
|
end
|
@@ -16,6 +16,16 @@ module WeakParameters
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
+
def strong_params(*args)
|
20
|
+
super
|
21
|
+
|
22
|
+
strong_values = validators.map do |validator|
|
23
|
+
validator.strong_params(*path)
|
24
|
+
end.inject(ActionController::Parameters.new, &:merge)
|
25
|
+
return {} if strong_values.blank?
|
26
|
+
{ key => strong_values }
|
27
|
+
end
|
28
|
+
|
19
29
|
private
|
20
30
|
|
21
31
|
def valid?
|
@@ -0,0 +1,57 @@
|
|
1
|
+
class StrongsController < ApplicationController
|
2
|
+
validates :create do
|
3
|
+
any :object
|
4
|
+
any :strong_object, strong: true
|
5
|
+
string :name, required: true, except: %w[invalid wrong]
|
6
|
+
string :strong_name, required: true, strong: true, except: %w[invalid wrong]
|
7
|
+
integer :type, only: 0..3
|
8
|
+
integer :strong_type, strong: true, only: 0..3
|
9
|
+
integer :number, only: [0, 1]
|
10
|
+
integer :strong_number, strong: true, only: [0, 1]
|
11
|
+
boolean :flag
|
12
|
+
boolean :strong_flag, strong: true
|
13
|
+
hash :config
|
14
|
+
hash :strong_config, strong: true
|
15
|
+
array :tags
|
16
|
+
array :strong_tags, strong: true
|
17
|
+
float :rate
|
18
|
+
float :strong_rate, strong: true
|
19
|
+
file :attachment
|
20
|
+
file :strong_attachment, strong: true
|
21
|
+
integer :custom, only: 0..1, handler: :render_error
|
22
|
+
integer :strong_custom, strong: true, only: 0..1, handler: :render_error
|
23
|
+
string :zip_code do |value|
|
24
|
+
value =~ /\A\d{3}-\d{4}\z/
|
25
|
+
end
|
26
|
+
string :strong_zip_code, strong: true do |value|
|
27
|
+
value =~ /\A\d{3}-\d{4}\z/
|
28
|
+
end
|
29
|
+
object :nested, required: true do
|
30
|
+
integer :number, only: [0, 1]
|
31
|
+
end
|
32
|
+
object :strong_nested, required: true do
|
33
|
+
integer :strong_number, strong: true, only: [0, 1]
|
34
|
+
end
|
35
|
+
|
36
|
+
list :numbers, :integer, description: 'some numbers'
|
37
|
+
|
38
|
+
list :strong_numbers, :integer, strong: true, description: 'some numbers'
|
39
|
+
|
40
|
+
object :strong_body do
|
41
|
+
list :items, :object, description: 'some items' do
|
42
|
+
string :name
|
43
|
+
integer :strong_price, strong: true
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def create
|
49
|
+
head 201
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
|
54
|
+
def render_error
|
55
|
+
head 403
|
56
|
+
end
|
57
|
+
end
|
data/spec/dummy/config/routes.rb
CHANGED
@@ -0,0 +1,100 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe "Strong", type: :request do
|
4
|
+
let(:params) do
|
5
|
+
{
|
6
|
+
object: [1],
|
7
|
+
strong_object: [1],
|
8
|
+
name: "name",
|
9
|
+
strong_name: "name",
|
10
|
+
number: 0,
|
11
|
+
strong_number: 0,
|
12
|
+
type: 1,
|
13
|
+
strong_type: 1,
|
14
|
+
flag: true,
|
15
|
+
strong_flag: true,
|
16
|
+
config: { a: 1 },
|
17
|
+
strong_config: { a: 1, b: { c: 2 } },
|
18
|
+
tags: [1],
|
19
|
+
strong_tags: [1],
|
20
|
+
attachment: Rack::Test::UploadedFile.new(__FILE__),
|
21
|
+
strong_attachment: Rack::Test::UploadedFile.new(__FILE__),
|
22
|
+
zip_code: "123-4567",
|
23
|
+
strong_zip_code: "123-4567",
|
24
|
+
custom: 0,
|
25
|
+
strong_custom: 0,
|
26
|
+
nested: {
|
27
|
+
number: 0
|
28
|
+
},
|
29
|
+
strong_nested: {
|
30
|
+
strong_number: 0
|
31
|
+
},
|
32
|
+
numbers: [1, 2, 3],
|
33
|
+
strong_numbers: [1, 2, 3],
|
34
|
+
body: {
|
35
|
+
items: [
|
36
|
+
{ name: "foo", price: 100 },
|
37
|
+
{ name: "bar", price: 100 }
|
38
|
+
]
|
39
|
+
},
|
40
|
+
strong_body: {
|
41
|
+
items: [
|
42
|
+
{ name: "foo", strong_price: 100 },
|
43
|
+
{ name: "bar", strong_price: 100 }
|
44
|
+
]
|
45
|
+
}
|
46
|
+
}
|
47
|
+
end
|
48
|
+
|
49
|
+
describe "#permitted_params" do
|
50
|
+
it "returns permitted_params" do
|
51
|
+
post "/strongs", params
|
52
|
+
controller.permitted_params.should have_key "strong_object"
|
53
|
+
controller.permitted_params.should_not have_key "object"
|
54
|
+
|
55
|
+
controller.permitted_params.should have_key "strong_name"
|
56
|
+
controller.permitted_params.should_not have_key "name"
|
57
|
+
|
58
|
+
controller.permitted_params.should have_key "strong_number"
|
59
|
+
controller.permitted_params.should_not have_key "number"
|
60
|
+
|
61
|
+
controller.permitted_params.should have_key "strong_type"
|
62
|
+
controller.permitted_params.should_not have_key "type"
|
63
|
+
|
64
|
+
controller.permitted_params.should have_key "strong_flag"
|
65
|
+
controller.permitted_params.should_not have_key "flag"
|
66
|
+
|
67
|
+
controller.permitted_params.should have_key "strong_config"
|
68
|
+
controller.permitted_params.should_not have_key "config"
|
69
|
+
|
70
|
+
controller.permitted_params.should have_key "strong_tags"
|
71
|
+
controller.permitted_params.should_not have_key "tags"
|
72
|
+
|
73
|
+
controller.permitted_params.should_not have_key "strong_rate"
|
74
|
+
controller.permitted_params.should_not have_key "rate"
|
75
|
+
|
76
|
+
controller.permitted_params.should have_key "strong_attachment"
|
77
|
+
controller.permitted_params.should_not have_key "attachment"
|
78
|
+
|
79
|
+
controller.permitted_params.should have_key "strong_zip_code"
|
80
|
+
controller.permitted_params.should_not have_key "zip_code"
|
81
|
+
|
82
|
+
controller.permitted_params.should have_key "strong_custom"
|
83
|
+
controller.permitted_params.should_not have_key "custom"
|
84
|
+
|
85
|
+
controller.permitted_params.should have_key "strong_nested"
|
86
|
+
controller.permitted_params.should_not have_key "nested"
|
87
|
+
|
88
|
+
controller.permitted_params.should have_key "strong_numbers"
|
89
|
+
controller.permitted_params.should_not have_key "numbers"
|
90
|
+
|
91
|
+
controller.permitted_params.should have_key "strong_body"
|
92
|
+
controller.permitted_params.should_not have_key "body"
|
93
|
+
|
94
|
+
controller.permitted_params[:strong_body].should have_key "items"
|
95
|
+
|
96
|
+
controller.permitted_params[:strong_body][:items].first.should have_key "strong_price"
|
97
|
+
controller.permitted_params[:strong_body][:items].first.should_not have_key "name"
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: weak_parameters
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryo Nakamura
|
@@ -100,6 +100,7 @@ files:
|
|
100
100
|
- spec/dummy/app/assets/stylesheets/application.css
|
101
101
|
- spec/dummy/app/controllers/application_controller.rb
|
102
102
|
- spec/dummy/app/controllers/recipes_controller.rb
|
103
|
+
- spec/dummy/app/controllers/strongs_controller.rb
|
103
104
|
- spec/dummy/app/helpers/application_helper.rb
|
104
105
|
- spec/dummy/app/mailers/.gitkeep
|
105
106
|
- spec/dummy/app/models/.gitkeep
|
@@ -131,6 +132,7 @@ files:
|
|
131
132
|
- spec/dummy/public/favicon.ico
|
132
133
|
- spec/dummy/script/rails
|
133
134
|
- spec/requests/recipes_spec.rb
|
135
|
+
- spec/requests/strong_spec.rb
|
134
136
|
- spec/spec_helper.rb
|
135
137
|
- weak_parameters.gemspec
|
136
138
|
homepage: https://github.com/r7kamura/weak_parameters
|
@@ -163,6 +165,7 @@ test_files:
|
|
163
165
|
- spec/dummy/app/assets/stylesheets/application.css
|
164
166
|
- spec/dummy/app/controllers/application_controller.rb
|
165
167
|
- spec/dummy/app/controllers/recipes_controller.rb
|
168
|
+
- spec/dummy/app/controllers/strongs_controller.rb
|
166
169
|
- spec/dummy/app/helpers/application_helper.rb
|
167
170
|
- spec/dummy/app/mailers/.gitkeep
|
168
171
|
- spec/dummy/app/models/.gitkeep
|
@@ -194,5 +197,6 @@ test_files:
|
|
194
197
|
- spec/dummy/public/favicon.ico
|
195
198
|
- spec/dummy/script/rails
|
196
199
|
- spec/requests/recipes_spec.rb
|
200
|
+
- spec/requests/strong_spec.rb
|
197
201
|
- spec/spec_helper.rb
|
198
202
|
has_rdoc:
|