Backport f443f9cb0c64 to master

This commit is contained in:
Guillermo Iguaran 2011-08-31 12:47:33 -05:00
parent fa04c37f45
commit f236e00189
8 changed files with 41 additions and 52 deletions

@ -47,10 +47,8 @@ namespace :assets do
env.precompile(*assets)
end
if config.assets.manifest
File.open("#{target}/manifest.yml", 'w') do |f|
YAML.dump(manifest, f)
end
File.open("#{target}/manifest.yml", 'w') do |f|
YAML.dump(manifest, f)
end
end
end

@ -61,7 +61,7 @@ def asset_path(source, default_ext = nil, body = false, protocol = nil)
def debug_assets?
begin
config = Rails.application.config.assets
config.allow_debugging && (config.debug || params[:debug_assets])
config.compile && (config.debug || params[:debug_assets])
rescue NoMethodError
false
end
@ -114,22 +114,21 @@ def digest_for(logical_path)
return digest
end
if digest.nil? && Rails.application.config.assets.precompile_only
raise AssetNotPrecompiledError
if Rails.application.config.assets.compile
if asset = asset_environment[logical_path]
return asset.digest_path
end
return logical_path
else
raise AssetNotPrecompiledError.new("#{logical_path} isn't precompiled")
end
if asset = asset_environment[logical_path]
return asset.digest_path
end
logical_path
end
def rewrite_asset_path(source, dir)
if source[0] == ?/
source
else
source = digest_for(source) if performing_caching?
source = digest_for(source) if Rails.application.config.assets.digest
source = File.join(dir, source)
source = "/#{source}" unless source =~ /^\//
source
@ -143,16 +142,6 @@ def rewrite_extension(source, dir, ext)
source
end
end
def performing_caching?
# When included in Sprockets::Context, we need to ask the
# top-level config as the controller is not available.
if config.action_controller.present?
config.action_controller.perform_caching
else
config.perform_caching
end
end
end
end
end

@ -26,10 +26,8 @@ class Railtie < ::Rails::Railtie
end
end
if config.assets.manifest
if File.exist?(path = File.join(Rails.public_path, config.assets.prefix, "manifest.yml"))
config.assets.digests = YAML.load_file(path)
end
if File.exist?(path = File.join(Rails.public_path, config.assets.prefix, "manifest.yml"))
config.assets.digests = YAML.load_file(path)
end
ActiveSupport.on_load(:action_view) do

@ -30,6 +30,8 @@ def setup
@config = config
@config.action_controller ||= ActiveSupport::InheritableOptions.new
@config.perform_caching = true
@config.assets.digest = true
@config.assets.compile = true
end
def url_for(*args)
@ -157,7 +159,7 @@ def url_for(*args)
assert_match %r{<script src="/assets/xmlhr-[0-9a-f]+.js\?body=1" type="text/javascript"></script>\n<script src="/assets/application-[0-9a-f]+.js\?body=1" type="text/javascript"></script>},
javascript_include_tag(:application, :debug => true)
@config.assets.allow_debugging = true
@config.assets.compile = true
@config.assets.debug = true
assert_match %r{<script src="/assets/xmlhr-[0-9a-f]+.js\?body=1" type="text/javascript"></script>\n<script src="/assets/application-[0-9a-f]+.js\?body=1" type="text/javascript"></script>},
javascript_include_tag(:application)
@ -198,7 +200,7 @@ def url_for(*args)
assert_match %r{<link href="/assets/style-[0-9a-f]+.css\?body=1" media="screen" rel="stylesheet" type="text/css" />\n<link href="/assets/application-[0-9a-f]+.css\?body=1" media="screen" rel="stylesheet" type="text/css" />},
stylesheet_link_tag(:application, :debug => true)
@config.assets.allow_debugging = true
@config.assets.compile = true
@config.assets.debug = true
assert_match %r{<link href="/assets/style-[0-9a-f]+.css\?body=1" media="screen" rel="stylesheet" type="text/css" />\n<link href="/assets/application-[0-9a-f]+.css\?body=1" media="screen" rel="stylesheet" type="text/css" />},
stylesheet_link_tag(:application)

@ -41,9 +41,8 @@ def initialize(*)
@assets.prefix = "/assets"
@assets.version = ''
@assets.debug = false
@assets.allow_debugging = false
@assets.manifest = true
@assets.precompile_only = false
@assets.compile = true
@assets.digest = false
@assets.cache_store = [ :file_store, "#{root}/tmp/cache/assets/" ]
@assets.js_compressor = nil
@assets.css_compressor = nil

@ -30,9 +30,6 @@
# Do not compress assets
config.assets.compress = false
# Allow pass debug_assets=true as a query parameter to load pages with unpackaged assets
config.assets.allow_debugging = true
# Expands the lines which load the assets
config.assets.debug = true
end

@ -14,6 +14,12 @@
# Compress JavaScripts and CSS
config.assets.compress = true
# Don't fallback to assets pipeline if a precompiled asset is missed
config.assets.compile = false
# Generate digests for assets URLs
config.assets.digest = true
# Specifies the header that your server uses for sending files
# config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache
# config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx

@ -37,6 +37,8 @@ def app
test "assets do not require compressors until it is used" do
app_file "app/assets/javascripts/demo.js.erb", "<%= :alert %>();"
app_file "config/initializers/compile.rb", "Rails.application.config.assets.compile = true"
ENV["RAILS_ENV"] = "production"
require "#{app_path}/config/environment"
@ -62,18 +64,7 @@ def app
end
end
test "precompile don't create a manifest file when manifest option is off" do
app_file "app/assets/javascripts/application.js", "alert();"
app_file "config/initializers/manifest.rb", "Rails.application.config.assets.manifest = false"
capture(:stdout) do
Dir.chdir(app_path){ `bundle exec rake assets:precompile` }
end
assert !File.exist?("#{app_path}/public/assets/manifest.yml")
end
test "precompile creates a manifest file with all the assets listed when manifest option is on" do
test "precompile creates a manifest file with all the assets listed" do
app_file "app/assets/stylesheets/application.css.erb", "<%= asset_path('rails.png') %>"
app_file "app/assets/javascripts/application.js", "alert();"
@ -88,7 +79,7 @@ def app
assert_match /application-([0-z]+)\.css/, assets["application.css"]
end
test "assets do not require any assets group gem when manifest option is on and manifest file is present" do
test "assets do not require any assets group gem when manifest file is present" do
app_file "app/assets/javascripts/application.js", "alert();"
ENV["RAILS_ENV"] = "production"
@ -108,10 +99,8 @@ def app
assert !defined?(Uglifier)
end
test "assets raise AssetNotPrecompiledError if config.assets.precompile_only is on and file isn't precompiled" do
app_file "app/assets/javascripts/app.js", "alert();"
test "assets raise AssetNotPrecompiledError when manifest file is present and requested file isn't precompiled" do
app_file "app/views/posts/index.html.erb", "<%= javascript_include_tag 'app' %>"
app_file "config/initializers/precompile_only.rb", "Rails.application.config.assets.precompile_only = true"
app_file "config/routes.rb", <<-RUBY
AppTemplate::Application.routes.draw do
@ -120,15 +109,25 @@ def app
RUBY
ENV["RAILS_ENV"] = "production"
capture(:stdout) do
Dir.chdir(app_path){ `bundle exec rake assets:precompile` }
end
# Create file after of precompile
app_file "app/assets/javascripts/app.js", "alert();"
require "#{app_path}/config/environment"
class ::PostsController < ActionController::Base ; end
get '/posts'
assert_match /AssetNotPrecompiledError/, last_response.body
assert_match /app.js isn't precompiled/, last_response.body
end
test "precompile appends the md5 hash to files referenced with asset_path and run in the provided RAILS_ENV" do
app_file "app/assets/stylesheets/application.css.erb", "<%= asset_path('rails.png') %>"
# digest is default in false, we must enable it for test environment
app_file "config/initializers/compile.rb", "Rails.application.config.assets.digest = true"
# capture(:stdout) do
Dir.chdir(app_path){ `bundle exec rake assets:precompile RAILS_ENV=test` }
@ -139,6 +138,7 @@ class ::PostsController < ActionController::Base ; end
test "precompile appends the md5 hash to files referenced with asset_path and run in production as default even using RAILS_GROUPS=assets" do
app_file "app/assets/stylesheets/application.css.erb", "<%= asset_path('rails.png') %>"
app_file "config/initializers/compile.rb", "Rails.application.config.assets.compile = true"
ENV["RAILS_ENV"] = nil
capture(:stdout) do