From a2c9a7308474bc1d7fc35df9560c46125d94f5a4 Mon Sep 17 00:00:00 2001
From: Jorge Bejar <jorge@wyeworks.com>
Date: Tue, 2 Jun 2015 15:48:20 -0300
Subject: Include ParamsWrapper in AC::API

ParamsWrapper was initially removed from API controllers according to
the following discusision:
https://github.com/rails-api/rails-api/issues/33

However, we're including it again so Rails API devs can decide
whether to enable or disable it.
---
 actionpack/lib/action_controller/api.rb            |  6 ++++-
 .../test/controller/api/params_wrapper_test.rb     | 26 ++++++++++++++++++++++
 2 files changed, 31 insertions(+), 1 deletion(-)
 create mode 100644 actionpack/test/controller/api/params_wrapper_test.rb

diff --git a/actionpack/lib/action_controller/api.rb b/actionpack/lib/action_controller/api.rb
index 9dc96bd3e6..b4583a073b 100644
--- a/actionpack/lib/action_controller/api.rb
+++ b/actionpack/lib/action_controller/api.rb
@@ -128,7 +128,11 @@ module ActionController
 
       # Add instrumentations hooks at the bottom, to ensure they instrument
       # all the methods properly.
-      Instrumentation
+      Instrumentation,
+
+      # Params wrapper should come before instrumentation so they are
+      # properly showed in logs
+      ParamsWrapper
     ]
 
     MODULES.each do |mod|
diff --git a/actionpack/test/controller/api/params_wrapper_test.rb b/actionpack/test/controller/api/params_wrapper_test.rb
new file mode 100644
index 0000000000..e40a39d829
--- /dev/null
+++ b/actionpack/test/controller/api/params_wrapper_test.rb
@@ -0,0 +1,26 @@
+require 'abstract_unit'
+
+class ParamsWrapperForApiTest < ActionController::TestCase
+  class UsersController < ActionController::API
+    attr_accessor :last_parameters
+
+    wrap_parameters :person, format: [:json]
+
+    def test
+      self.last_parameters = params.except(:controller, :action)
+      head :ok
+    end
+  end
+
+  class Person; end
+
+  tests UsersController
+
+  def test_specify_wrapper_name
+    @request.env['CONTENT_TYPE'] = 'application/json'
+    post :test, params: { 'username' => 'sikachu' }
+
+    expected = { 'username' => 'sikachu', 'person' => { 'username' => 'sikachu' }}
+    assert_equal expected, @controller.last_parameters
+  end
+end
-- 
cgit v1.2.3