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.
Files changed (72) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/.travis.yml +37 -0
  4. data/CODE_OF_CONDUCT.md +10 -0
  5. data/Gemfile +7 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +124 -0
  8. data/Rakefile +33 -0
  9. data/gemfiles/rails_4_2.gemfile +6 -0
  10. data/gemfiles/rails_5_2.gemfile +6 -0
  11. data/gemfiles/rails_6_0.gemfile +6 -0
  12. data/gemfiles/sprockets-rails_2_3.gemfile +6 -0
  13. data/gemfiles/sprockets-rails_3_0.gemfile +6 -0
  14. data/gemfiles/sprockets_3_0.gemfile +6 -0
  15. data/gemfiles/sprockets_4_0.gemfile +6 -0
  16. data/lib/rails/generators/sass/assets/assets_generator.rb +13 -0
  17. data/lib/rails/generators/sass/assets/templates/stylesheet.sass +3 -0
  18. data/lib/rails/generators/sass/scaffold/scaffold_generator.rb +9 -0
  19. data/lib/rails/generators/sass_scaffold.rb +15 -0
  20. data/lib/rails/generators/scss/assets/assets_generator.rb +13 -0
  21. data/lib/rails/generators/scss/assets/templates/stylesheet.scss +3 -0
  22. data/lib/rails/generators/scss/scaffold/scaffold_generator.rb +10 -0
  23. data/lib/sassc/rails/compressor.rb +34 -0
  24. data/lib/sassc/rails/functions.rb +13 -0
  25. data/lib/sassc/rails/importer.rb +181 -0
  26. data/lib/sassc/rails/railtie.rb +81 -0
  27. data/lib/sassc/rails/template.rb +113 -0
  28. data/lib/sassc/rails/version.rb +7 -0
  29. data/lib/sassc/rails.rb +10 -0
  30. data/lib/sassc-rails.rb +4 -0
  31. data/sassc-rails.gemspec +32 -0
  32. data/test/dummy/app/assets/config/manifest.js +3 -0
  33. data/test/dummy/app/assets/fonts/fake-font.ttf +0 -0
  34. data/test/dummy/app/assets/images/.keep +0 -0
  35. data/test/dummy/app/assets/images/1x1.png +0 -0
  36. data/test/dummy/app/assets/images/rails.png +0 -0
  37. data/test/dummy/app/assets/stylesheets/_top_level_partial.scss +3 -0
  38. data/test/dummy/app/assets/stylesheets/application.scss +5 -0
  39. data/test/dummy/app/assets/stylesheets/css_application.css +11 -0
  40. data/test/dummy/app/assets/stylesheets/css_erb_handler.css.erb +3 -0
  41. data/test/dummy/app/assets/stylesheets/css_sass_erb_handler.sass.erb +2 -0
  42. data/test/dummy/app/assets/stylesheets/css_sass_handler.css.sass +2 -0
  43. data/test/dummy/app/assets/stylesheets/css_scss_erb_handler.scss.erb +3 -0
  44. data/test/dummy/app/assets/stylesheets/css_scss_handler.css.scss +3 -0
  45. data/test/dummy/app/assets/stylesheets/erb_render_with_context.css.erb +1804 -0
  46. data/test/dummy/app/assets/stylesheets/glob_multiple_extensions_test.scss +1 -0
  47. data/test/dummy/app/assets/stylesheets/glob_test.scss +1 -0
  48. data/test/dummy/app/assets/stylesheets/globbed/globbed.scss +3 -0
  49. data/test/dummy/app/assets/stylesheets/globbed/nested/nested_glob.scss +3 -0
  50. data/test/dummy/app/assets/stylesheets/globbed_multiple_extensions/glob.scss.erb +3 -0
  51. data/test/dummy/app/assets/stylesheets/helpers_test.scss +18 -0
  52. data/test/dummy/app/assets/stylesheets/imports_test.scss +23 -0
  53. data/test/dummy/app/assets/stylesheets/in_load_paths/partial_in_load_paths.scss +3 -0
  54. data/test/dummy/app/assets/stylesheets/partials/_css_sass_import.sass +5 -0
  55. data/test/dummy/app/assets/stylesheets/partials/_explicit_extension_import.foo +3 -0
  56. data/test/dummy/app/assets/stylesheets/partials/_sass_import.sass +2 -0
  57. data/test/dummy/app/assets/stylesheets/partials/_scss_import.scss +9 -0
  58. data/test/dummy/app/assets/stylesheets/partials/_without_css_ext.scss +3 -0
  59. data/test/dummy/app/assets/stylesheets/partials/subfolder/_relative_sass.sass +2 -0
  60. data/test/dummy/app/assets/stylesheets/partials/subfolder/_relative_scss.scss +3 -0
  61. data/test/dummy/app/assets/stylesheets/partials/subfolder/relative_not_a_partial.scss +3 -0
  62. data/test/dummy/app/assets/stylesheets/sass_erb_handler.sass.erb +2 -0
  63. data/test/dummy/app/assets/stylesheets/scss_erb_handler.scss.erb +3 -0
  64. data/test/dummy/app/assets/stylesheets/special_characters.scss +5 -0
  65. data/test/dummy/app/assets/stylesheets/subfolder/_defaults.scss +3 -0
  66. data/test/dummy/app/assets/stylesheets/subfolder/another_plain.css +3 -0
  67. data/test/dummy/app/assets/stylesheets/subfolder/plain.css +3 -0
  68. data/test/dummy/app/assets/stylesheets/subfolder/second_level.scss +2 -0
  69. data/test/dummy/app/assets/stylesheets/syntax_error.scss +3 -0
  70. data/test/sassc_rails_test.rb +334 -0
  71. data/test/test_helper.rb +17 -0
  72. 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
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SassC
4
+ module Rails
5
+ VERSION = "2.1.2"
6
+ end
7
+ end
@@ -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"
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "sassc/rails"
4
+
@@ -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
@@ -0,0 +1,3 @@
1
+ //= link_tree ../images
2
+ //= link_directory ../javascripts .js
3
+ //= link_directory ../stylesheets .css
File without changes
File without changes
@@ -0,0 +1,3 @@
1
+ .top-level {
2
+ font-color: bold;
3
+ }
@@ -0,0 +1,5 @@
1
+ $b-color: #FFF;
2
+
3
+ .hello {
4
+ color: $b-color;
5
+ }
@@ -0,0 +1,11 @@
1
+ /*
2
+ *= require partials/_sass_import
3
+ *= require partials/_scss_import
4
+ *= require_tree ./globbed
5
+ *= require subfolder/plain
6
+ *= require subfolder/second_level
7
+ */
8
+
9
+ .css-application {
10
+ background: #fff;
11
+ }
@@ -0,0 +1,3 @@
1
+ .css-erb-handler {
2
+ margin: <%= 0 %>;
3
+ }
@@ -0,0 +1,2 @@
1
+ .css-sass-erb-handler
2
+ margin: <%= 0 %>
@@ -0,0 +1,2 @@
1
+ .css-sass-handler
2
+ color: blue
@@ -0,0 +1,3 @@
1
+ .css-scss-erb-handler {
2
+ margin: <%= 0 %>;
3
+ }
@@ -0,0 +1,3 @@
1
+ .css-scss-handler {
2
+ color: yellow;
3
+ }