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 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: