Skip to content

Commit

Permalink
Move SCSS generators and default templates from Rails to the Sass Rai…
Browse files Browse the repository at this point in the history
…ltie (d435726312601edb3ba6f97b34f562221f72c1f8).

* Sass gem registers a compressor
* Sass gem registers generators for assets and scaffold
* Create a default stylesheet_engine ("css") for apps that remove the Sass gem
  • Loading branch information
tomhuda committed May 24, 2011
1 parent 9701db1 commit ac3503c
Show file tree
Hide file tree
Showing 12 changed files with 61 additions and 124 deletions.
21 changes: 2 additions & 19 deletions actionpack/lib/sprockets/railtie.rb
Expand Up @@ -9,15 +9,7 @@ def self.using_coffee?
false
end

def self.using_scss?
require 'sass'
defined?(Sass)
rescue LoadError
false
end

config.app_generators.javascript_engine :coffee if using_coffee?
config.app_generators.stylesheet_engine :scss if using_scss?

# Configure ActionController to use sprockets.
initializer "sprockets.set_configs", :after => "action_controller.set_configs" do |app|
Expand Down Expand Up @@ -62,8 +54,8 @@ def asset_environment(app)
env.static_root = File.join(app.root.join("public"), assets.prefix)
env.paths.concat assets.paths
env.logger = Rails.logger
env.js_compressor = expand_js_compressor(assets.js_compressor) if app.assets.compress
env.css_compressor = expand_css_compressor(assets.css_compressor) if app.assets.compress
env.js_compressor = expand_js_compressor(assets.js_compressor) if assets.compress
env.css_compressor = expand_css_compressor(assets.css_compressor) if assets.compress
env
end

Expand All @@ -85,15 +77,6 @@ def expand_js_compressor(sym)

def expand_css_compressor(sym)
case sym
when :scss
require 'sass'
compressor = Object.new
def compressor.compress(source)
Sass::Engine.new(source,
:syntax => :scss, :style => :compressed
).render
end
compressor
when :yui
require 'yui/compressor'
YUI::CssCompressor.new
Expand Down
2 changes: 1 addition & 1 deletion railties/lib/rails/generators.rb
Expand Up @@ -57,7 +57,7 @@ module Generators
:resource_controller => :controller,
:scaffold_controller => :scaffold_controller,
:stylesheets => true,
:stylesheet_engine => nil,
:stylesheet_engine => :css,
:test_framework => false,
:template_engine => :erb
},
Expand Down
13 changes: 13 additions & 0 deletions railties/lib/rails/generators/css/assets/assets_generator.rb
@@ -0,0 +1,13 @@
require "rails/generators/named_base"

module Css
module Generators
class AssetsGenerator < Rails::Generators::NamedBase
source_root File.expand_path("../templates", __FILE__)

def copy_stylesheet
copy_file "stylesheet.css", File.join('app/assets/stylesheets', class_path, "#{file_name}.css")
end
end
end
end
@@ -1,5 +1,4 @@
/*
/*
Place all the styles related to the matching controller here.
They will automatically be included in application.css.
You can use Sass (SCSS) here: http://sass-lang.com/
*/
16 changes: 16 additions & 0 deletions railties/lib/rails/generators/css/scaffold/scaffold_generator.rb
@@ -0,0 +1,16 @@
require "rails/generators/named_base"

module Css
module Generators
class ScaffoldGenerator < Rails::Generators::NamedBase
# In order to allow the Sass generators to pick up the default Rails CSS and
# transform it, we leave it in a standard location for the CSS stylesheet
# generators to handle. For the simple, default case, just copy it over.
def copy_stylesheet
dir = Rails::Generators::ScaffoldGenerator.source_root
file = File.join(dir, "scaffold.css")
create_file "app/assets/stylesheets/scaffold.css", File.read(file)
end
end
end
end
11 changes: 2 additions & 9 deletions railties/lib/rails/generators/rails/assets/assets_generator.rb
Expand Up @@ -13,12 +13,6 @@ def create_javascript_files
File.join('app/assets/javascripts', class_path, "#{asset_name}.#{javascript_extension}")
end

def create_stylesheet_files
return unless options.stylesheets?
copy_file "stylesheet.#{stylesheet_extension}",
File.join('app/assets/stylesheets', class_path, "#{asset_name}.#{stylesheet_extension}")
end

protected

def asset_name
Expand All @@ -30,9 +24,8 @@ def javascript_extension
"js.#{options.javascript_engine}" : "js"
end

def stylesheet_extension
options.stylesheet_engine.present? ?
"css.#{options.stylesheet_engine}" : "css"
hook_for :stylesheet_engine do |stylesheet_engine|
invoke stylesheet_engine, [name] if options[:stylesheets]
end
end
end
Expand Down
13 changes: 2 additions & 11 deletions railties/lib/rails/generators/rails/scaffold/scaffold_generator.rb
Expand Up @@ -11,21 +11,12 @@ class ScaffoldGenerator < ResourceGenerator #metagenerator

hook_for :scaffold_controller, :required => true

def copy_stylesheets_file
if behavior == :invoke && options.stylesheets?
template "scaffold.#{stylesheet_extension}", "app/assets/stylesheets/scaffold.#{stylesheet_extension}"
end
end

hook_for :assets do |assets|
invoke assets, [controller_name]
end

private

def stylesheet_extension
options.stylesheet_engine.present? ?
"css.#{options.stylesheet_engine}" : "css"
hook_for :stylesheet_engine do |stylesheet_engine|
invoke stylesheet_engine, [controller_name] if options[:stylesheets] && behavior == :invoke
end
end
end
Expand Down

This file was deleted.

6 changes: 3 additions & 3 deletions railties/test/generators/assets_generator_test.rb
Expand Up @@ -9,17 +9,17 @@ class AssetsGeneratorTest < Rails::Generators::TestCase
def test_assets
run_generator
assert_file "app/assets/javascripts/posts.js.coffee"
assert_file "app/assets/stylesheets/posts.css.scss"
assert_file "app/assets/stylesheets/posts.css"
end

def test_skipping_assets
content = run_generator ["posts", "--no-stylesheets", "--no-javascripts"]
assert_no_file "app/assets/javascripts/posts.js.coffee"
assert_no_file "app/assets/stylesheets/posts.css.scss"
assert_no_file "app/assets/stylesheets/posts.css"
end

def test_vanilla_assets
run_generator ["posts", "--no-javascript-engine", "--no-stylesheet-engine"]
run_generator ["posts", "--no-javascript-engine"]
assert_file "app/assets/javascripts/posts.js"
assert_file "app/assets/stylesheets/posts.css"
end
Expand Down
2 changes: 1 addition & 1 deletion railties/test/generators/controller_generator_test.rb
Expand Up @@ -40,7 +40,7 @@ def test_does_not_invoke_helper_if_required
def test_invokes_assets
run_generator
assert_file "app/assets/javascripts/account.js.coffee"
assert_file "app/assets/stylesheets/account.css.scss"
assert_file "app/assets/stylesheets/account.css"
end

def test_invokes_default_test_framework
Expand Down
8 changes: 4 additions & 4 deletions railties/test/generators/namespaced_generators_test.rb
Expand Up @@ -252,7 +252,7 @@ def test_scaffold_on_invoke
assert_file "test/unit/helpers/test_app/product_lines_helper_test.rb"

# Stylesheets
assert_file "app/assets/stylesheets/scaffold.css.scss"
assert_file "app/assets/stylesheets/scaffold.css"
end

def test_scaffold_on_revoke
Expand Down Expand Up @@ -283,7 +283,7 @@ def test_scaffold_on_revoke
assert_no_file "test/unit/helpers/test_app/product_lines_helper_test.rb"

# Stylesheets (should not be removed)
assert_file "app/assets/stylesheets/scaffold.css.scss"
assert_file "app/assets/stylesheets/scaffold.css"
end

def test_scaffold_with_namespace_on_invoke
Expand Down Expand Up @@ -324,7 +324,7 @@ def test_scaffold_with_namespace_on_invoke
assert_file "test/unit/helpers/test_app/admin/roles_helper_test.rb"

# Stylesheets
assert_file "app/assets/stylesheets/scaffold.css.scss"
assert_file "app/assets/stylesheets/scaffold.css"
end

def test_scaffold_with_namespace_on_revoke
Expand Down Expand Up @@ -356,6 +356,6 @@ def test_scaffold_with_namespace_on_revoke
assert_no_file "test/unit/helpers/test_app/admin/roles_helper_test.rb"

# Stylesheets (should not be removed)
assert_file "app/assets/stylesheets/scaffold.css.scss"
assert_file "app/assets/stylesheets/scaffold.css"
end
end
32 changes: 16 additions & 16 deletions railties/test/generators/scaffold_generator_test.rb
Expand Up @@ -80,9 +80,9 @@ def test_scaffold_on_invoke
assert_file "test/unit/helpers/product_lines_helper_test.rb"

# Assets
assert_file "app/assets/stylesheets/scaffold.css.scss"
assert_file "app/assets/stylesheets/scaffold.css"
assert_file "app/assets/javascripts/product_lines.js.coffee"
assert_file "app/assets/stylesheets/product_lines.css.scss"
assert_file "app/assets/stylesheets/product_lines.css"
end

def test_scaffold_on_revoke
Expand Down Expand Up @@ -113,9 +113,9 @@ def test_scaffold_on_revoke
assert_no_file "test/unit/helpers/product_lines_helper_test.rb"

# Assets
assert_file "app/assets/stylesheets/scaffold.css.scss", /&:visited/
assert_file "app/assets/stylesheets/scaffold.css", /:visited/
assert_no_file "app/assets/javascripts/product_lines.js.coffee"
assert_no_file "app/assets/stylesheets/product_lines.css.scss"
assert_no_file "app/assets/stylesheets/product_lines.css"
end

def test_scaffold_with_namespace_on_invoke
Expand Down Expand Up @@ -189,9 +189,9 @@ def test_scaffold_with_namespace_on_invoke
assert_file "test/unit/helpers/admin/roles_helper_test.rb"

# Assets
assert_file "app/assets/stylesheets/scaffold.css.scss", /&:visited/
assert_file "app/assets/stylesheets/scaffold.css", /:visited/
assert_file "app/assets/javascripts/admin/roles.js.coffee"
assert_file "app/assets/stylesheets/admin/roles.css.scss"
assert_file "app/assets/stylesheets/admin/roles.css"
end

def test_scaffold_with_namespace_on_revoke
Expand Down Expand Up @@ -223,9 +223,9 @@ def test_scaffold_with_namespace_on_revoke
assert_no_file "test/unit/helpers/admin/roles_helper_test.rb"

# Assets
assert_file "app/assets/stylesheets/scaffold.css.scss"
assert_file "app/assets/stylesheets/scaffold.css"
assert_no_file "app/assets/javascripts/admin/roles.js.coffee"
assert_no_file "app/assets/stylesheets/admin/roles.css.scss"
assert_no_file "app/assets/stylesheets/admin/roles.css"
end

def test_scaffold_generator_on_revoke_does_not_mutilate_legacy_map_parameter
Expand All @@ -245,27 +245,27 @@ def test_scaffold_generator_on_revoke_does_not_mutilate_legacy_map_parameter

def test_scaffold_generator_no_assets
run_generator [ "posts", "--no-assets" ]
assert_file "app/assets/stylesheets/scaffold.css.scss"
assert_file "app/assets/stylesheets/scaffold.css"
assert_no_file "app/assets/javascripts/posts.js.coffee"
assert_no_file "app/assets/stylesheets/posts.css.scss"
assert_no_file "app/assets/stylesheets/posts.css"
end

def test_scaffold_generator_no_stylesheets
run_generator [ "posts", "--no-stylesheets" ]
assert_no_file "app/assets/stylesheets/scaffold.css.scss"
assert_no_file "app/assets/stylesheets/scaffold.css"
assert_file "app/assets/javascripts/posts.js.coffee"
assert_no_file "app/assets/stylesheets/posts.css.scss"
assert_no_file "app/assets/stylesheets/posts.css"
end

def test_scaffold_generator_no_javascripts
run_generator [ "posts", "--no-javascripts" ]
assert_file "app/assets/stylesheets/scaffold.css.scss"
assert_file "app/assets/stylesheets/scaffold.css"
assert_no_file "app/assets/javascripts/posts.js.coffee"
assert_file "app/assets/stylesheets/posts.css.scss"
assert_file "app/assets/stylesheets/posts.css"
end

def test_scaffold_generator_no_negines
run_generator [ "posts", "--no-javascript-engine", "--no-stylesheet-engine" ]
def test_scaffold_generator_no_engines
run_generator [ "posts", "--no-javascript-engine" ]
assert_file "app/assets/stylesheets/scaffold.css"
assert_file "app/assets/javascripts/posts.js"
assert_file "app/assets/stylesheets/posts.css"
Expand Down

0 comments on commit ac3503c

Please sign in to comment.