aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_controller
diff options
context:
space:
mode:
authorYehuda Katz and Carl Lerche <wycats@gmail.com>2009-04-06 12:35:44 -0700
committerYehuda Katz and Carl Lerche <wycats@gmail.com>2009-04-06 12:35:44 -0700
commit9c8eaf8e254cf8ccaa6ecae3fdf1f468fbb60db8 (patch)
tree9f5a7e72bcd1fecc54499e21f3e4ebb2ea62da1a /actionpack/lib/action_controller
parent4d3cd9b43f6b7425ca3eee303773d2221e8af38f (diff)
parent1d3e2c2b7333c90f2ef26fd0a3c6184aeaeb7e8a (diff)
downloadrails-9c8eaf8e254cf8ccaa6ecae3fdf1f468fbb60db8.tar.gz
rails-9c8eaf8e254cf8ccaa6ecae3fdf1f468fbb60db8.tar.bz2
rails-9c8eaf8e254cf8ccaa6ecae3fdf1f468fbb60db8.zip
Merge branch 'abstract_controller' of git@github.com:wycats/rails into abstract_controller
Diffstat (limited to 'actionpack/lib/action_controller')
-rw-r--r--actionpack/lib/action_controller/abstract/layouts.rb42
1 files changed, 31 insertions, 11 deletions
diff --git a/actionpack/lib/action_controller/abstract/layouts.rb b/actionpack/lib/action_controller/abstract/layouts.rb
index 29b610610f..20c9abb9e5 100644
--- a/actionpack/lib/action_controller/abstract/layouts.rb
+++ b/actionpack/lib/action_controller/abstract/layouts.rb
@@ -6,7 +6,34 @@ module AbstractController
end
module ClassMethods
- def _layout() end
+ def layout(layout)
+ unless [String, Symbol, FalseClass, NilClass].include?(layout.class)
+ raise ArgumentError, "Layouts must be specified as a String, Symbol, false, or nil"
+ end
+
+ @layout = layout || false # Converts nil to false
+ end
+
+ def _write_layout_method
+ case @layout
+ when String
+ self.class_eval %{def _layout() #{@layout.inspect} end}
+ when Symbol
+ self.class_eval %{def _layout() #{@layout} end}
+ when false
+ self.class_eval %{def _layout() end}
+ else
+ self.class_eval %{
+ def _layout
+ if view_paths.find_by_parts?("#{controller_path}", formats, "layouts")
+ "#{controller_path}"
+ else
+ super
+ end
+ end
+ }
+ end
+ end
end
def _render_template(template, options)
@@ -14,6 +41,8 @@ module AbstractController
end
private
+
+ def _layout() end # This will be overwritten
def _layout_for_option(name)
case name
@@ -28,16 +57,7 @@ module AbstractController
end
def _default_layout(require_layout = false)
- # begin
- # _layout_for_name(controller_path)
- # rescue ActionView::MissingTemplate
- # begin
- # _layout_for_name("application")
- # rescue ActionView::MissingTemplate => e
- # raise e if require_layout
- # end
- # end
- _layout_for_option(self.class._layout)
+ _layout_for_option(_layout)
end
end
end \ No newline at end of file