sassc4-rails 2.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/.travis.yml +37 -0
- data/CODE_OF_CONDUCT.md +10 -0
- data/Gemfile +7 -0
- data/LICENSE.txt +22 -0
- data/README.md +124 -0
- data/Rakefile +33 -0
- data/gemfiles/rails_4_2.gemfile +6 -0
- data/gemfiles/rails_5_2.gemfile +6 -0
- data/gemfiles/rails_6_0.gemfile +6 -0
- data/gemfiles/sprockets-rails_2_3.gemfile +6 -0
- data/gemfiles/sprockets-rails_3_0.gemfile +6 -0
- data/gemfiles/sprockets_3_0.gemfile +6 -0
- data/gemfiles/sprockets_4_0.gemfile +6 -0
- data/lib/rails/generators/sass/assets/assets_generator.rb +13 -0
- data/lib/rails/generators/sass/assets/templates/stylesheet.sass +3 -0
- data/lib/rails/generators/sass/scaffold/scaffold_generator.rb +9 -0
- data/lib/rails/generators/sass_scaffold.rb +15 -0
- data/lib/rails/generators/scss/assets/assets_generator.rb +13 -0
- data/lib/rails/generators/scss/assets/templates/stylesheet.scss +3 -0
- data/lib/rails/generators/scss/scaffold/scaffold_generator.rb +10 -0
- data/lib/sassc/rails/compressor.rb +34 -0
- data/lib/sassc/rails/functions.rb +13 -0
- data/lib/sassc/rails/importer.rb +181 -0
- data/lib/sassc/rails/railtie.rb +81 -0
- data/lib/sassc/rails/template.rb +113 -0
- data/lib/sassc/rails/version.rb +7 -0
- data/lib/sassc/rails.rb +10 -0
- data/lib/sassc-rails.rb +4 -0
- data/sassc-rails.gemspec +32 -0
- data/test/dummy/app/assets/config/manifest.js +3 -0
- data/test/dummy/app/assets/fonts/fake-font.ttf +0 -0
- data/test/dummy/app/assets/images/.keep +0 -0
- data/test/dummy/app/assets/images/1x1.png +0 -0
- data/test/dummy/app/assets/images/rails.png +0 -0
- data/test/dummy/app/assets/stylesheets/_top_level_partial.scss +3 -0
- data/test/dummy/app/assets/stylesheets/application.scss +5 -0
- data/test/dummy/app/assets/stylesheets/css_application.css +11 -0
- data/test/dummy/app/assets/stylesheets/css_erb_handler.css.erb +3 -0
- data/test/dummy/app/assets/stylesheets/css_sass_erb_handler.sass.erb +2 -0
- data/test/dummy/app/assets/stylesheets/css_sass_handler.css.sass +2 -0
- data/test/dummy/app/assets/stylesheets/css_scss_erb_handler.scss.erb +3 -0
- data/test/dummy/app/assets/stylesheets/css_scss_handler.css.scss +3 -0
- data/test/dummy/app/assets/stylesheets/erb_render_with_context.css.erb +1804 -0
- data/test/dummy/app/assets/stylesheets/glob_multiple_extensions_test.scss +1 -0
- data/test/dummy/app/assets/stylesheets/glob_test.scss +1 -0
- data/test/dummy/app/assets/stylesheets/globbed/globbed.scss +3 -0
- data/test/dummy/app/assets/stylesheets/globbed/nested/nested_glob.scss +3 -0
- data/test/dummy/app/assets/stylesheets/globbed_multiple_extensions/glob.scss.erb +3 -0
- data/test/dummy/app/assets/stylesheets/helpers_test.scss +18 -0
- data/test/dummy/app/assets/stylesheets/imports_test.scss +23 -0
- data/test/dummy/app/assets/stylesheets/in_load_paths/partial_in_load_paths.scss +3 -0
- data/test/dummy/app/assets/stylesheets/partials/_css_sass_import.sass +5 -0
- data/test/dummy/app/assets/stylesheets/partials/_explicit_extension_import.foo +3 -0
- data/test/dummy/app/assets/stylesheets/partials/_sass_import.sass +2 -0
- data/test/dummy/app/assets/stylesheets/partials/_scss_import.scss +9 -0
- data/test/dummy/app/assets/stylesheets/partials/_without_css_ext.scss +3 -0
- data/test/dummy/app/assets/stylesheets/partials/subfolder/_relative_sass.sass +2 -0
- data/test/dummy/app/assets/stylesheets/partials/subfolder/_relative_scss.scss +3 -0
- data/test/dummy/app/assets/stylesheets/partials/subfolder/relative_not_a_partial.scss +3 -0
- data/test/dummy/app/assets/stylesheets/sass_erb_handler.sass.erb +2 -0
- data/test/dummy/app/assets/stylesheets/scss_erb_handler.scss.erb +3 -0
- data/test/dummy/app/assets/stylesheets/special_characters.scss +5 -0
- data/test/dummy/app/assets/stylesheets/subfolder/_defaults.scss +3 -0
- data/test/dummy/app/assets/stylesheets/subfolder/another_plain.css +3 -0
- data/test/dummy/app/assets/stylesheets/subfolder/plain.css +3 -0
- data/test/dummy/app/assets/stylesheets/subfolder/second_level.scss +2 -0
- data/test/dummy/app/assets/stylesheets/syntax_error.scss +3 -0
- data/test/sassc_rails_test.rb +334 -0
- data/test/test_helper.rb +17 -0
- metadata +281 -0
@@ -0,0 +1,81 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_support/core_ext/class/attribute'
|
4
|
+
require 'sprockets/railtie'
|
5
|
+
|
6
|
+
module SassC::Rails
|
7
|
+
class Railtie < ::Rails::Railtie
|
8
|
+
config.sass = ActiveSupport::OrderedOptions.new
|
9
|
+
|
10
|
+
# Establish static configuration defaults
|
11
|
+
# Emit scss files during stylesheet generation of scaffold
|
12
|
+
config.sass.preferred_syntax = :scss
|
13
|
+
# Initialize the load paths to an empty array
|
14
|
+
config.sass.load_paths = []
|
15
|
+
|
16
|
+
# Display line comments above each selector as a debugging aid
|
17
|
+
config.sass.line_comments = true
|
18
|
+
|
19
|
+
# Set the default stylesheet engine
|
20
|
+
# It can be overridden by passing:
|
21
|
+
# --stylesheet_engine=sass
|
22
|
+
# to the rails generate command
|
23
|
+
config.app_generators.stylesheet_engine config.sass.preferred_syntax
|
24
|
+
|
25
|
+
if config.respond_to?(:annotations)
|
26
|
+
config.annotations.register_extensions("scss", "sass") { |annotation| /\/\/\s*(#{annotation}):?\s*(.*)$/ }
|
27
|
+
end
|
28
|
+
|
29
|
+
# Remove the sass middleware if it gets inadvertently enabled by applications.
|
30
|
+
config.after_initialize do |app|
|
31
|
+
app.config.middleware.delete(Sass::Plugin::Rack) if defined?(Sass::Plugin::Rack)
|
32
|
+
end
|
33
|
+
|
34
|
+
initializer :setup_sass, group: :all do |app|
|
35
|
+
# Only emit one kind of syntax because though we have registered two kinds of generators
|
36
|
+
syntax = app.config.sass.preferred_syntax.to_sym
|
37
|
+
alt_syntax = syntax == :sass ? "scss" : "sass"
|
38
|
+
app.config.generators.hide_namespace alt_syntax
|
39
|
+
|
40
|
+
# Override stylesheet engine to the preferred syntax
|
41
|
+
config.app_generators.stylesheet_engine syntax
|
42
|
+
|
43
|
+
# Establish configuration defaults that are environmental in nature
|
44
|
+
# if config.sass.full_exception.nil?
|
45
|
+
# # Display a stack trace in the css output when in development-like environments.
|
46
|
+
# config.sass.full_exception = app.config.consider_all_requests_local
|
47
|
+
# end
|
48
|
+
|
49
|
+
app.config.assets.configure do |env|
|
50
|
+
env.context_class.class_eval do
|
51
|
+
class_attribute :sass_config
|
52
|
+
self.sass_config = app.config.sass
|
53
|
+
end
|
54
|
+
|
55
|
+
if env.respond_to?(:register_transformer)
|
56
|
+
env.register_transformer 'text/sass', 'text/css', SassC::Rails::SassTemplate.new
|
57
|
+
env.register_transformer 'text/scss', 'text/css', SassC::Rails::ScssTemplate.new
|
58
|
+
end
|
59
|
+
|
60
|
+
if env.respond_to?(:register_engine)
|
61
|
+
[
|
62
|
+
['.sass', SassC::Rails::SassTemplate],
|
63
|
+
['.scss', SassC::Rails::ScssTemplate]
|
64
|
+
].each do |engine|
|
65
|
+
engine << { silence_deprecation: true } if Sprockets::VERSION.start_with?("3")
|
66
|
+
env.register_engine(*engine)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
initializer :setup_compression, group: :all do |app|
|
73
|
+
if !Rails.env.development?
|
74
|
+
app.config.assets.css_compressor = :sass unless app.config.assets.has_key?(:css_compressor)
|
75
|
+
else
|
76
|
+
# Use expanded output instead of the sass default of :nested unless specified
|
77
|
+
app.config.sass.style ||= :expanded
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,113 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "sprockets/version"
|
4
|
+
require 'sprockets/sass_processor'
|
5
|
+
require "sprockets/utils"
|
6
|
+
|
7
|
+
module SassC::Rails
|
8
|
+
class SassTemplate < Sprockets::SassProcessor
|
9
|
+
def initialize(options = {}, &block)
|
10
|
+
@cache_version = options[:cache_version]
|
11
|
+
@cache_key = "#{self.class.name}:#{VERSION}:#{SassC::VERSION}:#{@cache_version}".freeze
|
12
|
+
#@importer_class = options[:importer] || Sass::Importers::Filesystem
|
13
|
+
@sass_config = options[:sass_config] || {}
|
14
|
+
@functions = Module.new do
|
15
|
+
include Functions
|
16
|
+
include options[:functions] if options[:functions]
|
17
|
+
class_eval(&block) if block_given?
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def call(input)
|
22
|
+
context = input[:environment].context_class.new(input)
|
23
|
+
|
24
|
+
options = {
|
25
|
+
filename: input[:filename],
|
26
|
+
line_comments: line_comments?,
|
27
|
+
syntax: self.class.syntax,
|
28
|
+
load_paths: input[:environment].paths,
|
29
|
+
importer: SassC::Rails::Importer,
|
30
|
+
sprockets: {
|
31
|
+
context: context,
|
32
|
+
environment: input[:environment],
|
33
|
+
dependencies: context.metadata[:dependency_paths]
|
34
|
+
}
|
35
|
+
}.merge!(config_options) { |key, left, right| safe_merge(key, left, right) }
|
36
|
+
|
37
|
+
engine = ::SassC::Engine.new(input[:data], options)
|
38
|
+
|
39
|
+
css = Sprockets::Utils.module_include(::SassC::Script::Functions, @functions) do
|
40
|
+
engine.render
|
41
|
+
end
|
42
|
+
|
43
|
+
context.metadata.merge(data: css)
|
44
|
+
end
|
45
|
+
|
46
|
+
def config_options
|
47
|
+
opts = { style: sass_style, load_paths: load_paths }
|
48
|
+
|
49
|
+
|
50
|
+
if Rails.application.config.sass.inline_source_maps
|
51
|
+
opts.merge!({
|
52
|
+
source_map_file: ".",
|
53
|
+
source_map_embed: true,
|
54
|
+
source_map_contents: true,
|
55
|
+
})
|
56
|
+
end
|
57
|
+
|
58
|
+
opts
|
59
|
+
end
|
60
|
+
|
61
|
+
def sass_style
|
62
|
+
(Rails.application.config.sass.style || :expanded).to_sym
|
63
|
+
end
|
64
|
+
|
65
|
+
def load_paths
|
66
|
+
Rails.application.config.sass.load_paths || []
|
67
|
+
end
|
68
|
+
|
69
|
+
def line_comments?
|
70
|
+
Rails.application.config.sass.line_comments
|
71
|
+
end
|
72
|
+
|
73
|
+
def safe_merge(_key, left, right)
|
74
|
+
if [left, right].all? { |v| v.is_a? Hash }
|
75
|
+
left.merge(right) { |k, l, r| safe_merge(k, l, r) }
|
76
|
+
elsif [left, right].all? { |v| v.is_a? Array }
|
77
|
+
(left + right).uniq
|
78
|
+
else
|
79
|
+
right
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
# The methods in the Functions module were copied here from sprockets in order to
|
84
|
+
# override the Value class names (e.g. ::SassC::Script::Value::String)
|
85
|
+
module Functions
|
86
|
+
def asset_path(path, options = {})
|
87
|
+
path = path.value
|
88
|
+
|
89
|
+
path, _, query, fragment = URI.split(path)[5..8]
|
90
|
+
path = sprockets_context.asset_path(path, options)
|
91
|
+
query = "?#{query}" if query
|
92
|
+
fragment = "##{fragment}" if fragment
|
93
|
+
|
94
|
+
::SassC::Script::Value::String.new("#{path}#{query}#{fragment}", :string)
|
95
|
+
end
|
96
|
+
|
97
|
+
def asset_url(path, options = {})
|
98
|
+
::SassC::Script::Value::String.new("url(#{asset_path(path, options).value})")
|
99
|
+
end
|
100
|
+
|
101
|
+
def asset_data_url(path)
|
102
|
+
url = sprockets_context.asset_data_uri(path.value)
|
103
|
+
::SassC::Script::Value::String.new("url(" + url + ")")
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
class ScssTemplate < SassTemplate
|
109
|
+
def self.syntax
|
110
|
+
:scss
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
data/lib/sassc/rails.rb
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "rails/version"
|
4
|
+
|
5
|
+
require "sassc"
|
6
|
+
require_relative "rails/functions"
|
7
|
+
require_relative "rails/importer"
|
8
|
+
require_relative "rails/template"
|
9
|
+
require_relative "rails/compressor"
|
10
|
+
require_relative "rails/railtie"
|
data/lib/sassc-rails.rb
ADDED
data/sassc-rails.gemspec
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'sassc/rails/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "sassc4-rails"
|
8
|
+
spec.version = SassC::Rails::VERSION
|
9
|
+
spec.authors = ["Ryan Boland", "Vladimir Ivanin"]
|
10
|
+
spec.email = ["ryan@tanookilabs.com", "ivaninww@gmail.com"]
|
11
|
+
spec.summary = %q{Integrate SassC-Ruby into Rails.}
|
12
|
+
spec.description = %q{Integrate SassC-Ruby into Rails.}
|
13
|
+
spec.homepage = "https://github.com/sass/sassc-rails"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency 'pry'
|
22
|
+
spec.add_development_dependency "bundler"
|
23
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
24
|
+
spec.add_development_dependency 'mocha'
|
25
|
+
|
26
|
+
spec.add_dependency "sassc4", ">= 2.4.0"
|
27
|
+
spec.add_dependency "tilt"
|
28
|
+
|
29
|
+
spec.add_dependency 'railties', '>= 4.0.0'
|
30
|
+
spec.add_dependency 'sprockets', '> 3.0'
|
31
|
+
spec.add_dependency 'sprockets-rails'
|
32
|
+
end
|
File without changes
|
File without changes
|
Binary file
|
Binary file
|