<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>actionpack/test/template/erb_util_test.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -11,7 +11,7 @@ end
 desc 'Run all tests by default'
 task :default =&gt; :test
 
-%w(test docs package pgem release).each do |task_name|
+%w(test rdoc package pgem release).each do |task_name|
   desc &quot;Run #{task_name} task for all projects&quot;
   task task_name do
     PROJECTS.each do |project|</diff>
      <filename>Rakefile</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,8 @@
+*2.0.2* (December 16th, 2007)
+
+* Included in Rails 2.0.2
+
+
 *2.0.1* (December 7th, 2007)
 
 * Update ActionMailer so it treats ActionView the same way that ActionController does.  Closes #10244 [rick]</diff>
      <filename>actionmailer/CHANGELOG</filename>
    </modified>
    <modified>
      <diff>@@ -55,7 +55,7 @@ spec = Gem::Specification.new do |s|
   s.rubyforge_project = &quot;actionmailer&quot;
   s.homepage = &quot;http://www.rubyonrails.org&quot;
 
-  s.add_dependency('actionpack', '= 2.0.1' + PKG_BUILD)
+  s.add_dependency('actionpack', '= 2.0.2' + PKG_BUILD)
 
   s.has_rdoc = true
   s.requirements &lt;&lt; 'none'</diff>
      <filename>actionmailer/Rakefile</filename>
    </modified>
    <modified>
      <diff>@@ -2,7 +2,7 @@ module ActionMailer
   module VERSION #:nodoc:
     MAJOR = 2
     MINOR = 0
-    TINY  = 1
+    TINY  = 2
 
     STRING = [MAJOR, MINOR, TINY].join('.')
   end</diff>
      <filename>actionmailer/lib/action_mailer/version.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,20 @@
-*SVN*
+*2.0.2* (December 16th, 2007)
+
+* Added delete_via_redirect and put_via_redirect to integration testing #10497 [philodespotos]
+
+* Allow headers['Accept'] to be set by hand when calling xml_http_request #10461 [BMorearty]
+
+* Added OPTIONS to list of default accepted HTTP methods #10449 [holoway]
+
+* Added option to pass proc to ActionController::Base.asset_host for maximum configurability #10521 [chuyeow]. Example:
+
+    ActionController::Base.asset_host = Proc.new { |source|
+      if source.starts_with?('/images')
+        &quot;http://images.example.com&quot;
+      else
+        &quot;http://assets.example.com&quot;
+      end
+    }
 
 * Fixed that ActionView#file_exists? would be incorrect if @first_render is set #10569 [dbussink]
 </diff>
      <filename>actionpack/CHANGELOG</filename>
    </modified>
    <modified>
      <diff>@@ -76,7 +76,7 @@ spec = Gem::Specification.new do |s|
   s.has_rdoc = true
   s.requirements &lt;&lt; 'none'
 
-  s.add_dependency('activesupport', '= 2.0.1' + PKG_BUILD)
+  s.add_dependency('activesupport', '= 2.0.2' + PKG_BUILD)
 
   s.require_path = 'lib'
   s.autorequire = 'action_controller'</diff>
      <filename>actionpack/Rakefile</filename>
    </modified>
    <modified>
      <diff>@@ -121,23 +121,38 @@ module ActionController
         status
       end
 
-      # Performs a GET request, following any subsequent redirect. Note that
-      # the redirects are followed until the response is not a redirect--this
-      # means you may run into an infinite loop if your redirect loops back to
-      # itself. Headers are treated in the same way as #get.
-      def get_via_redirect(path, args={}, headers = {})
-        get path, args, headers
+      # Performs a request using the specified method, following any subsequent
+      # redirect. Note that the redirects are followed until the response is
+      # not a redirect--this means you may run into an infinite loop if your
+      # redirect loops back to itself.
+      def request_via_redirect(http_method, path, parameters = nil, headers = nil)
+        send(http_method, path, parameters, headers)
         follow_redirect! while redirect?
         status
       end
 
-      # Performs a POST request, following any subsequent redirect. This is
-      # vulnerable to infinite loops, the same as #get_via_redirect. Headers are
-      # treated in the same way as #get.
-      def post_via_redirect(path, args={}, headers = {})
-        post path, args, headers
-        follow_redirect! while redirect?
-        status
+      # Performs a GET request, following any subsequent redirect.
+      # See #request_via_redirect() for more information.
+      def get_via_redirect(path, parameters = nil, headers = nil)
+        request_via_redirect(:get, path, parameters, headers)
+      end
+
+      # Performs a POST request, following any subsequent redirect.
+      # See #request_via_redirect() for more information.
+      def post_via_redirect(path, parameters = nil, headers = nil)
+        request_via_redirect(:post, path, parameters, headers)
+      end
+
+      # Performs a PUT request, following any subsequent redirect.
+      # See #request_via_redirect() for more information.
+      def put_via_redirect(path, parameters = nil, headers = nil)
+        request_via_redirect(:put, path, parameters, headers)
+      end
+
+      # Performs a DELETE request, following any subsequent redirect.
+      # See #request_via_redirect() for more information.
+      def delete_via_redirect(path, parameters = nil, headers = nil)
+        request_via_redirect(:delete, path, parameters, headers)
       end
 
       # Returns +true+ if the last response was a redirect.
@@ -187,7 +202,7 @@ module ActionController
       def xml_http_request(request_method, path, parameters = nil, headers = nil)
         headers ||= {}
         headers['X-Requested-With'] = 'XMLHttpRequest'
-        headers['Accept'] = 'text/javascript, text/html, application/xml, text/xml, */*'
+        headers['Accept'] ||= 'text/javascript, text/html, application/xml, text/xml, */*'
 
         process(request_method, path, parameters, headers)
       end</diff>
      <filename>actionpack/lib/action_controller/integration.rb</filename>
    </modified>
    <modified>
      <diff>@@ -4,7 +4,7 @@ require 'strscan'
 
 module ActionController
   # HTTP methods which are accepted by default. 
-  ACCEPTED_HTTP_METHODS = Set.new(%w( get head put post delete ))
+  ACCEPTED_HTTP_METHODS = Set.new(%w( get head put post delete options ))
 
   # CgiRequest and TestRequest provide concrete implementations.
   class AbstractRequest</diff>
      <filename>actionpack/lib/action_controller/request.rb</filename>
    </modified>
    <modified>
      <diff>@@ -35,7 +35,7 @@ require 'openssl'       # to generate the HMAC message digest
 #             such as 'MD5', 'RIPEMD160', 'SHA256', etc.
 #
 # To generate a secret key for an existing application, run
-# `rake generate:secret` and set the key in config/environment.rb
+# `rake secret` and set the key in config/environment.rb
 #
 # Note that changing digest or secret invalidates all existing sessions!
 class CGI::Session::CookieStore</diff>
      <filename>actionpack/lib/action_controller/session/cookie_store.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,7 +2,7 @@ module ActionPack #:nodoc:
   module VERSION #:nodoc:
     MAJOR = 2
     MINOR = 0
-    TINY  = 1
+    TINY  = 2
 
     STRING = [MAJOR, MINOR, TINY].join('.')
   end</diff>
      <filename>actionpack/lib/action_pack/version.rb</filename>
    </modified>
    <modified>
      <diff>@@ -31,7 +31,7 @@ module ActionView
     #   stylesheet_include_tag(&quot;application&quot;)
     #     =&gt; &lt;link href=&quot;http://assets3.example.com/stylesheets/application.css&quot; media=&quot;screen&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; /&gt;
     #
-    # To do this, you can either setup four actual hosts, or you can use wildcard DNS to CNAME 
+    # To do this, you can either setup 4 actual hosts, or you can use wildcard DNS to CNAME 
     # the wildcard to a single asset host.  You can read more about setting up your DNS CNAME records from
     # your ISP.
     #
@@ -39,6 +39,32 @@ module ActionView
     # for server load balancing. See http://www.die.net/musings/page_load_time/
     # for background.
     #
+    # Alternatively, you can exert more control over the asset host by setting &lt;tt&gt;asset_host&lt;/tt&gt; to a proc
+    # that takes a single source argument. This is useful if you are unable to setup 4 actual hosts or have
+    # fewer/more than 4 hosts. The example proc below generates http://assets1.example.com and
+    # http://assets2.example.com randomly.
+    #
+    #   ActionController::Base.asset_host = Proc.new { |source| &quot;http://assets#{rand(2) + 1}.example.com&quot; }
+    #   image_tag(&quot;rails.png&quot;)
+    #     =&gt; &lt;img src=&quot;http://assets2.example.com/images/rails.png&quot; alt=&quot;Rails&quot; /&gt;
+    #   stylesheet_include_tag(&quot;application&quot;)
+    #     =&gt; &lt;link href=&quot;http://assets1.example.com/stylesheets/application.css&quot; media=&quot;screen&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; /&gt;
+    #
+    # The proc takes a single &lt;tt&gt;source&lt;/tt&gt; parameter which is the path of the source asset. This can be used to
+    # generate a particular asset host depending on the asset path.
+    #
+    #    ActionController::Base.asset_host = Proc.new { |source|
+    #      if source.starts_with?('/images')
+    #        &quot;http://images.example.com&quot;
+    #      else
+    #        &quot;http://assets.example.com&quot;
+    #      end
+    #    }
+    #   image_tag(&quot;rails.png&quot;)
+    #     =&gt; &lt;img src=&quot;http://images.example.com/images/rails.png&quot; alt=&quot;Rails&quot; /&gt;
+    #   stylesheet_include_tag(&quot;application&quot;)
+    #     =&gt; &lt;link href=&quot;http://assets.example.com/stylesheets/application.css&quot; media=&quot;screen&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; /&gt;
+    #
     # === Using asset timestamps
     #
     # By default, Rails will append all asset paths with that asset's timestamp. This allows you to set a cache-expiration date for the
@@ -385,19 +411,18 @@ module ActionView
         # Add the .ext if not present. Return full URLs otherwise untouched.
         # Prefix with /dir/ if lacking a leading /. Account for relative URL
         # roots. Rewrite the asset path for cache-busting asset ids. Include
-        # a single or wildcarded asset host, if configured, with the correct
-        # request protocol.
+        # asset host, if configured, with the correct request protocol.
         def compute_public_path(source, dir, ext = nil, include_host = true)
           has_request = @controller.respond_to?(:request)
 
           cache_key =
             if has_request
               [ @controller.request.protocol,
-                ActionController::Base.asset_host,
+                ActionController::Base.asset_host.to_s,
                 @controller.request.relative_url_root,
                 dir, source, ext, include_host ].join
             else
-              [ ActionController::Base.asset_host,
+              [ ActionController::Base.asset_host.to_s,
                 dir, source, ext, include_host ].join
             end
 
@@ -430,11 +455,16 @@ module ActionView
         end
 
         # Pick an asset host for this source. Returns nil if no host is set,
-        # the host if no wildcard is set, or the host interpolated with the
-        # numbers 0-3 if it contains %d. The number is the source hash mod 4.
+        # the host if no wildcard is set, the host interpolated with the
+        # numbers 0-3 if it contains %d (the number is the source hash mod 4),
+        # or the value returned from invoking the proc if it's a proc.
         def compute_asset_host(source)
           if host = ActionController::Base.asset_host
-            host % (source.hash % 4)
+            if host.is_a?(Proc)
+              host.call(source)
+            else
+              host % (source.hash % 4)
+            end
           end
         end
 </diff>
      <filename>actionpack/lib/action_view/helpers/asset_tag_helper.rb</filename>
    </modified>
    <modified>
      <diff>@@ -287,8 +287,8 @@ module ActionView
       #
       # ==== Examples
       #   auto_link(&quot;Go to http://www.rubyonrails.org and say hello to david@loudthinking.com&quot;) 
-      #   # =&gt; &quot;Go to &lt;a href=&quot;http://www.rubyonrails.org&quot;&gt;http://www.rubyonrails.org&lt;/a&gt; and
-      #   #     say hello to &lt;a href=&quot;mailto:david@loudthinking.com&quot;&gt;david@loudthinking.com&lt;/a&gt;&quot;
+      #   # =&gt; &quot;Go to &lt;a href=\&quot;http://www.rubyonrails.org\&quot;&gt;http://www.rubyonrails.org&lt;/a&gt; and
+      #   #     say hello to &lt;a href=\&quot;mailto:david@loudthinking.com\&quot;&gt;david@loudthinking.com&lt;/a&gt;&quot;
       #
       #   auto_link(&quot;Visit http://www.loudthinking.com/ or e-mail david@loudthinking.com&quot;, :urls)
       #   # =&gt; &quot;Visit &lt;a href=\&quot;http://www.loudthinking.com/\&quot;&gt;http://www.loudthinking.com/&lt;/a&gt; </diff>
      <filename>actionpack/lib/action_view/helpers/text_helper.rb</filename>
    </modified>
    <modified>
      <diff>@@ -5,7 +5,7 @@ class ERB
     HTML_ESCAPE = { '&amp;' =&gt; '&amp;amp;', '&quot;' =&gt; '&amp;quot;', '&gt;' =&gt; '&amp;gt;', '&lt;' =&gt; '&amp;lt;' }
 
     def html_escape(s)
-      s.to_s.gsub(/[&amp;\&quot;&gt;&lt;]/) { |special| HTML_ESCAPE[special] }
+      s.to_s.gsub(/[&amp;&quot;&gt;&lt;]/) { |special| HTML_ESCAPE[special] }
     end
   end
 end</diff>
      <filename>actionpack/lib/action_view/template_handlers/erb.rb</filename>
    </modified>
    <modified>
      <diff>@@ -49,28 +49,49 @@ class SessionTest &lt; Test::Unit::TestCase
     assert_equal 200, @session.follow_redirect!
   end
 
-  def test_get_via_redirect
-    path = &quot;/somepath&quot;; args = {:id =&gt; '1'}; headers = {&quot;X-Test-Header&quot; =&gt; &quot;testvalue&quot; }
-
-    @session.expects(:get).with(path,args,headers)
+  def test_request_via_redirect_uses_given_method
+    path = &quot;/somepath&quot;; args = {:id =&gt; '1'}; headers = {&quot;X-Test-Header&quot; =&gt; &quot;testvalue&quot;}
+    @session.expects(:put).with(path, args, headers)
+    @session.stubs(:redirect?).returns(false)
+    @session.request_via_redirect(:put, path, args, headers)
+  end
 
+  def test_request_via_redirect_follows_redirects
+    path = &quot;/somepath&quot;; args = {:id =&gt; '1'}; headers = {&quot;X-Test-Header&quot; =&gt; &quot;testvalue&quot;}
     @session.stubs(:redirect?).returns(true, true, false)
     @session.expects(:follow_redirect!).times(2)
+    @session.request_via_redirect(:get, path, args, headers)
+  end
 
+  def test_request_via_redirect_returns_status
+    path = &quot;/somepath&quot;; args = {:id =&gt; '1'}; headers = {&quot;X-Test-Header&quot; =&gt; &quot;testvalue&quot;}
+    @session.stubs(:redirect?).returns(false)
     @session.stubs(:status).returns(200)
-    assert_equal 200, @session.get_via_redirect(path, args, headers)
+    assert_equal 200, @session.request_via_redirect(:get, path, args, headers)
   end
 
-  def test_post_via_redirect
+  def test_get_via_redirect
     path = &quot;/somepath&quot;; args = {:id =&gt; '1'}; headers = {&quot;X-Test-Header&quot; =&gt; &quot;testvalue&quot; }
+    @session.expects(:request_via_redirect).with(:get, path, args, headers)
+    @session.get_via_redirect(path, args, headers)
+  end
 
-    @session.expects(:post).with(path,args,headers)
+  def test_post_via_redirect
+    path = &quot;/somepath&quot;; args = {:id =&gt; '1'}; headers = {&quot;X-Test-Header&quot; =&gt; &quot;testvalue&quot; }
+    @session.expects(:request_via_redirect).with(:post, path, args, headers)
+    @session.post_via_redirect(path, args, headers)
+  end
 
-    @session.stubs(:redirect?).returns(true, true, false)
-    @session.expects(:follow_redirect!).times(2)
+  def test_put_via_redirect
+    path = &quot;/somepath&quot;; args = {:id =&gt; '1'}; headers = {&quot;X-Test-Header&quot; =&gt; &quot;testvalue&quot; }
+    @session.expects(:request_via_redirect).with(:put, path, args, headers)
+    @session.put_via_redirect(path, args, headers)
+  end
 
-    @session.stubs(:status).returns(200)
-    assert_equal 200, @session.post_via_redirect(path, args, headers)
+  def test_delete_via_redirect
+    path = &quot;/somepath&quot;; args = {:id =&gt; '1'}; headers = {&quot;X-Test-Header&quot; =&gt; &quot;testvalue&quot; }
+    @session.expects(:request_via_redirect).with(:delete, path, args, headers)
+    @session.delete_via_redirect(path, args, headers)
   end
 
   def test_url_for_with_controller
@@ -179,6 +200,15 @@ class SessionTest &lt; Test::Unit::TestCase
     @session.expects(:process).with(:head,path,params,headers_after_xhr)
     @session.xml_http_request(:head,path,params,headers)
   end
+  
+  def test_xml_http_request_override_accept
+    path = &quot;/index&quot;; params = &quot;blah&quot;; headers = {:location =&gt; 'blah', &quot;Accept&quot; =&gt; &quot;application/xml&quot;}
+    headers_after_xhr = headers.merge(
+      &quot;X-Requested-With&quot; =&gt; &quot;XMLHttpRequest&quot;
+    )
+    @session.expects(:process).with(:post,path,params,headers_after_xhr)
+    @session.xml_http_request(:post,path,params,headers)
+  end
 end
 
 class IntegrationTestTest &lt; Test::Unit::TestCase</diff>
      <filename>actionpack/test/controller/integration_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -316,7 +316,7 @@ class RequestTest &lt; Test::Unit::TestCase
 
   def test_allow_method_hacking_on_post
     set_request_method_to :post
-    [:get, :head, :put, :post, :delete].each do |method|
+    [:get, :head, :options, :put, :post, :delete].each do |method|
       @request.instance_eval { @parameters = { :_method =&gt; method } ; @request_method = nil }
       assert_equal(method == :head ? :get : method, @request.method)
     end</diff>
      <filename>actionpack/test/controller/request_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -223,7 +223,6 @@ class AssetTagHelperTest &lt; Test::Unit::TestCase
     assert_equal copy, source
   end
 
-
   def test_caching_javascript_include_tag_when_caching_on
     ENV[&quot;RAILS_ASSET_ID&quot;] = &quot;&quot;
     ActionController::Base.asset_host = 'http://a%d.example.com'
@@ -247,7 +246,24 @@ class AssetTagHelperTest &lt; Test::Unit::TestCase
     File.delete(File.join(ActionView::Helpers::AssetTagHelper::JAVASCRIPTS_DIR, 'all.js'))
     File.delete(File.join(ActionView::Helpers::AssetTagHelper::JAVASCRIPTS_DIR, 'money.js'))
   end
-  
+
+  def test_caching_javascript_include_tag_when_caching_on_with_proc_asset_host
+    ENV[&quot;RAILS_ASSET_ID&quot;] = &quot;&quot;
+    ActionController::Base.asset_host = Proc.new { |source| &quot;http://a#{source.length}.example.com&quot; }
+    ActionController::Base.perform_caching = true
+
+    assert_equal '/javascripts/scripts.js'.length, 23
+    assert_dom_equal(
+      %(&lt;script src=&quot;http://a23.example.com/javascripts/scripts.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;),
+      javascript_include_tag(:all, :cache =&gt; 'scripts')
+    )
+
+    assert File.exist?(File.join(ActionView::Helpers::AssetTagHelper::JAVASCRIPTS_DIR, 'scripts.js'))
+
+  ensure
+    File.delete(File.join(ActionView::Helpers::AssetTagHelper::JAVASCRIPTS_DIR, 'scripts.js'))
+  end
+
   def test_caching_javascript_include_tag_when_caching_on_and_using_subdirectory
     ENV[&quot;RAILS_ASSET_ID&quot;] = &quot;&quot;
     ActionController::Base.asset_host = 'http://a%d.example.com'
@@ -304,7 +320,24 @@ class AssetTagHelperTest &lt; Test::Unit::TestCase
     File.delete(File.join(ActionView::Helpers::AssetTagHelper::STYLESHEETS_DIR, 'all.css'))
     File.delete(File.join(ActionView::Helpers::AssetTagHelper::STYLESHEETS_DIR, 'money.css'))
   end
-  
+
+  def test_caching_stylesheet_link_tag_when_caching_on_with_proc_asset_host
+    ENV[&quot;RAILS_ASSET_ID&quot;] = &quot;&quot;
+    ActionController::Base.asset_host = Proc.new { |source| &quot;http://a#{source.length}.example.com&quot; }
+    ActionController::Base.perform_caching = true
+
+    assert_equal '/stylesheets/styles.css'.length, 23
+    assert_dom_equal(
+      %(&lt;link href=&quot;http://a23.example.com/stylesheets/styles.css&quot; media=&quot;screen&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; /&gt;),
+      stylesheet_link_tag(:all, :cache =&gt; 'styles')
+    )
+
+    assert File.exist?(File.join(ActionView::Helpers::AssetTagHelper::STYLESHEETS_DIR, 'styles.css'))
+
+  ensure
+    File.delete(File.join(ActionView::Helpers::AssetTagHelper::STYLESHEETS_DIR, 'styles.css'))
+  end
+
   def test_caching_stylesheet_include_tag_when_caching_off
     ENV[&quot;RAILS_ASSET_ID&quot;] = &quot;&quot;
     ActionController::Base.perform_caching = false</diff>
      <filename>actionpack/test/template/asset_tag_helper_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,4 @@
-*SVN*
+*2.0.2* (December 16th, 2007)
 
 * Ensure optimistic locking handles nil #lock_version values properly.  Closes #10510 [rick]
 </diff>
      <filename>activerecord/CHANGELOG</filename>
    </modified>
    <modified>
      <diff>@@ -172,7 +172,7 @@ spec = Gem::Specification.new do |s|
     s.files = s.files + Dir.glob( &quot;#{dir}/**/*&quot; ).delete_if { |item| item.include?( &quot;\.svn&quot; ) }
   end
 
-  s.add_dependency('activesupport', '= 2.0.1' + PKG_BUILD)
+  s.add_dependency('activesupport', '= 2.0.2' + PKG_BUILD)
 
   s.files.delete &quot;test/fixtures/fixture_database.sqlite&quot;
   s.files.delete &quot;test/fixtures/fixture_database_2.sqlite&quot;</diff>
      <filename>activerecord/Rakefile</filename>
    </modified>
    <modified>
      <diff>@@ -2,7 +2,7 @@ module ActiveRecord
   module VERSION #:nodoc:
     MAJOR = 2
     MINOR = 0
-    TINY  = 1
+    TINY  = 2
 
     STRING = [MAJOR, MINOR, TINY].join('.')
   end</diff>
      <filename>activerecord/lib/active_record/version.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,4 @@
-*SVN*
+*2.0.2* (December 16th, 2007)
 
 * Added more specific exceptions for 400, 401, and 403 (all descending from ClientError so existing rescues will work) #10326 [trek]
 </diff>
      <filename>activeresource/CHANGELOG</filename>
    </modified>
    <modified>
      <diff>@@ -62,7 +62,7 @@ spec = Gem::Specification.new do |s|
     s.files = s.files + Dir.glob( &quot;#{dir}/**/*&quot; ).delete_if { |item| item.include?( &quot;\.svn&quot; ) }
   end
   
-  s.add_dependency('activesupport', '= 2.0.1' + PKG_BUILD)
+  s.add_dependency('activesupport', '= 2.0.2' + PKG_BUILD)
 
   s.require_path = 'lib'
   s.autorequire = 'active_resource'</diff>
      <filename>activeresource/Rakefile</filename>
    </modified>
    <modified>
      <diff>@@ -2,7 +2,7 @@ module ActiveResource
   module VERSION #:nodoc:
     MAJOR = 2
     MINOR = 0
-    TINY  = 1
+    TINY  = 2
 
     STRING = [MAJOR, MINOR, TINY].join('.')
   end</diff>
      <filename>activeresource/lib/active_resource/version.rb</filename>
    </modified>
    <modified>
      <diff>@@ -15,7 +15,22 @@ module ActiveSupport #:nodoc:
             remove_method :to_time if base.instance_methods.include?(:to_time)
           end
         end
-
+        
+        # Convert to a formatted string - see DATE_FORMATS for predefined formats.
+        # You can also add your own formats to the DATE_FORMATS constant and use them with this method.
+        # 
+        # This method is also aliased as &lt;tt&gt;to_s&lt;/tt&gt;.
+        # 
+        # === Examples:
+        #   datetime = DateTime.civil(2007, 12, 4, 0, 0, 0, 0)   # =&gt; Tue, 04 Dec 2007 00:00:00 +0000
+        # 
+        #   datetime.to_formatted_s(:db)            # =&gt; &quot;2007-12-04 00:00:00&quot;
+        #   datetime.to_s(:db)                      # =&gt; &quot;2007-12-04 00:00:00&quot;
+        #   datetime.to_s(:number)                  # =&gt; &quot;20071204000000&quot;
+        #   datetime.to_formatted_s(:short)         # =&gt; &quot;04 Dec 00:00&quot;
+        #   datetime.to_formatted_s(:long)          # =&gt; &quot;December 04, 2007 00:00&quot;
+        #   datetime.to_formatted_s(:long_ordinal)  # =&gt; &quot;December 4th, 2007 00:00&quot;
+        #   datetime.to_formatted_s(:rfc822)        # =&gt; &quot;Tue, 04 Dec 2007 00:00:00 +0000&quot;
         def to_formatted_s(format = :default)
           if formatter = ::Time::DATE_FORMATS[format]
             if formatter.respond_to?(:call)
@@ -49,6 +64,7 @@ module ActiveSupport #:nodoc:
           self
         end
 
+        # Converts datetime to an appropriate format for use in XML
         def xmlschema
           strftime(&quot;%Y-%m-%dT%H:%M:%S%Z&quot;)
         end if RUBY_VERSION &lt; '1.9'</diff>
      <filename>activesupport/lib/active_support/core_ext/date_time/conversions.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,7 +2,7 @@ module ActiveSupport
   module VERSION #:nodoc:
     MAJOR = 2
     MINOR = 0
-    TINY  = 1
+    TINY  = 2
 
     STRING = [MAJOR, MINOR, TINY].join('.')
   end</diff>
      <filename>activesupport/lib/active_support/version.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,10 @@
-*SVN*
+*2.0.2* (December 16th, 2007)
 
-* Introduce `rake generate:secret` to output a crytographically secure secret key for use with cookie sessions.  #xxxx [update from Trac]
+* Changed the default database from mysql to sqlite3, so now running &quot;rails myapp&quot; will have a config/database.yml that's setup for SQLite3 (which in OS X Leopard is installed by default, so is the gem, so everything Just Works with no database configuration at all). To get a Rails application preconfigured for MySQL, just run &quot;rails -d mysql myapp&quot; [DHH]
+
+* Turned on ActionView::Base.cache_template_loading by default in config/environments/production.rb to prevent file system stat calls for every template loading to see if it changed (this means that you have to restart the application to see template changes in production mode) [DHH]
+
+* Introduce `rake secret` to output a crytographically secure secret key for use with cookie sessions #10363 [revans]
 
 * Fixed that local database creation should consider 127.0.0.1 local #9026 [parcelbrat]
 </diff>
      <filename>railties/CHANGELOG</filename>
    </modified>
    <modified>
      <diff>@@ -312,11 +312,11 @@ spec = Gem::Specification.new do |s|
   EOF
 
   s.add_dependency('rake', '&gt;= 0.7.2')
-  s.add_dependency('activesupport',    '= 2.0.1' + PKG_BUILD)
-  s.add_dependency('activerecord',     '= 2.0.1' + PKG_BUILD)
-  s.add_dependency('actionpack',       '= 2.0.1' + PKG_BUILD)
-  s.add_dependency('actionmailer',     '= 2.0.1' + PKG_BUILD)
-  s.add_dependency('activeresource',   '= 2.0.1' + PKG_BUILD)
+  s.add_dependency('activesupport',    '= 2.0.2' + PKG_BUILD)
+  s.add_dependency('activerecord',     '= 2.0.2' + PKG_BUILD)
+  s.add_dependency('actionpack',       '= 2.0.2' + PKG_BUILD)
+  s.add_dependency('actionmailer',     '= 2.0.2' + PKG_BUILD)
+  s.add_dependency('activeresource',   '= 2.0.2' + PKG_BUILD)
 
   s.rdoc_options &lt;&lt; '--exclude' &lt;&lt; '.'
   s.has_rdoc = false</diff>
      <filename>railties/Rakefile</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,4 @@
-# MySQL (default setup).  Versions 4.1 and 5.0 are recommended.
+# MySQL.  Versions 4.1 and 5.0 are recommended.
 #
 # Install the MySQL driver:
 #   gem install mysql</diff>
      <filename>railties/configs/databases/mysql.yml</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 # SQLite version 3.x
-#   gem install sqlite3-ruby
+#   gem install sqlite3-ruby (not necessary on OS X Leopard)
 development:
   adapter: sqlite3
   database: db/development.sqlite3</diff>
      <filename>railties/configs/databases/sqlite3.yml</filename>
    </modified>
    <modified>
      <diff>@@ -10,6 +10,7 @@ config.cache_classes = true
 # Full error reports are disabled and caching is turned on
 config.action_controller.consider_all_requests_local = false
 config.action_controller.perform_caching             = true
+config.action_view.cache_template_loading            = true
 
 # Enable serving of images, stylesheets, and javascripts from an asset server
 # config.action_controller.asset_host                  = &quot;http://assets.example.com&quot;</diff>
      <filename>railties/environments/production.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,7 +2,7 @@ module Rails
   module VERSION #:nodoc:
     MAJOR = 2
     MINOR = 0
-    TINY  = 1
+    TINY  = 2
 
     STRING = [MAJOR, MINOR, TINY].join('.')
   end</diff>
      <filename>railties/lib/rails/version.rb</filename>
    </modified>
    <modified>
      <diff>@@ -8,7 +8,7 @@ class AppGenerator &lt; Rails::Generator::Base
 
   DATABASES = %w(mysql oracle postgresql sqlite2 sqlite3 frontbase)
 
-  default_options   :db =&gt; (ENV[&quot;RAILS_DEFAULT_DATABASE&quot;] || &quot;mysql&quot;),
+  default_options   :db =&gt; (ENV[&quot;RAILS_DEFAULT_DATABASE&quot;] || &quot;sqlite3&quot;),
     :shebang =&gt; DEFAULT_SHEBANG, :freeze =&gt; false
   mandatory_options :source =&gt; &quot;#{File.dirname(__FILE__)}/../../../../..&quot;
 </diff>
      <filename>railties/lib/rails_generator/generators/applications/app/app_generator.rb</filename>
    </modified>
    <modified>
      <diff>@@ -4,9 +4,7 @@ task :environment do
 end
 
 require 'rails_generator/secret_key_generator'
-namespace :generate do
-  desc 'Generate a crytographically secure secret key. This is typically used to generate a secret for cookie sessions. Pass a unique identifier to the generator using ID=&quot;some unique identifier&quot; for greater security.'
-  task :secret do
-    puts Rails::SecretKeyGenerator.new(ENV['ID']).generate_secret
-  end
+desc 'Generate a crytographically secure secret key. This is typically used to generate a secret for cookie sessions. Pass a unique identifier to the generator using ID=&quot;some unique identifier&quot; for greater security.'
+task :secret do
+  puts Rails::SecretKeyGenerator.new(ENV['ID']).generate_secret
 end</diff>
      <filename>railties/lib/tasks/misc.rake</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>7af985f74fdaead950986038570f4d00befe7fc0</id>
    </parent>
  </parents>
  <author>
    <name>David Heinemeier Hansson</name>
    <email>david@loudthinking.com</email>
  </author>
  <url>http://github.com/rubyruy/rails/commit/c8da518bbfedc2a06b1d96912ddae00e57f21748</url>
  <id>c8da518bbfedc2a06b1d96912ddae00e57f21748</id>
  <committed-date>2007-12-16T17:22:11-08:00</committed-date>
  <authored-date>2007-12-16T17:22:11-08:00</authored-date>
  <message>Tagged Rails 2.0.2

git-svn-id: http://svn-commit.rubyonrails.org/rails/tags/rel_2-0-2@8430 5ecf4fe2-1ee6-0310-87b1-e25e094e27de</message>
  <tree>61bc174fe871cfccf8d8af39e664959918896b12</tree>
  <committer>
    <name>David Heinemeier Hansson</name>
    <email>david@loudthinking.com</email>
  </committer>
</commit>
