Permalink
Browse files

Added new keyword to specify load paths as being component based. Add…

…ed better logging for component calls

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@713 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information...
1 parent beb2875 commit 12a75736303d67f17e29f25aa635d521a56d0de2 @dhh dhh committed Feb 20, 2005
@@ -224,7 +224,7 @@ class Base
# Template root determines the base from which template references will be made. So a call to render("test/template")
# will be converted to "#{template_root}/test/template.rhtml".
- cattr_accessor :template_root
+ class_inheritable_accessor :template_root
# The logger is used for generating information on the action run-time (including benchmarking) if available.
# Can be set to nil for no logging. Compatible with both Ruby's own Logger and Log4r loggers.
@@ -298,6 +298,20 @@ def hidden_actions
def hide_actions(*names)
write_inheritable_attribute(:hidden_actions, hidden_actions | names.collect {|n| n.to_s})
end
+
+ # Set the template root to be one directory behind the root dir of the controller. Examples:
+ # /code/weblog/components/admin/users_controller.rb with Admin::UsersController
+ # will use /code/weblog/components as template root
+ # and find templates in /code/weblog/components/admin/users/
+ #
+ # /code/weblog/components/admin/parties/users_controller.rb with Admin::Parties::UsersController
+ # will also use /code/weblog/components as template root
+ # and find templates in /code/weblog/components/admin/parties/users/
+ def uses_component_template_root
+ path_of_calling_controller = File.dirname(caller[0].split(/:\d+:/).first)
+ path_of_controller_root = path_of_calling_controller.sub(/#{controller_path.split("/")[0..-2]}$/, "")
+ self.template_root = path_of_controller_root
+ end
end
public
@@ -2,13 +2,21 @@ 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 }
+ base.helper do
+ def render_component(options)
+ @controller.logger.info("Start rendering component (#{options.inspect}): ")
+ @controller.send(:component_response, options).body
+ @controller.logger.info("\n\nEnd of component rendering")
+ end
+ end
end
protected
def render_component(options = {}) #:doc:
response = component_response(options)
+ logger.info "Rendering component (#{options.inspect}): "
render_text(response.body, response.headers["Status"])
+ logger.info("\n\nEnd of component rendering")
end
private
@@ -22,8 +30,11 @@ def component_class(options)
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
+ component_request.send(
+ :instance_variable_set, :@parameters,
+ (options[:params] || {}).merge({ "controller" => options[:controller], "action" => options[:action] })
+ )
+ return component_request
end
end
end
@@ -88,6 +88,4 @@ def inherited(child)
end
end
end
-end
-
-Controllers = Dependencies::LoadingModule.new(File.expand_path(File.join(RAILS_ROOT, 'app', 'controllers'))) if defined?(RAILS_ROOT)
+end
@@ -1,4 +1,4 @@
-<% unless @exception.blamed_files.empty? %>
+<% if @exception.blamed_files && !@exception.blamed_files.empty? %>
<a href="#" onclick="document.getElementById('blame_trace').style.display='block'; return false;">Show blamed files</a>
<pre id="blame_trace" style="display:none"><code><%=h @exception.describe_blame %></code></pre>
<% end %>

0 comments on commit 12a7573

Please sign in to comment.