提交 ce1f8767 编写于 作者: J Josh Kalderimis 提交者: José Valim

corrected the AV railtie to use the new home for cache_asset_timestamps, and...

corrected the AV railtie to use the new home for cache_asset_timestamps, and merged asset id caching and asset paths together.
上级 0ff1c593
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
......@@ -2,8 +2,6 @@
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
......
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 @@ def compute_public_path(source, dir, ext = nil, include_host = true)
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 @@ def rewrite_asset_path(source, path = nil)
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
......
......@@ -11,7 +11,7 @@ class Railtie < Rails::Railtie
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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册