<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -4,8 +4,35 @@ module Rails
       base.extend ClassMethods
     end
 
-    Initializer = Struct.new(:name, :before, :after, :global, :block) do
+    class Initializer
+      attr_reader :name, :before, :after, :global, :block
+
+      def initialize(name, context, options, &amp;block)
+        @name, @context, @options, @block = name, context, options, block
+      end
+
+      def before
+        @options[:before]
+      end
+
+      def after
+        @options[:after]
+      end
+
+      def global
+        @options[:global]
+      end
+
       alias global? global
+
+      def run(*args)
+        @context.instance_exec(*args, &amp;block)
+      end
+
+      def bind(context)
+        return self if @context
+        Initializer.new(@name, context, @options, &amp;block)
+      end
     end
 
     class Collection &lt; Array
@@ -35,12 +62,19 @@ module Rails
 
     def run_initializers(*args)
       return if @ran
-      self.class.initializers_for(:instance).each do |initializer|
-        instance_exec(*args, &amp;initializer.block)
+      initializers.each do |initializer|
+        initializer.run(*args)
       end
       @ran = true
     end
 
+    def initializers
+      @initializers ||= begin
+        initializers = self.class.initializers_for(:instance)
+        Collection.new(initializers.map { |i| i.bind(self) })
+      end
+    end
+
     module ClassMethods
       def initializers
         @initializers ||= []
@@ -59,7 +93,7 @@ module Rails
 
       def initializer(name, opts = {}, &amp;blk)
         @initializers ||= []
-        @initializers &lt;&lt; Initializer.new(name, opts[:before], opts[:after], opts[:global], blk)
+        @initializers &lt;&lt; Initializer.new(name, nil, opts, &amp;blk)
       end
 
       def run_initializers(*args)</diff>
      <filename>railties/lib/rails/initializable.rb</filename>
    </modified>
    <modified>
      <diff>@@ -94,7 +94,11 @@ module InitializableTests
       include Rails::Initializable
 
       initializer :startup, :before =&gt; :last do
-        $arr &lt;&lt; 2
+        $arr &lt;&lt; two
+      end
+
+      def two
+        2
       end
     end
 
@@ -109,7 +113,7 @@ module InitializableTests
     end
 
     def self.initializers
-      super + MoreInitializers.initializers
+      super + MoreInitializers.new.initializers
     end
   end
 </diff>
      <filename>railties/test/initializable_test.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>897164ddb70ed6f51b026e5c91f2bf3f7aa46ba6</id>
    </parent>
  </parents>
  <author>
    <name>Yehuda Katz + Carl Lerche</name>
    <email>ykatz+clerche@engineyard.com</email>
  </author>
  <url>http://github.com/rails/rails/commit/43694269934540de2a73130d7ff47bd1a25ed3e4</url>
  <id>43694269934540de2a73130d7ff47bd1a25ed3e4</id>
  <committed-date>2009-11-05T14:45:53-08:00</committed-date>
  <authored-date>2009-11-05T14:45:53-08:00</authored-date>
  <message>Add the ability to merge initializers from various objects in order.</message>
  <tree>c1f0cdeb90bdccd217c88c645a2ebd78c4d0e772</tree>
  <committer>
    <name>Yehuda Katz + Carl Lerche</name>
    <email>ykatz+clerche@engineyard.com</email>
  </committer>
</commit>
