From ce1f87673c17338617222a4e4e0971cfb9f0655f Mon Sep 17 00:00:00 2001 From: Josh Kalderimis 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 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