weak_parameters 0.1.7 → 0.2.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
  SHA1:
3
- metadata.gz: 0e880b9c7c7a5df3d10f1ca83509d4ac09de2d17
4
- data.tar.gz: 9d030f6d391518b29e25da018db0767fff919e2c
3
+ metadata.gz: ce72b5b0bbcb84e9bb99010f8d173ba34441a15a
4
+ data.tar.gz: 6b4ae1fff602fd5788c9bcaa757e31026650ce72
5
5
  SHA512:
6
- metadata.gz: 76e2224bf86280fe5940aa67f19fe96a0d4c41e570c51e3d6164f5c36e4017151455c7d4c11e1f8fb20c31072e9eb6c19fbf33abda479e636011cc51b6825a9d
7
- data.tar.gz: 67c683e0f450e7df5b747103d5d74b0db2497bab6db0b1bd899f174ee62939b419890a89e5df9ebb7431aba3e2a42f05cbf90029313d8385511f43f27d8cd0ec
6
+ metadata.gz: 68fa4f22e20c97547cc4bcf47232e10e26046e56c85ce2fd6572b07b4cd49c40bd74b00d7c6ba87a18274930062a3ad0c1cd971870ce303bd3494a9bc8783bfd
7
+ data.tar.gz: 874e969e4eefe923012c0c66a7e293c69e65661504bdbc625ed202d1c666a580db2664d97d4102f565f3b9b770d153ce3fe9252ca387fe53a5ac2905b11ae316
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ ## 0.2.0
2
+ * Add strong options on validator DSL (Thx @yoshiori)
3
+
1
4
  ## 0.1.7
2
5
  * Fix bug on missing `@path` variable (Thx @taka0125)
3
6
 
@@ -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?
@@ -15,6 +15,10 @@ module WeakParameters
15
15
  @validators ||= []
16
16
  end
17
17
 
18
+ def strong_params
19
+ validators.map(&:strong_params).inject(ActionController::Parameters.new, &:merge)
20
+ end
21
+
18
22
  private
19
23
 
20
24
  def with_validators(&block)
@@ -1,3 +1,3 @@
1
1
  module WeakParameters
2
- VERSION = "0.1.7"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -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
@@ -1,3 +1,4 @@
1
1
  Dummy::Application.routes.draw do
2
2
  resources :recipes, only: :create
3
+ resources :strongs, only: :create
3
4
  end
@@ -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.1.7
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: