提交 a4c04a43 编写于 作者: J Jose and Yehuda

Refactor to make renderers a Set

上级 8ff7693a
require 'active_support/core_ext/class/attribute'
require 'active_support/core_ext/object/blank'
require 'set'
module ActionController
# See <tt>Renderers.add</tt>
......@@ -12,16 +13,13 @@ module Renderers
included do
class_attribute :_renderers
self._renderers = {}.freeze
self._renderers = Set.new.freeze
end
module ClassMethods
def use_renderers(*args)
new = _renderers.dup
args.each do |key|
new[key] = RENDERERS[key]
end
self._renderers = new.freeze
renderers = _renderers + args
self._renderers = renderers.freeze
end
alias use_renderer use_renderers
end
......@@ -31,10 +29,10 @@ def render_to_body(options)
end
def _handle_render_options(options)
_renderers.each do |name, value|
if options.key?(name.to_sym)
_renderers.each do |name|
if options.key?(name)
_process_options(options)
return send("_render_option_#{name}", options.delete(name.to_sym), options)
return send("_render_option_#{name}", options.delete(name), options)
end
end
nil
......@@ -42,7 +40,7 @@ def _handle_render_options(options)
# Hash of available renderers, mapping a renderer name to its proc.
# Default keys are :json, :js, :xml.
RENDERERS = {}
RENDERERS = Set.new
# Adds a new renderer to call within controller actions.
# A renderer is invoked by passing its name as an option to
......@@ -79,7 +77,7 @@ def _handle_render_options(options)
# <tt>ActionController::MimeResponds#respond_with</tt>
def self.add(key, &block)
define_method("_render_option_#{key}", &block)
RENDERERS[key] = block
RENDERERS << key.to_sym
end
module All
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册