Skip to content

Commit

Permalink
Migrate to Sprockets 4.
Browse files Browse the repository at this point in the history
  • Loading branch information
Andreis13 committed Aug 17, 2015
1 parent 7985908 commit c74a9c4
Show file tree
Hide file tree
Showing 9 changed files with 61 additions and 19 deletions.
3 changes: 2 additions & 1 deletion Gemfile
Expand Up @@ -20,7 +20,7 @@ gem 'turbolinks'
gem 'arel', github: 'rails/arel', branch: 'master'
gem 'mail', github: 'mikel/mail'

gem 'sprockets', '~> 3.0.0.rc.1'
gem 'sprockets', github: 'rails/sprockets', branch: 'master'
gem 'sprockets-rails', github: 'rails/sprockets-rails', branch: 'master'

# require: false so bcrypt is loaded only when has_secure_password is used.
Expand All @@ -31,6 +31,7 @@ gem 'bcrypt', '~> 3.1.10', require: false
# This needs to be with require false to avoid
# it being automatically loaded by sprockets
gem 'uglifier', '>= 1.3.0', require: false
gem 'sass', '>= 3.3', require: false

group :doc do
gem 'sdoc', '~> 0.4.0'
Expand Down
14 changes: 11 additions & 3 deletions Gemfile.lock
Expand Up @@ -59,6 +59,14 @@ GIT
activesupport (>= 4.0)
sprockets (>= 3.0.0)

GIT
remote: git://github.com/rails/sprockets.git
revision: de057b4f13deb2bb5e8684cd06b9b687f5d09792
branch: master
specs:
sprockets (4.0.0)
rack (~> 1.0)

PATH
remote: .
specs:
Expand Down Expand Up @@ -215,6 +223,7 @@ GEM
resque (~> 1.25)
rufus-scheduler (~> 3.0)
rufus-scheduler (3.1.3)
sass (3.4.16)
sdoc (0.4.1)
json (~> 1.7, >= 1.7.7)
rdoc (~> 4.0)
Expand All @@ -237,8 +246,6 @@ GEM
serverengine (~> 1.5.5)
thor
thread (~> 0.1.7)
sprockets (3.0.3)
rack (~> 1.0)
sqlite3 (1.3.10)
stackprof (0.2.7)
sucker_punch (1.5.0)
Expand Down Expand Up @@ -303,11 +310,12 @@ DEPENDENCIES
redcarpet (~> 3.2.3)
resque
resque-scheduler
sass (>= 3.3)
sdoc (~> 0.4.0)
sequel
sidekiq
sneakers
sprockets (~> 3.0.0.rc.1)
sprockets!
sprockets-rails!
sqlite3 (~> 1.3.6)
stackprof
Expand Down
6 changes: 4 additions & 2 deletions railties/lib/rails/generators/app_base.rb
Expand Up @@ -209,12 +209,16 @@ def rails_gemfile_entry
[
GemfileEntry.path('rails', Rails::Generators::RAILS_DEV_PATH),
GemfileEntry.github('sprockets-rails', 'rails/sprockets-rails'),
GemfileEntry.github('sprockets', 'rails/sprockets'),
GemfileEntry.github('sass-rails', 'rails/sass-rails'),
GemfileEntry.github('arel', 'rails/arel')
]
elsif options.edge?
[
GemfileEntry.github('rails', 'rails/rails'),
GemfileEntry.github('sprockets-rails', 'rails/sprockets-rails'),
GemfileEntry.github('sprockets', 'rails/sprockets'),
GemfileEntry.github('sass-rails', 'rails/sass-rails'),
GemfileEntry.github('arel', 'rails/arel')
]
else
Expand Down Expand Up @@ -255,8 +259,6 @@ def assets_gemfile_entry
return [] if options[:skip_sprockets]

gems = []
gems << GemfileEntry.version('sass-rails', '~> 5.0',
'Use SCSS for stylesheets')

gems << GemfileEntry.version('uglifier',
'>= 1.3.0',
Expand Down
@@ -0,0 +1,4 @@

//= link_tree ./images
//= link javascripts/application.js
//= link stylesheets/application.css
13 changes: 11 additions & 2 deletions railties/lib/rails/generators/rails/plugin/plugin_generator.rb
Expand Up @@ -104,8 +104,9 @@ def test_dummy_config
end

def test_dummy_assets
template "rails/javascripts.js", "#{dummy_path}/app/assets/javascripts/application.js", force: true
template "rails/stylesheets.css", "#{dummy_path}/app/assets/stylesheets/application.css", force: true
template "rails/javascripts.js", "#{dummy_path}/app/assets/javascripts/application.js", force: true
template "rails/stylesheets.css", "#{dummy_path}/app/assets/stylesheets/application.css", force: true
template "rails/dummy_manifest.js", "#{dummy_path}/app/assets/manifest.js", force: true
end

def test_dummy_clean
Expand All @@ -122,6 +123,10 @@ def test_dummy_clean
end
end

def assets_manifest
template "rails/engine_manifest.js", "app/assets/#{namespaced_name}_manifest.js"
end

def stylesheets
if mountable?
copy_file "rails/stylesheets.css",
Expand Down Expand Up @@ -220,6 +225,10 @@ def create_lib_files
build(:lib)
end

def create_assets_manifest_file
build(:assets_manifest) unless api?
end

def create_public_stylesheets_files
build(:stylesheets) unless api?
end
Expand Down
@@ -0,0 +1,7 @@
<% unless options.skip_javascript -%>
// link application.js
<% end -%>
//= link application.css
<% if mountable? -%>
//= link <%= namespaced_name %>_manifest.js
<% end -%>
@@ -0,0 +1,6 @@
<% if mountable? -%>
<% unless options.skip_javascript -%>
//= link <%= namespaced_name %>/application.js
<% end -%>
//= link <%= namespaced_name %>/application.css
<% end -%>
5 changes: 2 additions & 3 deletions railties/test/application/asset_debugging_test.rb
Expand Up @@ -48,7 +48,7 @@ class ::PostsController < ActionController::Base ; end
assert_no_match(/<script src="\/assets\/xmlhr-([0-z]+)\.js"><\/script>/, last_response.body)
end

test "assets aren't concatenated when compile is true is on and debug_assets params is true" do
test "assets are served with sourcemaps when compile is true and debug_assets params is true" do
add_to_env_config "production", "config.assets.compile = true"

ENV["RAILS_ENV"] = "production"
Expand All @@ -57,8 +57,7 @@ class ::PostsController < ActionController::Base ; end
class ::PostsController < ActionController::Base ; end

get '/posts?debug_assets=true'
assert_match(/<script src="\/assets\/application(\.self)?-([0-z]+)\.js\?body=1"><\/script>/, last_response.body)
assert_match(/<script src="\/assets\/xmlhr(\.self)?-([0-z]+)\.js\?body=1"><\/script>/, last_response.body)
assert_match(/<script src="\/assets\/application(\.debug)?-([0-z]+)\.js"><\/script>/, last_response.body)
end
end
end
22 changes: 14 additions & 8 deletions railties/test/application/assets_test.rb
Expand Up @@ -72,6 +72,7 @@ def assert_no_file_exists(filename)
end

test "precompile creates the file, gives it the original asset's content and run in production as default" do
app_file "app/assets/manifest.js", "//= link_tree ./javascripts"
app_file "app/assets/javascripts/application.js", "alert();"
app_file "app/assets/javascripts/foo/application.js", "alert();"

Expand All @@ -87,6 +88,7 @@ def assert_no_file_exists(filename)
end

def test_precompile_does_not_hit_the_database
app_file "app/assets/manifest.js", "//= link_tree ./javascripts"
app_file "app/assets/javascripts/application.js", "alert();"
app_file "app/assets/javascripts/foo/application.js", "alert();"
app_file "app/controllers/users_controller.rb", <<-eoruby
Expand Down Expand Up @@ -178,8 +180,11 @@ class User < ActiveRecord::Base; raise 'should not be reached'; end
end

test 'precompile use assets defined in app config and reassigned in app env config' do
add_to_config 'config.assets.precompile = [ "something.js" ]'
add_to_env_config 'production', 'config.assets.precompile += [ "another.js" ]'
add_to_config 'config.assets.precompile = [ "something_manifest.js" ]'
add_to_env_config 'production', 'config.assets.precompile += [ "another_manifest.js" ]'

app_file 'app/assets/something_manifest.js', '//= link ./javascripts/something.js'
app_file 'app/assets/another_manifest.js', '//= link ./javascripts/another.js'

app_file 'app/assets/javascripts/something.js.erb', 'alert();'
app_file 'app/assets/javascripts/another.js.erb', 'alert();'
Expand All @@ -190,14 +195,14 @@ class User < ActiveRecord::Base; raise 'should not be reached'; end
assert_file_exists("#{app_path}/public/assets/another-*.js")
end

test "asset pipeline should use a Sprockets::Index when config.assets.digest is true" do
test "asset pipeline should use a Sprockets::CachedEnvironment when config.assets.digest is true" do
add_to_config "config.action_controller.perform_caching = false"
add_to_env_config "production", "config.assets.compile = true"

ENV["RAILS_ENV"] = "production"
require "#{app_path}/config/environment"

assert_equal Sprockets::Index, Rails.application.assets.class
assert_equal Sprockets::CachedEnvironment, Rails.application.assets.class
end

test "precompile creates a manifest file with all the assets listed" do
Expand Down Expand Up @@ -289,7 +294,8 @@ class User < ActiveRecord::Base; raise 'should not be reached'; end
test "precompile should handle utf8 filenames" do
filename = "レイルズ.png"
app_file "app/assets/images/#{filename}", "not an image really"
add_to_config "config.assets.precompile = [ /\.png$/, /application.(css|js)$/ ]"
app_file "app/assets/manifest.js", "//= link_tree ./images"
add_to_config "config.assets.precompile = %w(manifest.js)"

precompile!

Expand Down Expand Up @@ -394,7 +400,7 @@ class ::PostsController < ActionController::Base ; end
app_file "app/assets/javascripts/xmlhr.js.erb", "<%= Post.name %>"

precompile!
assert_equal "Post;\n", File.read(Dir["#{app_path}/public/assets/application-*.js"].first)
assert_equal "Post\n;\n", File.read(Dir["#{app_path}/public/assets/application-*.js"].first)
end

test "initialization on the assets group should set assets_dir" do
Expand Down Expand Up @@ -439,9 +445,9 @@ class ::PostsController < ActionController::Base ; end
class ::PostsController < ActionController::Base; end

get '/posts', {}, {'HTTPS'=>'off'}
assert_match('src="http://example.com/assets/application.self.js', last_response.body)
assert_match('src="http://example.com/assets/application.debug.js', last_response.body)
get '/posts', {}, {'HTTPS'=>'on'}
assert_match('src="https://example.com/assets/application.self.js', last_response.body)
assert_match('src="https://example.com/assets/application.debug.js', last_response.body)
end

test "asset urls should be protocol-relative if no request is in scope" do
Expand Down

0 comments on commit c74a9c4

Please sign in to comment.