Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Added preliminary version of render_component

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@697 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information...
commit 86b86b26473e28534df23f5379a3fea5d0e8514a 1 parent 0de0d20
David Heinemeier Hansson dhh authored
8 actionpack/lib/action_controller.rb
View
@@ -47,6 +47,10 @@
require 'action_controller/cookies'
require 'action_controller/cgi_process'
require 'action_controller/caching'
+require 'action_controller/components'
+
+require 'action_view'
+ActionController::Base.template_class = ActionView::Base
ActionController::Base.class_eval do
include ActionController::Filters
@@ -60,7 +64,5 @@
include ActionController::Cookies
include ActionController::Session
include ActionController::Caching
+ include ActionController::Components
end
-
-require 'action_view'
-ActionController::Base.template_class = ActionView::Base
29 actionpack/lib/action_controller/components.rb
View
@@ -0,0 +1,29 @@
+module ActionController #:nodoc:
+ module Components #:nodoc:
+ def self.append_features(base)
+ super
+ base.helper { def render_component(options) @controller.send(:component_response, options).body end }
+ end
+
+ protected
+ def render_component(options = {}) #:doc:
+ response = component_response(options)
+ render_text(response.body, response.response_code)
+ end
+
+ private
+ def component_response(options)
+ component_class(options).process(component_request(options), @response)
+ end
+
+ def component_class(options)
+ options[:controller] ? (options[:controller].camelize + "Controller").constantize : self
+ end
+
+ def component_request(options)
+ component_request = @request.dup
+ component_request.send(:instance_variable_set, :@parameters, options[:params].merge({ "controller" => options[:controller], "action" => options[:action] }))
+ component_request
+ end
+ end
+end
Please sign in to comment.
Something went wrong with that request. Please try again.