diff options
-rw-r--r-- | actionpack/CHANGELOG.md | 14 | ||||
-rw-r--r-- | actionpack/actionpack.gemspec | 2 | ||||
-rw-r--r-- | actionpack/lib/sprockets/static_compiler.rb | 32 | ||||
-rw-r--r-- | railties/test/application/assets_test.rb | 17 |
4 files changed, 43 insertions, 22 deletions
diff --git a/actionpack/CHANGELOG.md b/actionpack/CHANGELOG.md index 69937accf2..fe0c7c40d9 100644 --- a/actionpack/CHANGELOG.md +++ b/actionpack/CHANGELOG.md @@ -1,5 +1,19 @@ ## Rails 3.2.9 (unreleased) ## +* Precompiled assets include aliases from foo.js to foo/index.js and vice versa. + + # Precompiles phone-<digest>.css and aliases phone/index.css to phone.css. + config.assets.precompile = [ 'phone.css' ] + + # Precompiles phone/index-<digest>.css and aliases phone.css to phone/index.css. + config.assets.precompile = [ 'phone/index.css' ] + + # Both of these work with either precompile thanks to their aliases. + <%= stylesheet_link_tag 'phone', media: 'all' %> + <%= stylesheet_link_tag 'phone/index', media: 'all' %> + + *Jeremy Kemper* + * `assert_template` is no more passing with what ever string that matches with the template name. diff --git a/actionpack/actionpack.gemspec b/actionpack/actionpack.gemspec index 3d67541557..002351696d 100644 --- a/actionpack/actionpack.gemspec +++ b/actionpack/actionpack.gemspec @@ -23,7 +23,7 @@ Gem::Specification.new do |s| s.add_dependency('rack', '~> 1.4.0') s.add_dependency('rack-test', '~> 0.6.1') s.add_dependency('journey', '~> 1.0.4') - s.add_dependency('sprockets', '~> 2.1') + s.add_dependency('sprockets', '~> 2.2') s.add_dependency('erubis', '~> 2.7.0') s.add_development_dependency('tzinfo', '~> 0.3.29') diff --git a/actionpack/lib/sprockets/static_compiler.rb b/actionpack/lib/sprockets/static_compiler.rb index 2e2db4b760..4341a27d5d 100644 --- a/actionpack/lib/sprockets/static_compiler.rb +++ b/actionpack/lib/sprockets/static_compiler.rb @@ -15,13 +15,11 @@ module Sprockets def compile manifest = {} - env.each_logical_path do |logical_path| - if File.basename(logical_path)[/[^\.]+/, 0] == 'index' - logical_path.sub!(/\/index\./, '.') - end - next unless compile_path?(logical_path) + env.each_logical_path(paths) do |logical_path| if asset = env.find_asset(logical_path) - manifest[logical_path] = write_asset(asset) + digest_path = write_asset(asset) + manifest[asset.logical_path] = digest_path + manifest[aliased_path_for(asset.logical_path)] = digest_path end end write_manifest(manifest) if @manifest @@ -43,22 +41,16 @@ module Sprockets end end - def compile_path?(logical_path) - paths.each do |path| - case path - when Regexp - return true if path.match(logical_path) - when Proc - return true if path.call(logical_path) - else - return true if File.fnmatch(path.to_s, logical_path) - end - end - false - end - def path_for(asset) @digest ? asset.digest_path : asset.logical_path end + + def aliased_path_for(logical_path) + if File.basename(logical_path).start_with?('index') + logical_path.sub(/\/index([^\/]+)$/, '\1') + else + logical_path.sub(/\.([^\/]+)$/, '/index.\1') + end + end end end diff --git a/railties/test/application/assets_test.rb b/railties/test/application/assets_test.rb index 5a1df5d330..9e9702efb6 100644 --- a/railties/test/application/assets_test.rb +++ b/railties/test/application/assets_test.rb @@ -122,8 +122,23 @@ module ApplicationTests app_file "app/assets/javascripts/something/index.js.erb", "alert();" precompile! - assert File.exists?("#{app_path}/public/assets/something.js") + + assets = YAML.load_file("#{app_path}/public/assets/manifest.yml") + assert_not_nil assets['something/index.js'], "Expected something/index.js among #{assets.keys.inspect}" + assert_not_nil assets['something.js'], "Expected something.js among #{assets.keys.inspect}" + end + + test "precompile something/index.js for directory containing index file" do + add_to_config "config.assets.precompile = [ 'something/index.js' ]" + app_file "app/assets/javascripts/something/index.js.erb", "alert();" + + precompile! + assert File.exists?("#{app_path}/public/assets/something/index.js") + + assets = YAML.load_file("#{app_path}/public/assets/manifest.yml") + assert_not_nil assets['something/index.js'], "Expected something/index.js among #{assets.keys.inspect}" + assert_not_nil assets['something.js'], "Expected something.js among #{assets.keys.inspect}" end test "asset pipeline should use a Sprockets::Index when config.assets.digest is true" do |