aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_controller/metal/parameter_encoding.rb
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2016-12-21 11:21:01 -0800
committerAaron Patterson <aaron.patterson@gmail.com>2016-12-21 12:04:00 -0800
commit2eb0a6630ac3ace528de04b308d0250ac613a318 (patch)
tree4331d5dfc64ca893faa61718f9a994d065654ca0 /actionpack/lib/action_controller/metal/parameter_encoding.rb
parent85b2a3ea2f4b614c1b7135e28b86e14fc109e8e5 (diff)
downloadrails-2eb0a6630ac3ace528de04b308d0250ac613a318.tar.gz
rails-2eb0a6630ac3ace528de04b308d0250ac613a318.tar.bz2
rails-2eb0a6630ac3ace528de04b308d0250ac613a318.zip
Document and update API for `skip_parameter_encoding`
This commit changes `parameter_encoding` to `skip_parameter_encoding`. `skip_parameter_encoding` will set encoding on all parameters to ASCII-8BIT for a given action on a particular controller. This allows the controller to handle data when the encoding of that data is unknown, for example file systems or truly binary parameters.
Diffstat (limited to 'actionpack/lib/action_controller/metal/parameter_encoding.rb')
-rw-r--r--actionpack/lib/action_controller/metal/parameter_encoding.rb35
1 files changed, 25 insertions, 10 deletions
diff --git a/actionpack/lib/action_controller/metal/parameter_encoding.rb b/actionpack/lib/action_controller/metal/parameter_encoding.rb
index c457fd0d06..8b2c414a5f 100644
--- a/actionpack/lib/action_controller/metal/parameter_encoding.rb
+++ b/actionpack/lib/action_controller/metal/parameter_encoding.rb
@@ -1,5 +1,5 @@
module ActionController
- # Allows encoding to be specified per parameter per action.
+ # Specify binary encoding for parameters for a given action.
module ParameterEncoding
extend ActiveSupport::Concern
@@ -13,17 +13,32 @@ module ActionController
@_parameter_encodings = {}
end
- def encoding_for_param(action, param) # :nodoc:
- if @_parameter_encodings[action.to_s] && @_parameter_encodings[action.to_s][param.to_s]
- @_parameter_encodings[action.to_s][param.to_s]
- else
- super
- end
+ def binary_params_for?(action) # :nodoc:
+ @_parameter_encodings[action.to_s]
end
- def parameter_encoding(action, param_name, encoding)
- @_parameter_encodings[action.to_s] ||= {}
- @_parameter_encodings[action.to_s][param_name.to_s] = encoding
+ # Specify that a given action's parameters should all be encoded as
+ # ASCII-8BIT (it "skips" the encoding default of UTF-8).
+ #
+ # For example, a controller would use it like this:
+ #
+ # class RepositoryController < ActionController::Base
+ # skip_parameter_encoding :show
+ #
+ # def show
+ # @repo = Repository.find_by_filesystem_path params[:file_path]
+ # end
+ #
+ # def index
+ # @repositories = Repository.all
+ # end
+ # end
+ #
+ # The show action in the above controller would have all parameter values
+ # encoded as ASCII-8BIT. This is useful in the case where an application
+ # must handle data but encoding of the data is unknown, like file system data.
+ def skip_parameter_encoding(action)
+ @_parameter_encodings[action.to_s] = true
end
end
end