action_args 1.5.4 → 2.0.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/.travis.yml +12 -8
- data/CONTRIBUTING.md +5 -4
- data/README.md +6 -4
- data/Rakefile +12 -10
- data/action_args.gemspec +2 -2
- data/gemfiles/rails_edge.gemfile +19 -0
- data/lib/action_args.rb +2 -14
- data/lib/action_args/abstract_controller.rb +25 -36
- data/lib/action_args/callbacks.rb +3 -45
- data/lib/action_args/params_handler.rb +46 -40
- data/lib/action_args/version.rb +1 -1
- data/lib/generators/rails/action_args_scaffold_controller_generator.rb +0 -3
- data/test/controllers/action_args_controller_test.rb +43 -0
- data/test/controllers/hooks_test.rb +27 -0
- data/test/controllers/kwargs_controller_test.rb +30 -0
- data/test/controllers/kwargs_keyreq_controller_test.rb +30 -0
- data/test/controllers/ordinal_controller_test.rb +9 -0
- data/test/controllers/strong_parameters_test.rb +35 -0
- data/{spec → test}/fake_app.rb +33 -42
- data/{spec → test}/kwargs_controllers.rb +0 -0
- data/{spec → test}/kwargs_keyreq_controllers.rb +0 -0
- data/test/mailers/action_mailer_test.rb +8 -0
- data/test/params_handler/params_handler_test.rb +192 -0
- data/{spec/spec_helper.rb → test/test_helper.rb} +2 -7
- metadata +34 -45
- data/.rspec +0 -2
- data/gemfiles/rails_32.gemfile +0 -14
- data/gemfiles/rails_40.gemfile +0 -15
- data/lib/action_args/legacy/callbacks.rb +0 -71
- data/lib/generators/action_args/rspec/scaffold/scaffold_generator.rb +0 -18
- data/lib/generators/action_args/rspec/scaffold/templates/action_args_controller_spec.rb +0 -130
- data/spec/controllers/action_args_controller_spec.rb +0 -42
- data/spec/controllers/hooks_spec.rb +0 -31
- data/spec/controllers/kwargs_controller_spec.rb +0 -34
- data/spec/controllers/kwargs_keyreq_controller_spec.rb +0 -34
- data/spec/controllers/ordinal_controller_spec.rb +0 -11
- data/spec/controllers/strong_parameters_spec.rb +0 -34
- data/spec/mailers/action_mailer_spec.rb +0 -9
- data/spec/params_handler/params_handler_spec.rb +0 -218
@@ -1,31 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe BooksController, 'action hooks' do
|
4
|
-
before do
|
5
|
-
Book.delete_all
|
6
|
-
@book = Book.create! title: 'Head First ActionArgs'
|
7
|
-
get :show, id: @book.id
|
8
|
-
end
|
9
|
-
|
10
|
-
describe 'before_action' do
|
11
|
-
context 'via Symbol' do
|
12
|
-
subject { assigns :book }
|
13
|
-
it { should == @book }
|
14
|
-
end
|
15
|
-
|
16
|
-
context 'via String' do
|
17
|
-
subject { assigns :string_filter_executed }
|
18
|
-
it { should be_true }
|
19
|
-
end
|
20
|
-
|
21
|
-
context 'via Proc' do
|
22
|
-
subject { assigns :proc_filter_executed }
|
23
|
-
it { should be_true }
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
describe 'around_action' do
|
28
|
-
subject { assigns :elapsed_time }
|
29
|
-
it { should be }
|
30
|
-
end
|
31
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe KwBooksController do
|
4
|
-
describe 'GET index (having an optional parameter)' do
|
5
|
-
context 'without giving any kw parameter (not even giving :required one)' do
|
6
|
-
if ActionPack::VERSION::MAJOR >= 4
|
7
|
-
it { expect { get :index }.to raise_error ActionController::BadRequest }
|
8
|
-
else
|
9
|
-
it { expect { get :index }.to raise_error ArgumentError }
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
context 'without giving any optional kw parameter' do
|
14
|
-
before { get :index, author_name: 'nari' }
|
15
|
-
its(:response) { should be_success }
|
16
|
-
end
|
17
|
-
|
18
|
-
context 'with kw parameter defaults to non-nil value' do
|
19
|
-
before { get :index, author_name: 'nari', page: 3 }
|
20
|
-
subject { eval response.body }
|
21
|
-
its([:author_name]) { should == 'nari' }
|
22
|
-
its([:page]) { should == '3' }
|
23
|
-
its([:q]) { should == nil }
|
24
|
-
end
|
25
|
-
|
26
|
-
context 'with kw parameter defaults to nil' do
|
27
|
-
before { get :index, author_name: 'nari', q: 'Rails' }
|
28
|
-
subject { eval response.body }
|
29
|
-
its([:author_name]) { should == 'nari' }
|
30
|
-
its([:page]) { should == '1' }
|
31
|
-
its([:q]) { should == 'Rails' }
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end if RUBY_VERSION >= '2'
|
@@ -1,34 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe KwKeyreqBooksController do
|
4
|
-
describe 'GET index (having an optional parameter)' do
|
5
|
-
context 'without giving any kw parameter (not even giving :required one)' do
|
6
|
-
if ActionPack::VERSION::MAJOR >= 4
|
7
|
-
it { expect { get :index }.to raise_error ActionController::BadRequest }
|
8
|
-
else
|
9
|
-
it { expect { get :index }.to raise_error ArgumentError }
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
context 'without giving any kw parameter' do
|
14
|
-
before { get :index, author_name: 'nari' }
|
15
|
-
its(:response) { should be_success }
|
16
|
-
end
|
17
|
-
|
18
|
-
context 'with kw parameter defaults to non-nil value' do
|
19
|
-
before { get :index, author_name: 'nari', page: 3 }
|
20
|
-
subject { eval response.body }
|
21
|
-
its([:author_name]) { should == 'nari' }
|
22
|
-
its([:page]) { should == '3' }
|
23
|
-
its([:q]) { should == nil }
|
24
|
-
end
|
25
|
-
|
26
|
-
context 'with kw parameter defaults to nil' do
|
27
|
-
before { get :index, author_name: 'nari', q: 'Rails' }
|
28
|
-
subject { eval response.body }
|
29
|
-
its([:author_name]) { should == 'nari' }
|
30
|
-
its([:page]) { should == '1' }
|
31
|
-
its([:q]) { should == 'Rails' }
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end if RUBY_VERSION >= '2.1'
|
@@ -1,34 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
if Rails::VERSION::MAJOR >= 4
|
4
|
-
describe StoresController do
|
5
|
-
describe 'GET show' do
|
6
|
-
let(:tatsu_zine) { Store.create! name: 'Tatsu-zine' }
|
7
|
-
before { get :show, :id => tatsu_zine.id }
|
8
|
-
subject { assigns :store }
|
9
|
-
it { should == tatsu_zine }
|
10
|
-
end
|
11
|
-
|
12
|
-
describe 'POST create' do
|
13
|
-
it { expect { post :create, :store => {name: 'Tatsu-zine', url: 'http://tatsu-zine.com'} }.to change(Store, :count).by(1) }
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
describe Admin::BooksController do
|
18
|
-
context "this controller doesn't permit price of new book" do
|
19
|
-
describe 'POST create' do
|
20
|
-
before { post :create, :book => {title: 'naruhoUnix', price: 30} }
|
21
|
-
|
22
|
-
it 'should not save price of the book' do
|
23
|
-
expect(Book.last.price).to be_nil
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
describe Admin::AccountsController do
|
30
|
-
describe 'POST create' do
|
31
|
-
it { expect { post :create, :admin_account => {name: 'amatsuda'} }.to change(Admin::Account, :count).by(1) }
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
@@ -1,218 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe ActionArgs::ParamsHandler do
|
4
|
-
# ActionArgs::ParamsHandler.extract_method_arguments_from_params(method_parameters, params)
|
5
|
-
describe 'extract_method_arguments_from_params' do
|
6
|
-
let(:params) { {a: '1', b: '2'} }
|
7
|
-
subject { ActionArgs::ParamsHandler.extract_method_arguments_from_params method(:m).parameters, params }
|
8
|
-
context 'no parameters' do
|
9
|
-
before do
|
10
|
-
def m() end
|
11
|
-
end
|
12
|
-
it { should == [] }
|
13
|
-
end
|
14
|
-
|
15
|
-
context '1 req' do
|
16
|
-
before do
|
17
|
-
def m(a) end
|
18
|
-
end
|
19
|
-
it { should == ['1'] }
|
20
|
-
end
|
21
|
-
|
22
|
-
context '2 reqs' do
|
23
|
-
before do
|
24
|
-
def m(a, b) end
|
25
|
-
end
|
26
|
-
it { should == ['1', '2'] }
|
27
|
-
end
|
28
|
-
|
29
|
-
context '1 opt with value' do
|
30
|
-
before do
|
31
|
-
def m(a = 'a') end
|
32
|
-
end
|
33
|
-
it { should == ['1'] }
|
34
|
-
end
|
35
|
-
|
36
|
-
context '1 opt without value' do
|
37
|
-
before do
|
38
|
-
def m(x = 'x') end
|
39
|
-
end
|
40
|
-
it { should == [] }
|
41
|
-
end
|
42
|
-
|
43
|
-
context 'req, opt with value' do
|
44
|
-
before do
|
45
|
-
def m(a, b = 'b') end
|
46
|
-
end
|
47
|
-
it { should == ['1', '2'] }
|
48
|
-
end
|
49
|
-
|
50
|
-
context 'req, opt without value' do
|
51
|
-
before do
|
52
|
-
def m(a, x = 'x') end
|
53
|
-
end
|
54
|
-
it { should == ['1'] }
|
55
|
-
end
|
56
|
-
|
57
|
-
context 'opt with value, opt with value' do
|
58
|
-
before do
|
59
|
-
def m(a = 'a', b = 'b') end
|
60
|
-
end
|
61
|
-
it { should == ['1', '2'] }
|
62
|
-
end
|
63
|
-
|
64
|
-
context 'opt with value, opt without value' do
|
65
|
-
before do
|
66
|
-
def m(a = 'a', x = 'x') end
|
67
|
-
end
|
68
|
-
it { should == ['1'] }
|
69
|
-
end
|
70
|
-
|
71
|
-
context 'opt without value, opt with value' do
|
72
|
-
before do
|
73
|
-
def m(x = 'x', a = 'a') end
|
74
|
-
end
|
75
|
-
it { should == [nil, '1'] }
|
76
|
-
end
|
77
|
-
|
78
|
-
context 'opt without value, opt without value' do
|
79
|
-
before do
|
80
|
-
def m(x = 'x', y = 'y') end
|
81
|
-
end
|
82
|
-
it { should == [] }
|
83
|
-
end
|
84
|
-
|
85
|
-
context 'opt with value, req' do
|
86
|
-
before do
|
87
|
-
def m(a = 'a', b) end
|
88
|
-
end
|
89
|
-
it { should == ['1', '2'] }
|
90
|
-
end
|
91
|
-
|
92
|
-
context 'opt without value, req' do
|
93
|
-
before do
|
94
|
-
def m(x = 'x', a) end
|
95
|
-
end
|
96
|
-
it { should == ['1'] }
|
97
|
-
end
|
98
|
-
|
99
|
-
context 'opt without value, opt with value, req' do
|
100
|
-
before do
|
101
|
-
def m(x = 'x', b = 'b', a) end
|
102
|
-
end
|
103
|
-
it { should == [nil, '2', '1'] }
|
104
|
-
end
|
105
|
-
|
106
|
-
context 'opt with value, opt without value, req' do
|
107
|
-
before do
|
108
|
-
def m(b = 'b', x = 'x', a) end
|
109
|
-
end
|
110
|
-
it { should == ['2', '1'] }
|
111
|
-
end
|
112
|
-
|
113
|
-
if Rails::VERSION::MAJOR >= 4
|
114
|
-
context 'req without a value' do
|
115
|
-
before do
|
116
|
-
def m(x) end
|
117
|
-
end
|
118
|
-
it { expect { subject }.to raise_error ActionController::BadRequest }
|
119
|
-
end
|
120
|
-
end
|
121
|
-
|
122
|
-
if RUBY_VERSION >= '2'
|
123
|
-
eval <<-KWARGS_TEST
|
124
|
-
context 'key' do
|
125
|
-
before do
|
126
|
-
def m(a: nil) end
|
127
|
-
end
|
128
|
-
it { should == [a: '1'] }
|
129
|
-
end
|
130
|
-
|
131
|
-
context 'key, key without value' do
|
132
|
-
before do
|
133
|
-
def m(a: nil, x: 'x') end
|
134
|
-
end
|
135
|
-
it { should == [a: '1'] }
|
136
|
-
end
|
137
|
-
KWARGS_TEST
|
138
|
-
end
|
139
|
-
|
140
|
-
if RUBY_VERSION >= '2.1'
|
141
|
-
eval <<-KWARGS_KEYREQ_TEST
|
142
|
-
context 'keyreq' do
|
143
|
-
before do
|
144
|
-
def m(a:) end
|
145
|
-
end
|
146
|
-
it { should == [a: '1'] }
|
147
|
-
end
|
148
|
-
|
149
|
-
if Rails::VERSION::MAJOR >= 4
|
150
|
-
context 'keyreq, keyreq without value' do
|
151
|
-
before do
|
152
|
-
def m(a:, x:) end
|
153
|
-
end
|
154
|
-
it { expect { subject }.to raise_error ::ActionController::BadRequest }
|
155
|
-
end
|
156
|
-
end
|
157
|
-
KWARGS_KEYREQ_TEST
|
158
|
-
end
|
159
|
-
end
|
160
|
-
|
161
|
-
if defined? ActionController::StrongParameters
|
162
|
-
# strengthen_params!(controller_class, method_parameters, params)
|
163
|
-
describe 'strengthen_params!' do
|
164
|
-
before { ActionArgs::ParamsHandler.strengthen_params! controller, controller.new.method(:a).parameters, params }
|
165
|
-
let(:params) { ActionController::Parameters.new(x: '1', y: '2', foo: {a: 'a', b: 'b'}, bar: {a: 'a', b: 'b'}, baz: {a: 'a', b: 'b'}, hoge: {a: 'a', b: 'b'}, fuga: {a: 'a', b: 'b'}) }
|
166
|
-
|
167
|
-
context 'requiring via :req, permitting all scalars' do
|
168
|
-
let(:controller) { FooController ||= Class.new(ApplicationController) { permits :a, :b; def a(foo) end } }
|
169
|
-
subject { params[:foo] }
|
170
|
-
it { should be_permitted }
|
171
|
-
its([:a]) { should be }
|
172
|
-
its([:b]) { should be }
|
173
|
-
end
|
174
|
-
|
175
|
-
context 'requiring via :req, not permitting all scalars' do
|
176
|
-
let(:controller) { BarController ||= Class.new(ApplicationController) { permits :a; def a(bar, x = 'x') end } }
|
177
|
-
subject { params[:bar] }
|
178
|
-
it { should be_permitted }
|
179
|
-
its([:a]) { should be }
|
180
|
-
its([:b]) { should_not be }
|
181
|
-
end
|
182
|
-
|
183
|
-
context 'requiring via :req, not permitting any scalars' do
|
184
|
-
let(:controller) { BazController ||= Class.new(ApplicationController) { def a(baz, aho = 'omg') end } }
|
185
|
-
subject { params[:baz] }
|
186
|
-
it { should_not be_permitted }
|
187
|
-
end
|
188
|
-
|
189
|
-
context 'requiring via :opt, permitting all scalars' do
|
190
|
-
let(:controller) { HogeController ||= Class.new(ApplicationController) { permits :a, :b; def a(hoge = {}) end } }
|
191
|
-
subject { params[:hoge] }
|
192
|
-
it { should be_permitted }
|
193
|
-
its([:a]) { should be }
|
194
|
-
its([:b]) { should be }
|
195
|
-
end
|
196
|
-
|
197
|
-
if RUBY_VERSION >= '2'
|
198
|
-
eval <<-KWARGS_TEST
|
199
|
-
context 'requiring via :key, permitting all scalars' do
|
200
|
-
let(:controller) { FugaController ||= Class.new(ApplicationController) { permits :a, :b; def a(fuga: {}) end } }
|
201
|
-
subject { params[:fuga] }
|
202
|
-
it { should be_permitted }
|
203
|
-
its([:a]) { should be }
|
204
|
-
its([:b]) { should be }
|
205
|
-
end
|
206
|
-
KWARGS_TEST
|
207
|
-
end
|
208
|
-
|
209
|
-
describe '"model_name" option' do
|
210
|
-
let(:controller) { PiyoController ||= Class.new(ApplicationController) { permits :a, :b, model_name: 'Foo'; def a(foo) end } }
|
211
|
-
subject { params[:foo] }
|
212
|
-
it { should be_permitted }
|
213
|
-
its([:a]) { should be }
|
214
|
-
its([:b]) { should be }
|
215
|
-
end
|
216
|
-
end
|
217
|
-
end
|
218
|
-
end
|