diff options
author | Benjamin Fleischer <github@benjaminfleischer.com> | 2016-01-03 22:54:42 -0600 |
---|---|---|
committer | Benjamin Fleischer <github@benjaminfleischer.com> | 2016-01-03 22:54:42 -0600 |
commit | f2b3b4019a292d5488bda096a35a70849db585a5 (patch) | |
tree | cdd9dadf02af5a2b3d99fa0d61cf67e229b67cef | |
parent | f27360af04f11506d7081b2bd46c9ea0413a910c (diff) | |
download | rails-f2b3b4019a292d5488bda096a35a70849db585a5.tar.gz rails-f2b3b4019a292d5488bda096a35a70849db585a5.tar.bz2 rails-f2b3b4019a292d5488bda096a35a70849db585a5.zip |
Group related methods together
-rw-r--r-- | actionpack/lib/action_controller/metal/renderers.rb | 134 |
1 files changed, 67 insertions, 67 deletions
diff --git a/actionpack/lib/action_controller/metal/renderers.rb b/actionpack/lib/action_controller/metal/renderers.rb index f171c4d172..d5e7a8ffb4 100644 --- a/actionpack/lib/action_controller/metal/renderers.rb +++ b/actionpack/lib/action_controller/metal/renderers.rb @@ -21,11 +21,78 @@ module ActionController module Renderers extend ActiveSupport::Concern + # A Set containing renderer names that correspond to available renderer procs. + # Default values are <tt>:json</tt>, <tt>:js</tt>, <tt>:xml</tt>. + RENDERERS = Set.new + included do class_attribute :_renderers self._renderers = Set.new.freeze end + # Used in <tt>ActionController::Base</tt> + # and <tt>ActionController::API</tt> to include all + # renderers by default. + module All + extend ActiveSupport::Concern + include Renderers + + included do + self._renderers = RENDERERS + end + end + + # Adds a new renderer to call within controller actions. + # A renderer is invoked by passing its name as an option to + # <tt>AbstractController::Rendering#render</tt>. To create a renderer + # pass it a name and a block. The block takes two arguments, the first + # is the value paired with its key and the second is the remaining + # hash of options passed to +render+. + # + # Create a csv renderer: + # + # ActionController::Renderers.add :csv do |obj, options| + # filename = options[:filename] || 'data' + # str = obj.respond_to?(:to_csv) ? obj.to_csv : obj.to_s + # send_data str, type: Mime[:csv], + # disposition: "attachment; filename=#{filename}.csv" + # end + # + # Note that we used Mime[:csv] for the csv mime type as it comes with Rails. + # For a custom renderer, you'll need to register a mime type with + # <tt>Mime::Type.register</tt>. + # + # To use the csv renderer in a controller action: + # + # def show + # @csvable = Csvable.find(params[:id]) + # respond_to do |format| + # format.html + # format.csv { render csv: @csvable, filename: @csvable.name } + # end + # end + # To use renderers and their mime types in more concise ways, see + # <tt>ActionController::MimeResponds::ClassMethods.respond_to</tt> + def self.add(key, &block) + define_method(_render_with_renderer_method_name(key), &block) + RENDERERS << key.to_sym + end + + # This method is the opposite of add method. + # + # To remove a csv renderer: + # + # ActionController::Renderers.remove(:csv) + def self.remove(key) + RENDERERS.delete(key.to_sym) + method_name = _render_with_renderer_method_name(key) + remove_method(method_name) if method_defined?(method_name) + end + + def self._render_with_renderer_method_name(key) + "_render_with_renderer_#{key}" + end + module ClassMethods # Adds, by name, a renderer or renderers to the +_renderers+ available @@ -88,73 +155,6 @@ module ActionController nil end - # A Set containing renderer names that correspond to available renderer procs. - # Default values are <tt>:json</tt>, <tt>:js</tt>, <tt>:xml</tt>. - RENDERERS = Set.new - - def self._render_with_renderer_method_name(key) - "_render_with_renderer_#{key}" - end - - # Adds a new renderer to call within controller actions. - # A renderer is invoked by passing its name as an option to - # <tt>AbstractController::Rendering#render</tt>. To create a renderer - # pass it a name and a block. The block takes two arguments, the first - # is the value paired with its key and the second is the remaining - # hash of options passed to +render+. - # - # Create a csv renderer: - # - # ActionController::Renderers.add :csv do |obj, options| - # filename = options[:filename] || 'data' - # str = obj.respond_to?(:to_csv) ? obj.to_csv : obj.to_s - # send_data str, type: Mime[:csv], - # disposition: "attachment; filename=#{filename}.csv" - # end - # - # Note that we used Mime[:csv] for the csv mime type as it comes with Rails. - # For a custom renderer, you'll need to register a mime type with - # <tt>Mime::Type.register</tt>. - # - # To use the csv renderer in a controller action: - # - # def show - # @csvable = Csvable.find(params[:id]) - # respond_to do |format| - # format.html - # format.csv { render csv: @csvable, filename: @csvable.name } - # end - # end - # To use renderers and their mime types in more concise ways, see - # <tt>ActionController::MimeResponds::ClassMethods.respond_to</tt> - def self.add(key, &block) - define_method(_render_with_renderer_method_name(key), &block) - RENDERERS << key.to_sym - end - - # This method is the opposite of add method. - # - # To remove a csv renderer: - # - # ActionController::Renderers.remove(:csv) - def self.remove(key) - RENDERERS.delete(key.to_sym) - method_name = _render_with_renderer_method_name(key) - remove_method(method_name) if method_defined?(method_name) - end - - # Used in <tt>ActionController::Base</tt> - # and <tt>ActionController::API</tt> to include all - # renderers by default. - module All - extend ActiveSupport::Concern - include Renderers - - included do - self._renderers = RENDERERS - end - end - add :json do |json, options| json = json.to_json(options) unless json.kind_of?(String) |