<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>activesupport/lib/active_support/core_ext/module/setup.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -1,11 +1,8 @@
 module AbstractController
   module Callbacks
-    def self.included(klass)
-      klass.class_eval do
-        include ActiveSupport::NewCallbacks
-        define_callbacks :process_action
-        extend ClassMethods
-      end
+    setup do
+      include ActiveSupport::NewCallbacks
+      define_callbacks :process_action      
     end
     
     def process_action</diff>
      <filename>actionpack/lib/action_controller/abstract/callbacks.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,17 +1,18 @@
 module AbstractController
   module Helpers
-  
-    def self.included(klass)
-      klass.class_eval do
-        extend ClassMethods
-        unless self &lt; ::AbstractController::Renderer
-          raise &quot;You need to include AbstractController::Renderer before including &quot; \
-                &quot;AbstractController::Helpers&quot;
-        end
-        extlib_inheritable_accessor :master_helper_module
-        self.master_helper_module = Module.new
-      end
+    depends_on Renderer
+    
+    setup do
+      extlib_inheritable_accessor :master_helper_module
+      self.master_helper_module = Module.new
     end
+  
+    # def self.included(klass)
+    #   klass.class_eval do
+    #     extlib_inheritable_accessor :master_helper_module
+    #     self.master_helper_module = Module.new
+    #   end
+    # end
     
     def _action_view
       @_action_view ||= begin</diff>
      <filename>actionpack/lib/action_controller/abstract/helpers.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,25 +1,24 @@
 module AbstractController
   module Layouts
     
-    def self.included(base)
-      base.extend ClassMethods
-    end
-    
+    depends_on Renderer
+        
     module ClassMethods
       def layout(layout)
         unless [String, Symbol, FalseClass, NilClass].include?(layout.class)
           raise ArgumentError, &quot;Layouts must be specified as a String, Symbol, false, or nil&quot;
         end
         
-        @layout = layout || false # Converts nil to false
+        @_layout = layout || false # Converts nil to false
+        _write_layout_method
       end
       
       def _write_layout_method
-        case @layout
+        case @_layout
         when String
-          self.class_eval %{def _layout() #{@layout.inspect} end}
+          self.class_eval %{def _layout() #{@_layout.inspect} end}
         when Symbol
-          self.class_eval %{def _layout() #{@layout} end}
+          self.class_eval %{def _layout() #{@_layout} end}
         when false
           self.class_eval %{def _layout() end}
         else
@@ -43,7 +42,7 @@ module AbstractController
   private
   
     def _layout() end # This will be overwritten
-    
+
     def _layout_for_option(name)
       case name
       when String then _layout_for_name(name)</diff>
      <filename>actionpack/lib/action_controller/abstract/layouts.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 module AbstractController
   module Logger
-    def self.included(klass)
-      klass.cattr_accessor :logger
+    setup do
+      cattr_accessor :logger
     end
   end
 end
\ No newline at end of file</diff>
      <filename>actionpack/lib/action_controller/abstract/logger.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,20 +2,16 @@ require &quot;action_controller/abstract/logger&quot;
 
 module AbstractController
   module Renderer
+    depends_on AbstractController::Logger
     
-    def self.included(klass)
-      klass.class_eval do        
-        extend ClassMethods
-        
-        attr_internal :formats
-        
-        extlib_inheritable_accessor :_view_paths
-        
-        self._view_paths ||= ActionView::PathSet.new
-        include AbstractController::Logger
-      end
+    setup do
+      attr_internal :formats
+      
+      extlib_inheritable_accessor :_view_paths
+      
+      self._view_paths ||= ActionView::PathSet.new
     end
-    
+        
     def _action_view
       @_action_view ||= ActionView::Base.new(self.class.view_paths, {}, self)      
     end</diff>
      <filename>actionpack/lib/action_controller/abstract/renderer.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,11 +1,8 @@
 module ActionController
   module HideActions
-    def self.included(klass)
-      klass.class_eval do
-        extend ClassMethods
-        extlib_inheritable_accessor :hidden_actions
-        self.hidden_actions ||= Set.new
-      end
+    setup do
+      extlib_inheritable_accessor :hidden_actions
+      self.hidden_actions ||= Set.new      
     end
     
     def action_methods() self.class.action_names end</diff>
      <filename>actionpack/lib/action_controller/new_base/hide_actions.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,8 @@
 module ActionController
   module Layouts
+    depends_on ActionController::Renderer
+    depends_on AbstractController::Layouts
+    
     def render_to_string(options)
       if !options.key?(:text) || options.key?(:layout)
         options[:_layout] = options.key?(:layout) ? _layout_for_option(options[:layout]) : _default_layout</diff>
      <filename>actionpack/lib/action_controller/new_base/layouts.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,15 +1,6 @@
 module ActionController
   module Renderer
-    
-    # def self.included(klass)
-    #   klass.extend ClassMethods
-    # end
-    # 
-    # module ClassMethods
-    #   def prefix
-    #     @prefix ||= name.underscore
-    #   end      
-    # end
+    depends_on AbstractController::Renderer
     
     def initialize(*)
       self.formats = [:html]</diff>
      <filename>actionpack/lib/action_controller/new_base/renderer.rb</filename>
    </modified>
    <modified>
      <diff>@@ -27,7 +27,7 @@ module AbstractController
     # Test Render mixin
     # ====
     class RenderingController &lt; AbstractController::Base
-      include Renderer
+      use Renderer
 
       def _prefix() end
 
@@ -116,7 +116,7 @@ module AbstractController
     # ====
     # self._layout is used when defined
     class WithLayouts &lt; PrefixedViews
-      include Layouts
+      use Layouts
       
       private
       def self.layout(formats)</diff>
      <filename>actionpack/test/abstract_controller/abstract_controller_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -4,7 +4,7 @@ module AbstractController
   module Testing
   
     class ControllerWithCallbacks &lt; AbstractController::Base
-      include AbstractController::Callbacks
+      use AbstractController::Callbacks
     end
     
     class Callback1 &lt; ControllerWithCallbacks</diff>
      <filename>actionpack/test/abstract_controller/callbacks_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -4,8 +4,8 @@ module AbstractController
   module Testing
   
     class ControllerWithHelpers &lt; AbstractController::Base
-      include Renderer
-      include Helpers
+      use Renderer
+      use Helpers
       
       def render(string)
         super(:_template_name =&gt; string)</diff>
      <filename>actionpack/test/abstract_controller/helper_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -5,8 +5,8 @@ module AbstractControllerTests
 
     # Base controller for these tests
     class Base &lt; AbstractController::Base
-      include AbstractController::Renderer
-      include AbstractController::Layouts
+      use AbstractController::Renderer
+      use AbstractController::Layouts
       
       self.view_paths = [ActionView::FixtureTemplate::FixturePath.new(
         &quot;layouts/hello.erb&quot;              =&gt; &quot;With String &lt;%= yield %&gt;&quot;,</diff>
      <filename>actionpack/test/abstract_controller/layouts_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -26,16 +26,14 @@ require 'rack/test'
 
 module ActionController
   class Base2 &lt; AbstractBase
-    include AbstractController::Callbacks
-    include AbstractController::Renderer
-    include AbstractController::Helpers
-    include AbstractController::Layouts
-    include AbstractController::Logger
-    
-    include ActionController::HideActions
-    include ActionController::UrlFor
-    include ActionController::Layouts
-    include ActionController::Renderer
+    use AbstractController::Callbacks
+    use AbstractController::Helpers
+    use AbstractController::Logger
+
+    use ActionController::HideActions
+    use ActionController::UrlFor
+    use ActionController::Renderer
+    use ActionController::Layouts
     
     def self.inherited(klass)
       ::ActionController::Base2.subclasses &lt;&lt; klass.to_s</diff>
      <filename>actionpack/test/new_base/test_helper.rb</filename>
    </modified>
    <modified>
      <diff>@@ -8,6 +8,7 @@ require 'active_support/core_ext/module/loading'
 require 'active_support/core_ext/module/aliasing'
 require 'active_support/core_ext/module/model_naming'
 require 'active_support/core_ext/module/synchronization'
+require 'active_support/core_ext/module/setup'
 
 module ActiveSupport
   module CoreExtensions</diff>
      <filename>activesupport/lib/active_support/core_ext/module.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>9c8eaf8e254cf8ccaa6ecae3fdf1f468fbb60db8</id>
    </parent>
  </parents>
  <author>
    <name>Yehuda Katz and Carl Lerche</name>
    <email>wycats@gmail.com</email>
  </author>
  <url>http://github.com/rails/rails/commit/c1aa5b0e14cd4bd27a5d8bd85cf7c36fa5911830</url>
  <id>c1aa5b0e14cd4bd27a5d8bd85cf7c36fa5911830</id>
  <committed-date>2009-04-07T14:57:18-07:00</committed-date>
  <authored-date>2009-04-07T14:57:18-07:00</authored-date>
  <message>Add depends_on, use, and setup to abstract up ideas about module inheritance.</message>
  <tree>c4d08a6227e5a39cb65726fa40c2c54516068d24</tree>
  <committer>
    <name>Yehuda Katz and Carl Lerche</name>
    <email>wycats@gmail.com</email>
  </committer>
</commit>
