action_args 2.3.0 → 2.6.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
- SHA1:
3
- metadata.gz: 598aaa9aed74e171f523629f5cb06ed0c490aedb
4
- data.tar.gz: 9ae3b89639a940b6d220e743bfdcde9c04449adb
2
+ SHA256:
3
+ metadata.gz: 8be56bb5bd7e6183a1f68f1cfeb7baa5da32287d11a50dddc53248561755ee1c
4
+ data.tar.gz: 14b0d9da9608f4d0cdc465039d202eb35eabb2abe7471f12cdf28af205d0bd01
5
5
  SHA512:
6
- metadata.gz: ce77ebc9c3ced1a55ea9467f50d2bec5691a56fed2fe16286e92542bac86ecb689ca082fedcc456cd1628fd3648e0b6176b5d67384cb06e127e3eaa54ef0dc87
7
- data.tar.gz: 212c5e8b682e2ccc2964aa207f4f58395a4170db80eb6b2aed9ca65591c0169e728d1ee0b2a9aa769b71ea276bfdbadbd6f94e862659892dddc6f404d14988eb
6
+ metadata.gz: 4a112b0b811700d98a8f5c65958d1f9566b0401bcb885bcd160f2d6d7fdcbbc47b55b72e8b3258f9f3c6a461e3256e5d4c97409fe2ccc3373fbdb2deb5db55d4
7
+ data.tar.gz: d10fdf287ee66df67eee06cfd9c515bbaab7567cac69a84dbbdf11732ca86609ecafc7d437e3e2c89dff9b4001f9757edc4887061cc5d0c3d606d68629850ed6
data/.travis.yml CHANGED
@@ -1,44 +1,78 @@
1
1
  script: 'bundle exec rake -t test'
2
2
  language: ruby
3
- sudo: false
4
3
 
5
- rvm:
6
- - 2.0.0
7
- - 2.1.10
8
- - 2.2.7
9
- - 2.3.4
10
- - 2.4.1
11
- - ruby-head
12
- - jruby-9.1.9.0
13
- - rubinius-3
4
+ cache: bundler
5
+
6
+ before_install:
7
+ - "ruby -e 'exit RUBY_VERSION.to_f >= 2.3' && gem up --system || (gem i rubygems-update -v '<3' && update_rubygems)"
8
+ - gem up bundler
9
+
10
+ # rvm:
11
+ # - 2.6.7
12
+ # - 2.5.9
13
+ # - 2.4.10
14
+ # - 2.3.8
15
+ # - 2.2.10
16
+ # - 2.1.10
17
+ # - 2.0.0
18
+ # - ruby-head
19
+ # gemfile:
20
+ # - gemfiles/rails_52.gemfile
21
+ # - gemfiles/rails_51.gemfile
22
+ # - gemfiles/rails_50.gemfile
23
+ # - gemfiles/rails_42.gemfile
24
+ # - gemfiles/rails_41.gemfile
25
+ # - gemfiles/rails_edge.gemfile
26
+
14
27
  matrix:
15
- exclude:
16
- - rvm: 2.0.0
17
- gemfile: gemfiles/rails_50.gemfile
18
- - rvm: 2.1.10
19
- gemfile: gemfiles/rails_50.gemfile
20
- - rvm: 2.0.0
21
- gemfile: gemfiles/rails_51.gemfile
22
- - rvm: 2.1.10
23
- gemfile: gemfiles/rails_51.gemfile
24
- - rvm: 2.0.0
28
+ include:
29
+ - rvm: 3.0.1
30
+ gemfile: gemfiles/rails_61.gemfile
31
+ - rvm: 3.0.1
32
+ gemfile: gemfiles/rails_60.gemfile
33
+ - rvm: 3.0.1
25
34
  gemfile: gemfiles/rails_edge.gemfile
26
- - rvm: 2.1.10
35
+ - rvm: 2.7.3
36
+ gemfile: gemfiles/rails_61.gemfile
37
+ - rvm: 2.7.3
27
38
  gemfile: gemfiles/rails_edge.gemfile
28
- - rvm: 2.4.1
39
+ - rvm: 2.6.7
40
+ gemfile: gemfiles/rails_61.gemfile
41
+ - rvm: 2.6.7
42
+ gemfile: gemfiles/rails_52.gemfile
43
+ - rvm: 2.6.7
44
+ gemfile: gemfiles/rails_51.gemfile
45
+ - rvm: 2.6.7
46
+ gemfile: gemfiles/rails_50.gemfile
47
+ - rvm: 2.5.9
48
+ gemfile: gemfiles/rails_61.gemfile
49
+ - rvm: 2.5.9
50
+ gemfile: gemfiles/rails_52.gemfile
51
+ - rvm: 2.4.10
52
+ gemfile: gemfiles/rails_52.gemfile
53
+ - rvm: 2.3.8
54
+ gemfile: gemfiles/rails_52.gemfile
55
+ - rvm: 2.2.10
56
+ gemfile: gemfiles/rails_42.gemfile
57
+ - rvm: 2.2.10
29
58
  gemfile: gemfiles/rails_41.gemfile
30
- - rvm: 2.4.1
59
+ - rvm: 2.1.10
31
60
  gemfile: gemfiles/rails_42.gemfile
61
+ - rvm: 2.0.0
62
+ gemfile: gemfiles/rails_42.gemfile
63
+
32
64
  - rvm: ruby-head
33
- gemfile: gemfiles/rails_41.gemfile
65
+ gemfile: gemfiles/rails_61.gemfile
34
66
  - rvm: ruby-head
35
- gemfile: gemfiles/rails_42.gemfile
67
+ gemfile: gemfiles/rails_edge.gemfile
68
+
69
+ - rvm: jruby-9.2.17.0
70
+ gemfile: gemfiles/rails_52.gemfile
71
+ - rvm: rubinius-3
72
+ gemfile: gemfiles/rails_52.gemfile
73
+
36
74
  allow_failures:
37
- - rvm: jruby-9.1.9.0
75
+ - rvm: ruby-head
76
+ - rvm: jruby-9.2.17.0
38
77
  - rvm: rubinius-3
39
- gemfile:
40
- - gemfiles/rails_41.gemfile
41
- - gemfiles/rails_42.gemfile
42
- - gemfiles/rails_50.gemfile
43
- - gemfiles/rails_51.gemfile
44
- - gemfiles/rails_edge.gemfile
78
+ - gemfile: gemfiles/rails_edge.gemfile
data/Gemfile CHANGED
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  source 'https://rubygems.org'
3
4
 
4
5
  # Specify your gem's dependencies in action_args.gemspec
data/README.md CHANGED
@@ -1,12 +1,12 @@
1
- # ActionArgs
1
+ # action_args
2
2
  [![Build Status](https://travis-ci.org/asakusarb/action_args.svg?branch=master)](https://travis-ci.org/asakusarb/action_args)
3
3
 
4
- Controller action arguments parameterizer for Rails 4.1+
4
+ Controller action arguments parameterizer for Rails
5
5
 
6
6
 
7
- ## What is this?
7
+ ## What Is This?
8
8
 
9
- ActionArgs is a Rails plugin that extends your controller action methods to allow you to specify arguments of interest in the method definition for any action. - in short, Merbish.
9
+ action_args is a Rails plugin that extends your controller action methods to allow you to specify arguments of interest in the method definition for any action. - in short, this makes your Rails controller Merb-ish.
10
10
 
11
11
 
12
12
  ## The Controllers
@@ -14,24 +14,24 @@ ActionArgs is a Rails plugin that extends your controller action methods to allo
14
14
  Having the following controller code:
15
15
 
16
16
  ```ruby
17
- class HogeController < ApplicationController
18
- def fuga(piyo)
19
- render :text => piyo
17
+ class UsersController < ApplicationController
18
+ def show(id)
19
+ @user = User.find id
20
20
  end
21
21
  end
22
22
  ```
23
23
 
24
- Hitting "/hoge/fuga?piyo=foo" will call `fuga('foo')` and output 'foo'.
25
- This allows you to explicitly state which members of the `params` Hash are used in your controller actions.
24
+ When a request visits "/users/777", it calls `UsersController#show` passing 777 as the method parameter.
25
+ This allows you to explicitly state the most important API for the action -- which members of the `params` Hash are used in your controller actions -- in a perfectly natural Ruby way!
26
26
 
27
27
 
28
- ## Method parameter types in Ruby, and how ActionArgs handles parameters
28
+ ## Method Parameter Types in Ruby, and How action_args Handles Parameters
29
29
 
30
30
  ### Required Parameters (:req)
31
- Method parameters that you specify are required. If a key of the same name does not exist in the params Hash,
32
- ActionContrller::BadRequest is raised.
31
+ Method parameters that you specify are required. If a key of the same name does not exist in the params Hash, ActionContrller::BadRequest is raised.
32
+
33
+ In this `show` action, action_args will require that `id` parameter is provided.
33
34
 
34
- In this `show` action, ActionArgs will require that `id` parameter is provided.
35
35
  ```ruby
36
36
  class UsersController < ApplicationController
37
37
  # the `id` parameter is mandatory
@@ -55,7 +55,7 @@ end
55
55
 
56
56
  ### Keyword Argument (:key)
57
57
  If you think this Ruby 2.0 syntax reads better, you can choose this style for defining your action methods.
58
- This just works in the same way as :opt here.
58
+ This just works in the same way as `:opt` here.
59
59
 
60
60
  ```ruby
61
61
  class UsersController < ApplicationController
@@ -67,8 +67,8 @@ end
67
67
  ```
68
68
 
69
69
  ### Required Keyword Argument (:keyreq)
70
- :keyreq is the required version of :key, which was introduced in Ruby 2.1.
71
- You can use this syntax instead of :req.
70
+ `:keyreq` is the required version of `:key`, which was introduced in Ruby 2.1.
71
+ You can use this syntax instead of `:req`.
72
72
 
73
73
  ```ruby
74
74
  class CommentsController < ApplicationController
@@ -80,9 +80,9 @@ class CommentsController < ApplicationController
80
80
  end
81
81
  ```
82
82
 
83
- ### StrongParameters - permit
83
+ ## StrongParameters - permit
84
84
 
85
- ActionArgs plays very nice with Rails 4 StrongParameters.
85
+ action_args plays very nice with Rails 4 StrongParameters.
86
86
 
87
87
  1. Inline declaration
88
88
 
@@ -97,17 +97,17 @@ class UsersController < ApplicationController
97
97
  end
98
98
  ```
99
99
 
100
- 2. Declarative white-listing
100
+ 2. Declarative allow-listing
101
101
 
102
- ActionArgs also provides a declarative `permits` method for controller classes.
102
+ action_args also provides a declarative `permits` method for controller classes.
103
103
  Use this to keep your `permit` calls DRY in a comprehensible way.
104
104
 
105
105
  ```ruby
106
106
  class UsersController < ApplicationController
107
- # white-lists User model's attributes
107
+ # allow-lists User model's attributes
108
108
  permits :name, :age
109
109
 
110
- # the given `user` parameter would be automatically permitted by ActionArgs
110
+ # the given `user` parameter would be automatically permitted by action_args
111
111
  def create(user)
112
112
  @user = User.new(user)
113
113
  end
@@ -116,18 +116,19 @@ end
116
116
 
117
117
  By default, action_args deduces the target model name from the controller name.
118
118
  For example, the `permits` call in `UsersController` expects the model name to be `User`.
119
- If this is not the case, you can specify the :model_name option:
119
+ If this is not the case, you can specify the `:model_name` option:
120
120
 
121
121
  ```ruby
122
122
  class MembersController < ApplicationController
123
- # white-lists User model's attributes
123
+ # allow-lists User model's attributes
124
124
  permits :name, :age, model_name: 'User'
125
125
  end
126
126
  ```
127
127
 
128
+
128
129
  ## Filters
129
130
 
130
- ActionArgs works in filters, in the same way as it works in controller actions.
131
+ action_args works in filters, in the same way as it works in controller actions.
131
132
 
132
133
  ```ruby
133
134
  class UsersController < ApplicationController
@@ -136,17 +137,44 @@ class UsersController < ApplicationController
136
137
  def show
137
138
  end
138
139
 
139
- private
140
- # `params[:id]` will be dynamically assigned to the method parameter `id` here
141
- def set_user(id)
142
- @user = User.find(id)
143
- end
140
+ # `params[:id]` will be dynamically assigned to the method parameter `id` here
141
+ private def set_user(id)
142
+ @user = User.find(id)
143
+ end
144
144
  end
145
145
  ```
146
146
 
147
+
148
+ ## The *_params Convention
149
+
150
+ For those who are familiar with the Rails scaffold's default naming style, you can add `_params` suffix to any of the parameter names in the method signatures.
151
+ It just matches with the params name without `_params`.
152
+
153
+ For instance, these two actions both pass `params[:user]` as the method parameter.
154
+
155
+ ```ruby
156
+ # without _params
157
+ def create(user)
158
+ @user = User.new(user)
159
+ ...
160
+ end
161
+ ```
162
+
163
+ ```ruby
164
+ # with _params
165
+ def create(user_params)
166
+ @user = User.new(user_params)
167
+ ...
168
+ end
169
+ ```
170
+
171
+ This naming convention makes your controller code look much more compatible with the Rails' default scaffolded code,
172
+ and so it may be actually super easy for you to manually migrate from the legacy scaffold controller to the action_args style.
173
+
174
+
147
175
  ## The Scaffold Generator
148
176
 
149
- ActionArgs provides a custom scaffold controller generator that overwrites the default scaffold generator.
177
+ action_args provides a custom scaffold controller generator that overwrites the default scaffold generator.
150
178
  Thus, by hitting the scaffold generator command like this:
151
179
 
152
180
  ```sh
@@ -157,7 +185,6 @@ The following elegant controller code will be generated:
157
185
 
158
186
  ```ruby
159
187
  class UsersController < ApplicationController
160
- before_action :set_user, only: [:show, :edit, :update, :destroy]
161
188
  permits :name, :age, :email
162
189
 
163
190
  # GET /users
@@ -166,7 +193,8 @@ class UsersController < ApplicationController
166
193
  end
167
194
 
168
195
  # GET /users/1
169
- def show
196
+ def show(id)
197
+ @user = User.find(id)
170
198
  end
171
199
 
172
200
  # GET /users/new
@@ -175,7 +203,8 @@ class UsersController < ApplicationController
175
203
  end
176
204
 
177
205
  # GET /users/1/edit
178
- def edit
206
+ def edit(id)
207
+ @user = User.find(id)
179
208
  end
180
209
 
181
210
  # POST /users
@@ -185,66 +214,59 @@ class UsersController < ApplicationController
185
214
  if @user.save
186
215
  redirect_to @user, notice: 'User was successfully created.'
187
216
  else
188
- render action: 'new'
217
+ render :new
189
218
  end
190
219
  end
191
220
 
192
221
  # PUT /users/1
193
- def update(user)
194
- if @user.update_attributes(user)
222
+ def update(id, user)
223
+ @user = User.find(id)
224
+
225
+ if @user.update(user)
195
226
  redirect_to @user, notice: 'User was successfully updated.'
196
227
  else
197
- render action: 'edit'
228
+ render :edit
198
229
  end
199
230
  end
200
231
 
201
232
  # DELETE /users/1
202
- def destroy
233
+ def destroy(id)
234
+ @user = User.find(id)
203
235
  @user.destroy
204
236
 
205
- redirect_to users_url
237
+ redirect_to users_url, notice: 'User was successfully destroyed.'
206
238
  end
207
-
208
- private
209
- # Use callbacks to share common setup or constraints between actions.
210
- def set_user(id)
211
- @user = User.find(id)
212
- end
213
239
  end
214
240
  ```
215
241
 
216
242
  You may notice that
217
- * There are no globalish `params` reference
243
+ * There are no global-ish `params` reference
218
244
  * It's quite easy to comprehend what's the actual input value for each action
219
- * You may write the unit test code as if the actions are just normal Ruby methods
245
+ * You may be able to write the unit test code without mocking `params` as if the actions are just normal Ruby methods
220
246
 
221
247
 
222
- ## Supported versions
248
+ ## Supported Versions
223
249
 
224
- * Ruby 2.0.0, 2.1.x, 2.2.x, 2.3.x, 2.4.x, 2.5.0 (trunk), JRuby, & Rubinius with 2.0+ mode
250
+ * Ruby 2.0.0, 2.1.x, 2.2.x, 2.3.x, 2.4.x, 2.5.x, 2.6.x, 2.7.x, 3.0.x, 3.1 (trunk), JRuby, & Rubinius with 2.0+ mode
225
251
 
226
- * Rails 4.1.x, 4.2.x, 5.0, 5.1 (edge)
252
+ * Rails 4.1.x, 4.2.x, 5.0, 5.1, 5.2, 6.0, 6.1, 7.0 (edge)
227
253
 
228
- Please use Version 1.5.4 for Rails 4.0.x.
254
+ For Rails 4.0.x, please use Version 1.5.4.
229
255
 
230
256
 
231
257
  ## Installation
232
258
 
233
- Put this line in your Gemfile:
259
+ Bundle the gem to your Rails app by putting this line in your Gemfile:
260
+
234
261
  ```ruby
235
262
  gem 'action_args'
236
263
  ```
237
264
 
238
- Then bundle:
239
- ```sh
240
- % bundle
241
- ```
242
-
243
265
  ## Notes
244
266
 
245
267
  ### Plain Old Action Methods
246
268
 
247
- Of course you still can use both Merbish style and plain old Rails style action methods even if this plugin is loaded. `params` parameter is still alive as well. That means, this plugin won't break any existing controller API.
269
+ Of course you still can use both Merb-like style and plain old Rails style action methods even if this plugin is loaded. `params` parameter is still alive as well. That means, this plugin won't break any existing controller API.
248
270
 
249
271
  ### Argument Naming Convention
250
272
 
@@ -266,7 +288,7 @@ class BooksController < ApplicationController
266
288
  end
267
289
  ```
268
290
 
269
- ### Default parameter values
291
+ ### Default Parameter Values
270
292
 
271
293
  You are of course able to specify default values for action parameters such as:
272
294
 
@@ -292,6 +314,7 @@ end
292
314
 
293
315
  This way, the `page` parameter will be defaulted to 1 as everyone might expect.
294
316
 
317
+
295
318
  ## Copyright
296
319
 
297
320
  Copyright (c) 2011- Asakusa.rb. See MIT-LICENSE for further details.
data/action_args.gemspec CHANGED
@@ -1,5 +1,6 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  # frozen_string_literal: true
3
+
3
4
  $:.push File.expand_path("../lib", __FILE__)
4
5
  require 'action_args/version'
5
6
 
@@ -11,12 +12,15 @@ Gem::Specification.new do |s|
11
12
  s.email = ['ronnie@dio.jp']
12
13
  s.homepage = 'http://asakusa.rubyist.net/'
13
14
  s.license = 'MIT'
15
+ s.metadata = {
16
+ 'source_code_uri' => 'https://github.com/asakusarb/action_args'
17
+ }
14
18
  s.summary = 'Controller action arguments parameterizer for Rails 4+ & Ruby 2.0+'
15
19
  s.description = 'Rails plugin gem that supports Merbish style controller action arguments.'
16
20
 
17
- s.files = `git ls-files`.split("\n")
18
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
21
+ s.files = Dir.chdir(File.expand_path('..', __FILE__)) do
22
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
23
+ end
20
24
  s.require_paths = ["lib"]
21
25
 
22
26
  s.add_development_dependency 'bundler'