From ce1f87673c17338617222a4e4e0971cfb9f0655f Mon Sep 17 00:00:00 2001
From: Josh Kalderimis <josh.kalderimis@gmail.com>
Date: Mon, 15 Nov 2010 18:20:37 +0100
Subject: corrected the AV railtie to use the new home for
 cache_asset_timestamps, and merged asset id caching and asset paths together.

---
 .../helpers/asset_tag_helpers/asset_id_caching.rb  | 69 ----------------------
 .../helpers/asset_tag_helpers/asset_include_tag.rb |  2 -
 .../helpers/asset_tag_helpers/asset_paths.rb       | 49 ++++++++++++++-
 actionpack/lib/action_view/railtie.rb              |  2 +-
 4 files changed, 47 insertions(+), 75 deletions(-)
 delete mode 100644 actionpack/lib/action_view/helpers/asset_tag_helpers/asset_id_caching.rb

(limited to 'actionpack/lib')

diff --git a/actionpack/lib/action_view/helpers/asset_tag_helpers/asset_id_caching.rb b/actionpack/lib/action_view/helpers/asset_tag_helpers/asset_id_caching.rb
deleted file mode 100644
index 64a193e4be..0000000000
--- a/actionpack/lib/action_view/helpers/asset_tag_helpers/asset_id_caching.rb
+++ /dev/null
@@ -1,69 +0,0 @@
-require 'thread'
-require 'active_support/core_ext/file'
-require 'active_support/concern'
-
-module ActionView
-  module Helpers
-    module AssetTagHelper
-
-      module AssetIdCaching
-        extend ActiveSupport::Concern
-
-        included do
-          # You can enable or disable the asset tag timestamps cache.
-          # With the cache enabled, the asset tag helper methods will make fewer
-          # expensive file system calls. However this prevents you from modifying
-          # any asset files while the server is running.
-          #
-          #   ActionView::Helpers::AssetTagHelper.cache_asset_timestamps = false
-          mattr_accessor :cache_asset_timestamps
-
-          private
-          mattr_accessor :asset_timestamps_cache
-          self.asset_timestamps_cache = {}
-
-          mattr_accessor :asset_timestamps_cache_guard
-          self.asset_timestamps_cache_guard = Mutex.new
-        end
-
-        private
-
-          # Use the RAILS_ASSET_ID environment variable or the source's
-          # modification time as its cache-busting asset id.
-          def rails_asset_id(source)
-            if asset_id = ENV["RAILS_ASSET_ID"]
-              asset_id
-            else
-              if self.cache_asset_timestamps && (asset_id = self.asset_timestamps_cache[source])
-                asset_id
-              else
-                path = File.join(config.assets_dir, source)
-                asset_id = File.exist?(path) ? File.mtime(path).to_i.to_s : ''
-
-                if self.cache_asset_timestamps
-                  self.asset_timestamps_cache_guard.synchronize do
-                    self.asset_timestamps_cache[source] = asset_id
-                  end
-                end
-
-                asset_id
-              end
-            end
-          end
-
-          # Break out the asset path rewrite in case plugins wish to put the asset id
-          # someplace other than the query string.
-          # This is the default implementation
-          def handle_asset_id(source)
-            asset_id = rails_asset_id(source)
-            if asset_id.empty?
-              source
-            else
-              "#{source}?#{asset_id}"
-            end
-          end
-      end
-
-    end
-  end
-end
\ No newline at end of file
diff --git a/actionpack/lib/action_view/helpers/asset_tag_helpers/asset_include_tag.rb b/actionpack/lib/action_view/helpers/asset_tag_helpers/asset_include_tag.rb
index e99026fb36..3bc81ae068 100644
--- a/actionpack/lib/action_view/helpers/asset_tag_helpers/asset_include_tag.rb
+++ b/actionpack/lib/action_view/helpers/asset_tag_helpers/asset_include_tag.rb
@@ -2,8 +2,6 @@ require 'active_support/core_ext/class/attribute'
 require 'active_support/core_ext/string/inflections'
 require 'active_support/core_ext/file'
 require 'action_view/helpers/tag_helper'
-require 'action_view/helpers/asset_tag_helpers/asset_id_caching'
-
 
 module ActionView
   module Helpers
diff --git a/actionpack/lib/action_view/helpers/asset_tag_helpers/asset_paths.rb b/actionpack/lib/action_view/helpers/asset_tag_helpers/asset_paths.rb
index 5f884e391a..7a00c8e69d 100644
--- a/actionpack/lib/action_view/helpers/asset_tag_helpers/asset_paths.rb
+++ b/actionpack/lib/action_view/helpers/asset_tag_helpers/asset_paths.rb
@@ -1,12 +1,17 @@
 require 'active_support/core_ext/file'
-require 'action_view/helpers/asset_tag_helpers/asset_id_caching'
 
 module ActionView
   module Helpers
     module AssetTagHelper
 
       class AssetPaths
-        include AssetIdCaching
+        # You can enable or disable the asset tag timestamps cache.
+        # With the cache enabled, the asset tag helper methods will make fewer
+        # expensive file system calls. However this prevents you from modifying
+        # any asset files while the server is running.
+        #
+        #   ActionView::Helpers::AssetTagHelper.cache_asset_timestamps = false
+        mattr_accessor :cache_asset_timestamps
 
         attr_reader :config, :controller
 
@@ -36,6 +41,12 @@ module ActionView
           source
         end
 
+        def add_to_asset_timestamp_cache(source, asset_id)
+          self.asset_timestamps_cache_guard.synchronize do
+            self.asset_timestamps_cache[source] = asset_id
+          end
+        end
+
         def is_uri?(path)
           path =~ %r{^[-a-z]+://|^cid:}
         end
@@ -62,8 +73,40 @@ module ActionView
               return path.call(source)
             elsif path && path.is_a?(String)
               return path % [source]
+            end
+
+            asset_id = rails_asset_id(source)
+            if asset_id.empty?
+              source
+            else
+              "#{source}?#{asset_id}"
+            end
+          end
+
+          mattr_accessor :asset_timestamps_cache
+          self.asset_timestamps_cache = {}
+
+          mattr_accessor :asset_timestamps_cache_guard
+          self.asset_timestamps_cache_guard = Mutex.new
+
+          # Use the RAILS_ASSET_ID environment variable or the source's
+          # modification time as its cache-busting asset id.
+          def rails_asset_id(source)
+            if asset_id = ENV["RAILS_ASSET_ID"]
+              asset_id
             else
-              handle_asset_id(source)
+              if self.cache_asset_timestamps && (asset_id = self.asset_timestamps_cache[source])
+                asset_id
+              else
+                path = File.join(config.assets_dir, source)
+                asset_id = File.exist?(path) ? File.mtime(path).to_i.to_s : ''
+
+                if self.cache_asset_timestamps
+                  add_to_asset_timestamp_cache(source, asset_id)
+                end
+
+                asset_id
+              end
             end
           end
 
diff --git a/actionpack/lib/action_view/railtie.rb b/actionpack/lib/action_view/railtie.rb
index 33dfcbb803..bed95aa7f7 100644
--- a/actionpack/lib/action_view/railtie.rb
+++ b/actionpack/lib/action_view/railtie.rb
@@ -11,7 +11,7 @@ module ActionView
     initializer "action_view.cache_asset_timestamps" do |app|
       unless app.config.cache_classes
         ActiveSupport.on_load(:action_view) do
-          ActionView::Helpers::AssetTagHelper.cache_asset_timestamps = false
+          ActionView::Helpers::AssetTagHelper::AssetPaths.cache_asset_timestamps = false
         end
       end
     end
-- 
cgit v1.2.3