Added the :xml render option

上级 2daac47d
...@@ -63,7 +63,7 @@ Rake::TestTask.new(:test_new_base_on_old_tests) do |t| ...@@ -63,7 +63,7 @@ Rake::TestTask.new(:test_new_base_on_old_tests) do |t|
t.test_files = %w( t.test_files = %w(
addresses_render base benchmark caching capture content_type dispatcher addresses_render base benchmark caching capture content_type dispatcher
flash mime_responds record_identifier redirect flash mime_responds record_identifier redirect
render render_json render render_json render_xml
send_file request_forgery_protection rescue url_rewriter verification webservice send_file request_forgery_protection rescue url_rewriter verification webservice
).map { |name| "test/controller/#{name}_test.rb" } ).map { |name| "test/controller/#{name}_test.rb" }
end end
......
...@@ -11,8 +11,8 @@ class Base < Http ...@@ -11,8 +11,8 @@ class Base < Http
include ActionController::UrlFor include ActionController::UrlFor
include ActionController::Redirector include ActionController::Redirector
include ActionController::Renderer include ActionController::Renderer
include ActionController::RenderOptions
include ActionController::Renderers::Json include ActionController::Renderers::Json
include ActionController::Renderers::Xml
include ActionController::Layouts include ActionController::Layouts
include ActionController::ConditionalGet include ActionController::ConditionalGet
......
...@@ -18,15 +18,23 @@ def render_to_body(options) ...@@ -18,15 +18,23 @@ def render_to_body(options)
end end
end end
module Renderers module RenderOption
module Json extend ActiveSupport::DependencyModule
included do
extend ActiveSupport::DependencyModule extend ActiveSupport::DependencyModule
depends_on RenderOptions depends_on RenderOptions
included do def self.register_renderer(name)
_renderers << :json included { _renderers << name }
end end
end
end
module Renderers
module Json
include RenderOption
register_renderer :json
def _render_json(json, options) def _render_json(json, options)
json = ActiveSupport::JSON.encode(json) unless json.respond_to?(:to_str) json = ActiveSupport::JSON.encode(json) unless json.respond_to?(:to_str)
...@@ -35,5 +43,15 @@ def _render_json(json, options) ...@@ -35,5 +43,15 @@ def _render_json(json, options)
self.response_body = json self.response_body = json
end end
end end
module Xml
include RenderOption
register_renderer :xml
def _render_xml(xml, options)
response.content_type ||= Mime::XML
self.response_body = xml.respond_to?(:to_xml) ? xml.to_xml : xml
end
end
end end
end end
\ No newline at end of file
...@@ -79,9 +79,10 @@ def _render_partial(partial, options) ...@@ -79,9 +79,10 @@ def _render_partial(partial, options)
end end
def _process_options(options) def _process_options(options)
status, content_type = options.values_at(:status, :content_type) status, content_type, location = options.values_at(:status, :content_type, :location)
response.status = status.to_i if status response.status = status.to_i if status
response.content_type = content_type if content_type response.content_type = content_type if content_type
response.headers["Location"] = url_for(location) if location
end end
end end
end end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册