action_args 1.3.0 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +2 -1
- data/CONTRIBUTING.md +16 -0
- data/README.md +35 -8
- data/Rakefile +2 -2
- data/action_args.gemspec +3 -0
- data/gemfiles/rails_32.gemfile +2 -2
- data/gemfiles/rails_40.gemfile +2 -2
- data/gemfiles/rails_41.gemfile +14 -0
- data/lib/action_args/params_handler.rb +15 -1
- data/lib/action_args/version.rb +1 -1
- data/spec/controllers/kwargs_controller_spec.rb +9 -1
- data/spec/controllers/kwargs_keyreq_controller_spec.rb +34 -0
- data/spec/fake_app.rb +2 -0
- data/spec/kwargs_keyreq_controllers.rb +8 -0
- data/spec/params_handler/params_handler_spec.rb +48 -0
- metadata +37 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 08400217d2c2140b99d452215b2c61abf84e4970
|
4
|
+
data.tar.gz: 497ce69932a416822d0091fac672635da7c74e1d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 611853b0ba4d24a9af960f3e3c39a17155efab017b4bf4703dbf3bb19db13633da2f7f8a66c53270de3aa21fdec0afd7e4753d45978fc602c2dff406d9374165
|
7
|
+
data.tar.gz: 1c513207a195c7293122f487c24aa1f493e8747823191e09a1d0e8c9682b0372b908cb0c3f98c5b7b1e11b811739ed780a358b00ee4aa1f9a8467c15a79b3b17
|
data/.travis.yml
CHANGED
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
# Contributing
|
2
|
+
|
3
|
+
## Running specs
|
4
|
+
|
5
|
+
ActionArgs has several Bundler Gemfiles, each of which bundles different version of Rails.
|
6
|
+
|
7
|
+
% ls gemfiles/*.gemfile
|
8
|
+
gemfiles/rails_32.gemfile gemfiles/rails_40.gemfile gemfiles/rails_41.gemfile
|
9
|
+
|
10
|
+
Via BUNDLE_GEMFILE ENV variable, you can tell Bundler which version of Rails to bundle.
|
11
|
+
|
12
|
+
$ BUNDLE_GEMFILE=gemfiles/rails_40.gemfile bundle ex rake spec
|
13
|
+
|
14
|
+
Simply executing this command would probably run all tests against each version of Rails:
|
15
|
+
|
16
|
+
% rake spec:all
|
data/README.md
CHANGED
@@ -24,13 +24,11 @@ Hitting "/hoge/fuga?piyo=foo" will call `fuga('foo')` and output 'foo'.
|
|
24
24
|
This allows you to explicitly state which members of the `params` Hash are used in your controller actions,
|
25
25
|
|
26
26
|
|
27
|
-
##
|
27
|
+
## Method parameter types in Ruby, and how ActionArgs handles parameters
|
28
28
|
|
29
|
-
|
30
|
-
|
31
|
-
### Required Parameters
|
29
|
+
### Required Parameters (:req)
|
32
30
|
Method parameters that you specify are required. If a key of the same name does not exist in the params Hash,
|
33
|
-
|
31
|
+
ActionContrller::BadRequest (or ArgumentError in Rails 3) is raised.
|
34
32
|
|
35
33
|
In this `show` action, ActionArgs will require that `id` parameter is provided.
|
36
34
|
```ruby
|
@@ -42,7 +40,7 @@ class UsersController < ApplicationController
|
|
42
40
|
end
|
43
41
|
```
|
44
42
|
|
45
|
-
### Optional Parameters
|
43
|
+
### Optional Parameters (:opt)
|
46
44
|
Default parameter values are assigned in the standard way. Parameters with a default value will not require a matching item in the `params` Hash.
|
47
45
|
|
48
46
|
```ruby
|
@@ -54,8 +52,37 @@ class UsersController < ApplicationController
|
|
54
52
|
end
|
55
53
|
```
|
56
54
|
|
55
|
+
### Keyword Argument (:key)
|
56
|
+
If you think this Ruby 2.0 syntax reads better, you can choose this style for defining your action methods.
|
57
|
+
This just works in the same way as :opt here.
|
58
|
+
|
59
|
+
```ruby
|
60
|
+
class UsersController < ApplicationController
|
61
|
+
# the `page` parameter is optional
|
62
|
+
def index(page: nil)
|
63
|
+
@users = User.page(page).per(50)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
```
|
67
|
+
|
68
|
+
### Required Keyword Argument (:keyreq)
|
69
|
+
:keyreq is the required version of :key, which was introduced in Ruby 2.1.
|
70
|
+
You can use this syntax instead of :req.
|
71
|
+
|
72
|
+
```ruby
|
73
|
+
class CommentsController < ApplicationController
|
74
|
+
def create(post_id:, comment:)
|
75
|
+
post = Post.find post_id
|
76
|
+
if post.create comment
|
77
|
+
...
|
78
|
+
end
|
79
|
+
end
|
80
|
+
```
|
81
|
+
|
57
82
|
### StrongParameters - permit
|
58
83
|
|
84
|
+
ActionArgs plays very nice with Rails 4 StrongParameters.
|
85
|
+
|
59
86
|
1. Inline declaration
|
60
87
|
|
61
88
|
Hashes simply respond to the StrongParameters' `permit` method.
|
@@ -174,9 +201,9 @@ You may notice that
|
|
174
201
|
|
175
202
|
## Supported versions
|
176
203
|
|
177
|
-
* Ruby 1.9.2, 1.9.3, 2.0.0, 2.1.0 (trunk), JRuby & Rubinius with 1.9 mode
|
204
|
+
* Ruby 1.9.2, 1.9.3, 2.0.0, 2.1.x, 2.2.0 (trunk), JRuby, & Rubinius with 1.9+ mode
|
178
205
|
|
179
|
-
* Rails 3.0.x, 3.1.x, 3.2.x, 4.0 (edge)
|
206
|
+
* Rails 3.0.x, 3.1.x, 3.2.x, 4.0.x, 4.1.x, 4.2 (edge)
|
180
207
|
|
181
208
|
|
182
209
|
## Installation
|
data/Rakefile
CHANGED
@@ -11,7 +11,7 @@ end
|
|
11
11
|
task :default => 'spec:all'
|
12
12
|
|
13
13
|
namespace :spec do
|
14
|
-
%w(rails_32 rails_40).each do |gemfile|
|
14
|
+
%w(rails_32 rails_40 rails_41).each do |gemfile|
|
15
15
|
desc "Run Tests against #{gemfile}"
|
16
16
|
task gemfile do
|
17
17
|
sh "BUNDLE_GEMFILE='gemfiles/#{gemfile}.gemfile' bundle --quiet"
|
@@ -21,7 +21,7 @@ namespace :spec do
|
|
21
21
|
|
22
22
|
desc 'Run Tests against all Rails versions'
|
23
23
|
task :all do
|
24
|
-
%w(rails_32 rails_40).each do |gemfile|
|
24
|
+
%w(rails_32 rails_40 rails_41).each do |gemfile|
|
25
25
|
sh "BUNDLE_GEMFILE='gemfiles/#{gemfile}.gemfile' bundle --quiet"
|
26
26
|
sh "BUNDLE_GEMFILE='gemfiles/#{gemfile}.gemfile' bundle exec rake spec"
|
27
27
|
end
|
data/action_args.gemspec
CHANGED
@@ -18,4 +18,7 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
19
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
20
|
s.require_paths = ["lib"]
|
21
|
+
|
22
|
+
s.add_development_dependency 'bundler'
|
23
|
+
s.add_development_dependency 'rake'
|
21
24
|
end
|
data/gemfiles/rails_32.gemfile
CHANGED
data/gemfiles/rails_40.gemfile
CHANGED
@@ -2,12 +2,19 @@ module ActionArgs
|
|
2
2
|
module ParamsHandler
|
3
3
|
# converts the request params Hash into an Array to be passed into the target Method
|
4
4
|
def self.extract_method_arguments_from_params(method_parameters, params)
|
5
|
-
kwargs = {}
|
5
|
+
kwargs, missing_required_params = {}, []
|
6
6
|
parameter_names = method_parameters.map(&:last)
|
7
7
|
method_parameters.reverse_each do |type, key|
|
8
8
|
case type
|
9
9
|
when :req
|
10
|
+
missing_required_params << key unless params.has_key? key
|
10
11
|
next
|
12
|
+
when :keyreq
|
13
|
+
if params.has_key? key
|
14
|
+
kwargs[key] = params[key]
|
15
|
+
else
|
16
|
+
missing_required_params << key
|
17
|
+
end
|
11
18
|
when :key
|
12
19
|
kwargs[key] = params[key] if params.has_key? key
|
13
20
|
when :opt
|
@@ -16,6 +23,13 @@ module ActionArgs
|
|
16
23
|
# omitting parameters that are :block, :rest, :opt without a param, and :key without a param
|
17
24
|
parameter_names.delete key
|
18
25
|
end
|
26
|
+
if missing_required_params.any?
|
27
|
+
if defined? ActionController::BadRequest
|
28
|
+
raise ActionController::BadRequest.new(:required, ArgumentError.new("Missing required parameters: #{missing_required_params.join(', ')}"))
|
29
|
+
else
|
30
|
+
raise ArgumentError, "Missing required parameters: #{missing_required_params.join(', ')}"
|
31
|
+
end
|
32
|
+
end
|
19
33
|
|
20
34
|
values = parameter_names.map {|k| params[k]}
|
21
35
|
values << kwargs if kwargs.any?
|
data/lib/action_args/version.rb
CHANGED
@@ -2,7 +2,15 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe KwBooksController do
|
4
4
|
describe 'GET index (having an optional parameter)' do
|
5
|
-
context 'without giving any kw 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
|
6
14
|
before { get :index, author_name: 'nari' }
|
7
15
|
its(:response) { should be_success }
|
8
16
|
end
|
@@ -0,0 +1,34 @@
|
|
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'
|
data/spec/fake_app.rb
CHANGED
@@ -16,6 +16,7 @@ ActionArgsTestApp::Application.routes.draw do
|
|
16
16
|
resources :authors
|
17
17
|
resources :books
|
18
18
|
resources :kw_books # 2.0+ only
|
19
|
+
resources :kw_keyreq_books # 2.1+ only
|
19
20
|
resources :stores
|
20
21
|
|
21
22
|
namespace :admin do
|
@@ -102,6 +103,7 @@ if Rails::VERSION::MAJOR >= 4
|
|
102
103
|
end
|
103
104
|
|
104
105
|
require_relative 'kwargs_controllers' if RUBY_VERSION >= '2'
|
106
|
+
require_relative 'kwargs_keyreq_controllers' if RUBY_VERSION >= '2.1'
|
105
107
|
|
106
108
|
# migrations
|
107
109
|
class CreateAllTables < ActiveRecord::Migration
|
@@ -102,12 +102,60 @@ describe ActionArgs::ParamsHandler do
|
|
102
102
|
end
|
103
103
|
it { should == [nil, '2', '1'] }
|
104
104
|
end
|
105
|
+
|
105
106
|
context 'opt with value, opt without value, req' do
|
106
107
|
before do
|
107
108
|
def m(b = 'b', x = 'x', a) end
|
108
109
|
end
|
109
110
|
it { should == ['2', '1'] }
|
110
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
|
111
159
|
end
|
112
160
|
|
113
161
|
if defined? ActionController::StrongParameters
|
metadata
CHANGED
@@ -1,15 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: action_args
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Akira Matsuda
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
12
|
-
dependencies:
|
11
|
+
date: 2014-08-25 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
13
41
|
description: Rails plugin gem that supports Merbish style controller action arguments.
|
14
42
|
email:
|
15
43
|
- ronnie@dio.jp
|
@@ -19,6 +47,7 @@ extra_rdoc_files: []
|
|
19
47
|
files:
|
20
48
|
- ".gitignore"
|
21
49
|
- ".travis.yml"
|
50
|
+
- CONTRIBUTING.md
|
22
51
|
- Gemfile
|
23
52
|
- MIT-LICENSE
|
24
53
|
- README.md
|
@@ -26,6 +55,7 @@ files:
|
|
26
55
|
- action_args.gemspec
|
27
56
|
- gemfiles/rails_32.gemfile
|
28
57
|
- gemfiles/rails_40.gemfile
|
58
|
+
- gemfiles/rails_41.gemfile
|
29
59
|
- lib/action_args.rb
|
30
60
|
- lib/action_args/abstract_controller.rb
|
31
61
|
- lib/action_args/params_handler.rb
|
@@ -36,10 +66,12 @@ files:
|
|
36
66
|
- lib/generators/rails/templates/controller.rb
|
37
67
|
- spec/controllers/action_args_controller_spec.rb
|
38
68
|
- spec/controllers/kwargs_controller_spec.rb
|
69
|
+
- spec/controllers/kwargs_keyreq_controller_spec.rb
|
39
70
|
- spec/controllers/ordinal_controller_spec.rb
|
40
71
|
- spec/controllers/strong_parameters_spec.rb
|
41
72
|
- spec/fake_app.rb
|
42
73
|
- spec/kwargs_controllers.rb
|
74
|
+
- spec/kwargs_keyreq_controllers.rb
|
43
75
|
- spec/mailers/action_mailer_spec.rb
|
44
76
|
- spec/params_handler/params_handler_spec.rb
|
45
77
|
- spec/spec_helper.rb
|
@@ -69,10 +101,12 @@ summary: Controller action arguments parameterizer for Rails 3+ & Ruby 1.9+
|
|
69
101
|
test_files:
|
70
102
|
- spec/controllers/action_args_controller_spec.rb
|
71
103
|
- spec/controllers/kwargs_controller_spec.rb
|
104
|
+
- spec/controllers/kwargs_keyreq_controller_spec.rb
|
72
105
|
- spec/controllers/ordinal_controller_spec.rb
|
73
106
|
- spec/controllers/strong_parameters_spec.rb
|
74
107
|
- spec/fake_app.rb
|
75
108
|
- spec/kwargs_controllers.rb
|
109
|
+
- spec/kwargs_keyreq_controllers.rb
|
76
110
|
- spec/mailers/action_mailer_spec.rb
|
77
111
|
- spec/params_handler/params_handler_spec.rb
|
78
112
|
- spec/spec_helper.rb
|