mirror of
https://github.com/github/rails.git
synced 2026-04-26 03:00:59 -04:00
Move SCSS generators and default templates from Rails to the Sass Railtie (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
This commit is contained in:
@@ -7,15 +7,7 @@ module Sprockets
|
||||
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|
|
||||
@@ -58,8 +50,8 @@ module Sprockets
|
||||
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
|
||||
|
||||
@@ -81,15 +73,6 @@ module Sprockets
|
||||
|
||||
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
|
||||
|
||||
@@ -57,7 +57,7 @@ module Rails
|
||||
:resource_controller => :controller,
|
||||
:scaffold_controller => :scaffold_controller,
|
||||
:stylesheets => true,
|
||||
:stylesheet_engine => nil,
|
||||
:stylesheet_engine => :css,
|
||||
:test_framework => false,
|
||||
:template_engine => :erb
|
||||
},
|
||||
|
||||
13
railties/lib/rails/generators/css/assets/assets_generator.rb
Normal file
13
railties/lib/rails/generators/css/assets/assets_generator.rb
Normal file
@@ -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/
|
||||
*/
|
||||
@@ -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
|
||||
@@ -13,12 +13,6 @@ module Rails
|
||||
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
|
||||
@@ -30,9 +24,8 @@ module Rails
|
||||
"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
|
||||
|
||||
@@ -11,21 +11,12 @@ module Rails
|
||||
|
||||
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
|
||||
|
||||
@@ -1,58 +0,0 @@
|
||||
body { background-color: #fff; color: #333; }
|
||||
|
||||
body, p, ol, ul, td {
|
||||
font-family: verdana, arial, helvetica, sans-serif;
|
||||
font-size: 13px;
|
||||
line-height: 18px;
|
||||
}
|
||||
|
||||
pre {
|
||||
background-color: #eee;
|
||||
padding: 10px;
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #000;
|
||||
&:visited { color: #666; }
|
||||
&:hover { color: #fff; background-color:#000; }
|
||||
}
|
||||
|
||||
div.field, div.actions {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
#notice {
|
||||
color: green;
|
||||
}
|
||||
|
||||
.field_with_errors {
|
||||
padding: 2px;
|
||||
background-color: red;
|
||||
display: table;
|
||||
}
|
||||
|
||||
#error_explanation {
|
||||
width: 450px;
|
||||
border: 2px solid red;
|
||||
padding: 7px;
|
||||
padding-bottom: 0;
|
||||
margin-bottom: 20px;
|
||||
background-color: #f0f0f0;
|
||||
|
||||
h2 {
|
||||
text-align: left;
|
||||
font-weight: bold;
|
||||
padding: 5px 5px 5px 15px;
|
||||
font-size: 12px;
|
||||
margin: -7px;
|
||||
margin-bottom: 0px;
|
||||
background-color: #c00;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
ul li {
|
||||
font-size: 12px;
|
||||
list-style: square;
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -40,7 +40,7 @@ class ControllerGeneratorTest < Rails::Generators::TestCase
|
||||
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
|
||||
|
||||
@@ -252,7 +252,7 @@ class NamespacedScaffoldGeneratorTest < NamespacedGeneratorTestCase
|
||||
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
|
||||
@@ -283,7 +283,7 @@ class NamespacedScaffoldGeneratorTest < NamespacedGeneratorTestCase
|
||||
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
|
||||
@@ -324,7 +324,7 @@ class NamespacedScaffoldGeneratorTest < NamespacedGeneratorTestCase
|
||||
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
|
||||
@@ -356,6 +356,6 @@ class NamespacedScaffoldGeneratorTest < NamespacedGeneratorTestCase
|
||||
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
|
||||
|
||||
@@ -80,9 +80,9 @@ class ScaffoldGeneratorTest < Rails::Generators::TestCase
|
||||
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
|
||||
@@ -113,9 +113,9 @@ class ScaffoldGeneratorTest < Rails::Generators::TestCase
|
||||
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
|
||||
@@ -189,9 +189,9 @@ class ScaffoldGeneratorTest < Rails::Generators::TestCase
|
||||
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
|
||||
@@ -223,9 +223,9 @@ class ScaffoldGeneratorTest < Rails::Generators::TestCase
|
||||
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
|
||||
@@ -245,27 +245,27 @@ class ScaffoldGeneratorTest < Rails::Generators::TestCase
|
||||
|
||||
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"
|
||||
|
||||
Reference in New Issue
Block a user