action_args 1.5.4 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +12 -8
  3. data/CONTRIBUTING.md +5 -4
  4. data/README.md +6 -4
  5. data/Rakefile +12 -10
  6. data/action_args.gemspec +2 -2
  7. data/gemfiles/rails_edge.gemfile +19 -0
  8. data/lib/action_args.rb +2 -14
  9. data/lib/action_args/abstract_controller.rb +25 -36
  10. data/lib/action_args/callbacks.rb +3 -45
  11. data/lib/action_args/params_handler.rb +46 -40
  12. data/lib/action_args/version.rb +1 -1
  13. data/lib/generators/rails/action_args_scaffold_controller_generator.rb +0 -3
  14. data/test/controllers/action_args_controller_test.rb +43 -0
  15. data/test/controllers/hooks_test.rb +27 -0
  16. data/test/controllers/kwargs_controller_test.rb +30 -0
  17. data/test/controllers/kwargs_keyreq_controller_test.rb +30 -0
  18. data/test/controllers/ordinal_controller_test.rb +9 -0
  19. data/test/controllers/strong_parameters_test.rb +35 -0
  20. data/{spec → test}/fake_app.rb +33 -42
  21. data/{spec → test}/kwargs_controllers.rb +0 -0
  22. data/{spec → test}/kwargs_keyreq_controllers.rb +0 -0
  23. data/test/mailers/action_mailer_test.rb +8 -0
  24. data/test/params_handler/params_handler_test.rb +192 -0
  25. data/{spec/spec_helper.rb → test/test_helper.rb} +2 -7
  26. metadata +34 -45
  27. data/.rspec +0 -2
  28. data/gemfiles/rails_32.gemfile +0 -14
  29. data/gemfiles/rails_40.gemfile +0 -15
  30. data/lib/action_args/legacy/callbacks.rb +0 -71
  31. data/lib/generators/action_args/rspec/scaffold/scaffold_generator.rb +0 -18
  32. data/lib/generators/action_args/rspec/scaffold/templates/action_args_controller_spec.rb +0 -130
  33. data/spec/controllers/action_args_controller_spec.rb +0 -42
  34. data/spec/controllers/hooks_spec.rb +0 -31
  35. data/spec/controllers/kwargs_controller_spec.rb +0 -34
  36. data/spec/controllers/kwargs_keyreq_controller_spec.rb +0 -34
  37. data/spec/controllers/ordinal_controller_spec.rb +0 -11
  38. data/spec/controllers/strong_parameters_spec.rb +0 -34
  39. data/spec/mailers/action_mailer_spec.rb +0 -9
  40. data/spec/params_handler/params_handler_spec.rb +0 -218
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a7062ef48bdc9ea5251edabde8741bd59a94a053
4
- data.tar.gz: 99a982870ef9d599448c17e00457a5663d847e16
3
+ metadata.gz: e5f4f25a659c405f12ede335715b003888d85750
4
+ data.tar.gz: 86b00b4457c7da799ce4d12d2baadf9a4c76761e
5
5
  SHA512:
6
- metadata.gz: 3844a31080e5f9dd72f720ce3f747999773b50265dbc44892ca6e32e35cd8116e05b37d7a3bac0a267a5e9cb3821a1d33f8bd4815a29b7d4cc8d25663a89974b
7
- data.tar.gz: 61d4f1c96d1a9da789452113e9fc32c900daeaa891e4aeb6f7e07f1e78027de6b1ed5ae191a6567e2cc6cc4ea1cdf4f88e9308d3d5f83807d901af29214074b2
6
+ metadata.gz: 4b253edeedc59dfd20bfde649b17af128570eef09214947cb961db481aaddf5fcd1ab43cc9d7236016c60a7ca832c3c0f7392c682f081515846181da7a9bf016
7
+ data.tar.gz: 9737e77da93a77c23b191ef085eb9ab40cb00a1249554da7723d51798b9cd6acc70ec24f5e00a8c530792b174ad8912b0092d43a491fd090ece7893459f73821
@@ -1,20 +1,24 @@
1
- script: "bundle exec rake spec"
1
+ script: 'bundle exec rake -t test'
2
2
  language: ruby
3
+ sudo: false
4
+
3
5
  rvm:
4
- - 1.9.3
5
6
  - 2.0.0
6
7
  - 2.1
7
- - 2.2
8
+ - 2.2.3
8
9
  - ruby-head
9
- - jruby
10
+ - jruby-9.0.0.0
10
11
  - rbx
11
12
  matrix:
13
+ exclude:
14
+ - rvm: 2.0.0
15
+ gemfile: gemfiles/rails_edge.gemfile
16
+ - rvm: 2.1
17
+ gemfile: gemfiles/rails_edge.gemfile
12
18
  allow_failures:
13
- - rvm: ruby-head
14
- - rvm: jruby
19
+ - rvm: jruby-9.0.0.0
15
20
  - rvm: rbx
16
21
  gemfile:
17
- - gemfiles/rails_32.gemfile
18
- - gemfiles/rails_40.gemfile
19
22
  - gemfiles/rails_41.gemfile
20
23
  - gemfiles/rails_42.gemfile
24
+ - gemfiles/rails_edge.gemfile
@@ -1,16 +1,17 @@
1
1
  # Contributing
2
2
 
3
- ## Running specs
3
+ ## Running tests
4
4
 
5
5
  ActionArgs has several Bundler Gemfiles, each of which bundles different version of Rails.
6
6
 
7
7
  % ls gemfiles/*.gemfile
8
- gemfiles/rails_32.gemfile gemfiles/rails_40.gemfile gemfiles/rails_41.gemfile
8
+ gemfiles/rails_41.gemfile gemfiles/rails_42.gemfile rails_edge.gemfile
9
+
9
10
 
10
11
  Via BUNDLE_GEMFILE ENV variable, you can tell Bundler which version of Rails to bundle.
11
12
 
12
- $ BUNDLE_GEMFILE=gemfiles/rails_40.gemfile bundle ex rake spec
13
+ $ BUNDLE_GEMFILE=gemfiles/rails_42.gemfile bundle ex rake test
13
14
 
14
15
  Simply executing this command would probably run all tests against each version of Rails:
15
16
 
16
- % rake spec:all
17
+ % rake test:all
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # ActionArgs
2
2
 
3
- Controller action arguments parameterizer for Rails 3 and 4
3
+ Controller action arguments parameterizer for Rails 4.1+
4
4
 
5
5
 
6
6
  ## What is this?
@@ -28,7 +28,7 @@ This allows you to explicitly state which members of the `params` Hash are used
28
28
 
29
29
  ### Required Parameters (:req)
30
30
  Method parameters that you specify are required. If a key of the same name does not exist in the params Hash,
31
- ActionContrller::BadRequest (or ArgumentError in Rails 3) is raised.
31
+ ActionContrller::BadRequest is raised.
32
32
 
33
33
  In this `show` action, ActionArgs will require that `id` parameter is provided.
34
34
  ```ruby
@@ -220,9 +220,11 @@ You may notice that
220
220
 
221
221
  ## Supported versions
222
222
 
223
- * Ruby 1.9.2, 1.9.3, 2.0.0, 2.1.x, 2.2.x, 2.3.0 (trunk), JRuby, & Rubinius with 1.9+ mode
223
+ * Ruby 2.0.0, 2.1.x, 2.2.x, 2.3.0 (trunk), JRuby, & Rubinius with 2.0+ mode
224
224
 
225
- * Rails 3.0.x, 3.1.x, 3.2.x, 4.0.x, 4.1.x, 4.2.x, 5.0 (edge)
225
+ * Rails 4.1.x, 4.2.x, 5.0 (edge)
226
+
227
+ Please use Version 1.5.4 for Rails 4.0.x.
226
228
 
227
229
 
228
230
  ## Installation
data/Rakefile CHANGED
@@ -1,29 +1,31 @@
1
1
  require 'bundler'
2
2
  Bundler::GemHelper.install_tasks
3
3
 
4
- require 'rspec/core'
5
- require 'rspec/core/rake_task'
4
+ require 'rake/testtask'
6
5
 
7
- RSpec::Core::RakeTask.new(:spec) do |spec|
8
- spec.pattern = FileList['spec/**/*_spec.rb']
6
+ Rake::TestTask.new do |t|
7
+ t.libs << "test"
8
+ t.pattern = 'test/**/*_test.rb'
9
+ t.warning = true
10
+ t.verbose = true
9
11
  end
10
12
 
11
- task :default => 'spec:all'
13
+ task :default => 'test:all'
12
14
 
13
- namespace :spec do
14
- %w(rails_32 rails_40 rails_41 rails_42).each do |gemfile|
15
+ namespace :test do
16
+ %w(rails_41 rails_42 rails_edge).each do |gemfile|
15
17
  desc "Run Tests against #{gemfile}"
16
18
  task gemfile do
17
19
  sh "BUNDLE_GEMFILE='gemfiles/#{gemfile}.gemfile' bundle --quiet"
18
- sh "BUNDLE_GEMFILE='gemfiles/#{gemfile}.gemfile' bundle exec rake -t spec"
20
+ sh "BUNDLE_GEMFILE='gemfiles/#{gemfile}.gemfile' bundle exec rake -t test"
19
21
  end
20
22
  end
21
23
 
22
24
  desc 'Run Tests against all Rails versions'
23
25
  task :all do
24
- %w(rails_32 rails_40 rails_41 rails_42).each do |gemfile|
26
+ %w(rails_41 rails_42 rails_edge).each do |gemfile|
25
27
  sh "BUNDLE_GEMFILE='gemfiles/#{gemfile}.gemfile' bundle --quiet"
26
- sh "BUNDLE_GEMFILE='gemfiles/#{gemfile}.gemfile' bundle exec rake spec"
28
+ sh "BUNDLE_GEMFILE='gemfiles/#{gemfile}.gemfile' bundle exec rake -t test"
27
29
  end
28
30
  end
29
31
  end
@@ -9,7 +9,7 @@ Gem::Specification.new do |s|
9
9
  s.authors = ['Akira Matsuda']
10
10
  s.email = ['ronnie@dio.jp']
11
11
  s.homepage = 'http://asakusa.rubyist.net/'
12
- s.summary = 'Controller action arguments parameterizer for Rails 3+ & Ruby 1.9+'
12
+ s.summary = 'Controller action arguments parameterizer for Rails 4+ & Ruby 2.0+'
13
13
  s.description = 'Rails plugin gem that supports Merbish style controller action arguments.'
14
14
 
15
15
  s.rubyforge_project = 'action_args'
@@ -21,5 +21,5 @@ Gem::Specification.new do |s|
21
21
 
22
22
  s.add_development_dependency 'bundler'
23
23
  s.add_development_dependency 'rake'
24
- s.add_development_dependency 'rspec-rails', ['~> 2.0', '< 2.99']
24
+ s.add_development_dependency 'test-unit-rails'
25
25
  end
@@ -0,0 +1,19 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'rails', github: 'rails/rails'
4
+ gem 'rack', github: 'rack/rack'
5
+ gem 'arel', github: 'rails/arel'
6
+ gem 'sprockets', github: 'rails/sprockets'
7
+ gem 'sprockets-rails', github: 'rails/sprockets-rails'
8
+ gem 'sass-rails', github: 'rails/sass-rails'
9
+ gem 'rails-controller-testing'
10
+
11
+ gemspec :path => '../'
12
+
13
+ platforms :ruby do
14
+ gem 'sqlite3'
15
+ end
16
+
17
+ platforms :jruby do
18
+ gem 'activerecord-jdbcsqlite3-adapter'
19
+ end
@@ -1,21 +1,9 @@
1
- begin
2
- require 'strong_parameters'
3
- rescue LoadError
4
- end
5
1
  require 'action_args/params_handler'
6
2
  require 'action_args/abstract_controller'
7
- if ActionArgs.respond_to? :prepend
8
- require 'action_args/callbacks'
9
- else
10
- require 'action_args/legacy/callbacks'
11
- end
3
+ require 'action_args/callbacks'
12
4
 
13
5
  module ActionArgs
14
6
  class Railtie < ::Rails::Railtie
15
- if config.respond_to? :app_generators
16
- config.app_generators.scaffold_controller = :action_args_scaffold_controller
17
- else
18
- config.generators.scaffold_controller = :action_args_scaffold_controller
19
- end
7
+ config.app_generators.scaffold_controller = :action_args_scaffold_controller
20
8
  end
21
9
  end
@@ -1,44 +1,33 @@
1
+ require_relative 'params_handler'
2
+ using ActionArgs::ParamsHandler
3
+
1
4
  module AbstractController
2
5
  class Base
3
- if defined? ActionController::StrongParameters
4
- def send_action(method_name, *args)
5
- return send method_name, *args unless args.empty?
6
- return send method_name, *args unless defined?(params)
7
-
8
- method_parameters = method(method_name).parameters
9
- ActionArgs::ParamsHandler.strengthen_params!(self.class, method_parameters, params)
10
- values = ActionArgs::ParamsHandler.extract_method_arguments_from_params method_parameters, params
11
- send method_name, *values
12
- end
6
+ def send_action(method_name, *args)
7
+ return send method_name, *args unless args.empty?
8
+ return send method_name, *args unless defined?(params)
13
9
 
14
- # You can configure StrongParameters' `permit` attributes using this DSL method.
15
- # The `permit` call will be invoked only against parameters having the resource
16
- # model name inferred from the controller class name.
17
- #
18
- # class UsersController < ApplicationController
19
- # permits :name, :age
20
- #
21
- # def create(user)
22
- # @user = User.new(user)
23
- # end
24
- # end
25
- #
26
- def self.permits(*attributes)
27
- if attributes.last.is_a?(Hash) && attributes.last.extractable_options? && attributes.last.has_key?(:model_name)
28
- options = attributes.pop
29
- @permitting_model_name = options[:model_name]
30
- end
31
- @permitted_attributes = attributes
32
- end
33
- # no StrongParameters
34
- else
35
- def send_action(method_name, *args)
36
- return send method_name, *args unless args.empty?
37
- return send method_name, *args unless defined?(params)
10
+ send_with_method_parameters_from_params method_name
11
+ end
38
12
 
39
- values = ActionArgs::ParamsHandler.extract_method_arguments_from_params method(method_name).parameters, params
40
- send method_name, *values
13
+ # You can configure StrongParameters' `permit` attributes using this DSL method.
14
+ # The `permit` call will be invoked only against parameters having the resource
15
+ # model name inferred from the controller class name.
16
+ #
17
+ # class UsersController < ApplicationController
18
+ # permits :name, :age
19
+ #
20
+ # def create(user)
21
+ # @user = User.new(user)
22
+ # end
23
+ # end
24
+ #
25
+ def self.permits(*attributes)
26
+ if attributes.last.is_a?(Hash) && attributes.last.extractable_options? && attributes.last.has_key?(:model_name)
27
+ options = attributes.pop
28
+ @permitting_model_name = options[:model_name]
41
29
  end
30
+ @permitted_attributes = attributes
42
31
  end
43
32
  end
44
33
  end
@@ -1,7 +1,8 @@
1
+ using ActionArgs::ParamsHandler
2
+
1
3
  module ActionArgs
2
4
  module ActiveSupport
3
5
  module CallbackParameterizer
4
- if Rails.version > '4.1'
5
6
  # Extending AS::Callbacks::Callback's `make_lambda` not just to call specified
6
7
  # method but to call the method with method parameters taken from `params`.
7
8
  # This would happen only when
@@ -11,11 +12,7 @@ module ActionArgs
11
12
  if Symbol === filter
12
13
  lambda do |target, _, &blk|
13
14
  if ActionController::Base === target
14
- meth = target.method filter
15
- method_parameters = meth.parameters
16
- ActionArgs::ParamsHandler.strengthen_params!(target.class, method_parameters, target.params)
17
- values = ActionArgs::ParamsHandler.extract_method_arguments_from_params method_parameters, target.params
18
- target.send filter, *values, &blk
15
+ target.send_with_method_parameters_from_params filter, &blk
19
16
  else
20
17
  target.send filter, &blk
21
18
  end
@@ -24,45 +21,6 @@ module ActionArgs
24
21
  super
25
22
  end
26
23
  end
27
-
28
- elsif Rails.version > '4.0'
29
- def apply(code)
30
- if (Symbol === @filter) && (@klass < ActionController::Base)
31
- method_body = <<-FILTER
32
- meth = method :#{@filter}
33
- method_parameters = meth.parameters
34
- ActionArgs::ParamsHandler.strengthen_params!(self.class, method_parameters, params)
35
- values = ActionArgs::ParamsHandler.extract_method_arguments_from_params method_parameters, params
36
- send :#{@filter}, *values
37
- FILTER
38
- if @kind == :before
39
- @filter = "begin\n#{method_body}\nend"
40
- else
41
- @filter = method_body.chomp
42
- end
43
- end
44
- super
45
- end
46
-
47
- else # Rails 3.2
48
- def start(key=nil, object=nil)
49
- if (Symbol === @filter) && (@klass < ActionController::Base)
50
- method_body = <<-FILTER
51
- meth = method :#{@filter}
52
- method_parameters = meth.parameters
53
- ActionArgs::ParamsHandler.strengthen_params!(self.class, method_parameters, params)
54
- values = ActionArgs::ParamsHandler.extract_method_arguments_from_params method_parameters, params
55
- send :#{@filter}, *values
56
- FILTER
57
- if @kind == :before
58
- @filter = "begin\n#{method_body}\nend"
59
- else
60
- @filter = method_body.chomp
61
- end
62
- end
63
- super
64
- end
65
- end
66
24
  end
67
25
  end
68
26
  end
@@ -1,51 +1,57 @@
1
1
  module ActionArgs
2
2
  module ParamsHandler
3
- # converts the request params Hash into an Array to be passed into the target Method
4
- def self.extract_method_arguments_from_params(method_parameters, params)
5
- kwargs, missing_required_params = {}, []
6
- parameter_names = method_parameters.map(&:last)
7
- method_parameters.reverse_each do |type, key|
8
- case type
9
- when :req
10
- missing_required_params << key unless params.has_key? key
11
- next
12
- when :keyreq
13
- if params.has_key? key
14
- kwargs[key] = params[key]
15
- else
16
- missing_required_params << key
3
+ refine AbstractController::Base do
4
+ def send_with_method_parameters_from_params(method_name, &blk)
5
+ strengthen_params! method_name
6
+ values = extract_method_arguments_from_params method_name
7
+ send method_name, *values, &blk
8
+ end
9
+
10
+ # converts the request params Hash into an Array to be passed into the target Method
11
+ def extract_method_arguments_from_params(method_name)
12
+ method_parameters = method(method_name).parameters
13
+ kwargs, missing_required_params = {}, []
14
+ parameter_names = method_parameters.map(&:last)
15
+ method_parameters.reverse_each do |type, key|
16
+ case type
17
+ when :req
18
+ missing_required_params << key unless params.has_key? key
19
+ next
20
+ when :keyreq
21
+ if params.has_key? key
22
+ kwargs[key] = params[key]
23
+ else
24
+ missing_required_params << key
25
+ end
26
+ when :key
27
+ kwargs[key] = params[key] if params.has_key? key
28
+ when :opt
29
+ break if params.has_key? key
17
30
  end
18
- when :key
19
- kwargs[key] = params[key] if params.has_key? key
20
- when :opt
21
- break if params.has_key? key
31
+ # omitting parameters that are :block, :rest, :opt without a param, and :key without a param
32
+ parameter_names.delete key
22
33
  end
23
- # omitting parameters that are :block, :rest, :opt without a param, and :key without a param
24
- parameter_names.delete key
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(', ')}"
34
+ if missing_required_params.any?
35
+ raise ActionController::BadRequest.new(:required, ArgumentError.new("Missing required parameters at #{self.class.name}##{method_name}: #{missing_required_params.join(', ')}"))
31
36
  end
32
- end
33
37
 
34
- values = parameter_names.map {|k| params[k]}
35
- values << kwargs if kwargs.any?
36
- values
37
- end
38
+ values = parameter_names.map {|k| params[k]}
39
+ values << kwargs if kwargs.any?
40
+ values
41
+ end
38
42
 
39
- # permits declared model attributes in the params Hash
40
- # note that this method mutates the given params Hash
41
- def self.strengthen_params!(controller_class, method_parameters, params)
42
- permitting_model_name = controller_class.instance_variable_defined?(:@permitting_model_name) && controller_class.instance_variable_get(:@permitting_model_name)
43
- target_model_name = (permitting_model_name || controller_class.name.sub(/.+::/, '').sub(/Controller$/, '')).singularize.underscore.tr('/', '_').to_sym
44
- permitted_attributes = controller_class.instance_variable_defined?(:@permitted_attributes) && controller_class.instance_variable_get(:@permitted_attributes)
43
+ # permits declared model attributes in the params Hash
44
+ # note that this method mutates the given params Hash
45
+ def strengthen_params!(method_name)
46
+ permitting_model_name = self.class.instance_variable_defined?(:@permitting_model_name) && self.class.instance_variable_get(:@permitting_model_name)
47
+ target_model_name = (permitting_model_name || self.class.name.sub(/.+::/, '').sub(/Controller$/, '')).singularize.underscore.tr('/', '_').to_sym
48
+ permitted_attributes = self.class.instance_variable_defined?(:@permitted_attributes) && self.class.instance_variable_get(:@permitted_attributes)
45
49
 
46
- method_parameters.each do |type, key|
47
- if (key == target_model_name) && permitted_attributes
48
- params[key] = params.require(key).try :permit, *permitted_attributes
50
+ method_parameters = method(method_name).parameters
51
+ method_parameters.each do |type, key|
52
+ if (key == target_model_name) && permitted_attributes
53
+ params[key] = params.require(key).try :permit, *permitted_attributes
54
+ end
49
55
  end
50
56
  end
51
57
  end
@@ -1,3 +1,3 @@
1
1
  module ActionArgs
2
- VERSION = '1.5.4'
2
+ VERSION = '2.0.0'
3
3
  end
@@ -10,6 +10,3 @@ module Rails
10
10
  end
11
11
  end
12
12
  end
13
-
14
- # load custom rspec generator
15
- require 'generators/action_args/rspec/scaffold/scaffold_generator' if defined? ::RSpec::Rails