xass 0.1.0
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/.yardopts +11 -0
- data/CONTRIBUTING +3 -0
- data/MIT-LICENSE +20 -0
- data/README.md +201 -0
- data/Rakefile +349 -0
- data/VERSION +1 -0
- data/VERSION_NAME +1 -0
- data/bin/push +13 -0
- data/bin/sass +13 -0
- data/bin/sass-convert +12 -0
- data/bin/scss +13 -0
- data/extra/update_watch.rb +13 -0
- data/init.rb +18 -0
- data/lib/sass/cache_stores/base.rb +88 -0
- data/lib/sass/cache_stores/chain.rb +33 -0
- data/lib/sass/cache_stores/filesystem.rb +64 -0
- data/lib/sass/cache_stores/memory.rb +47 -0
- data/lib/sass/cache_stores/null.rb +25 -0
- data/lib/sass/cache_stores.rb +15 -0
- data/lib/sass/callbacks.rb +66 -0
- data/lib/sass/css.rb +409 -0
- data/lib/sass/engine.rb +930 -0
- data/lib/sass/environment.rb +101 -0
- data/lib/sass/error.rb +201 -0
- data/lib/sass/exec.rb +707 -0
- data/lib/sass/importers/base.rb +139 -0
- data/lib/sass/importers/filesystem.rb +186 -0
- data/lib/sass/importers.rb +22 -0
- data/lib/sass/logger/base.rb +32 -0
- data/lib/sass/logger/log_level.rb +49 -0
- data/lib/sass/logger.rb +15 -0
- data/lib/sass/media.rb +213 -0
- data/lib/sass/plugin/compiler.rb +406 -0
- data/lib/sass/plugin/configuration.rb +123 -0
- data/lib/sass/plugin/generic.rb +15 -0
- data/lib/sass/plugin/merb.rb +48 -0
- data/lib/sass/plugin/rack.rb +60 -0
- data/lib/sass/plugin/rails.rb +47 -0
- data/lib/sass/plugin/staleness_checker.rb +199 -0
- data/lib/sass/plugin.rb +133 -0
- data/lib/sass/railtie.rb +10 -0
- data/lib/sass/repl.rb +57 -0
- data/lib/sass/root.rb +7 -0
- data/lib/sass/script/arg_list.rb +52 -0
- data/lib/sass/script/bool.rb +18 -0
- data/lib/sass/script/color.rb +606 -0
- data/lib/sass/script/css_lexer.rb +29 -0
- data/lib/sass/script/css_parser.rb +31 -0
- data/lib/sass/script/funcall.rb +245 -0
- data/lib/sass/script/functions.rb +1543 -0
- data/lib/sass/script/interpolation.rb +79 -0
- data/lib/sass/script/lexer.rb +345 -0
- data/lib/sass/script/list.rb +85 -0
- data/lib/sass/script/literal.rb +221 -0
- data/lib/sass/script/node.rb +99 -0
- data/lib/sass/script/null.rb +37 -0
- data/lib/sass/script/number.rb +453 -0
- data/lib/sass/script/operation.rb +110 -0
- data/lib/sass/script/parser.rb +502 -0
- data/lib/sass/script/string.rb +51 -0
- data/lib/sass/script/string_interpolation.rb +103 -0
- data/lib/sass/script/unary_operation.rb +69 -0
- data/lib/sass/script/variable.rb +58 -0
- data/lib/sass/script.rb +39 -0
- data/lib/sass/scss/css_parser.rb +36 -0
- data/lib/sass/scss/parser.rb +1180 -0
- data/lib/sass/scss/rx.rb +133 -0
- data/lib/sass/scss/script_lexer.rb +15 -0
- data/lib/sass/scss/script_parser.rb +25 -0
- data/lib/sass/scss/static_parser.rb +54 -0
- data/lib/sass/scss.rb +16 -0
- data/lib/sass/selector/abstract_sequence.rb +94 -0
- data/lib/sass/selector/comma_sequence.rb +92 -0
- data/lib/sass/selector/sequence.rb +507 -0
- data/lib/sass/selector/simple.rb +119 -0
- data/lib/sass/selector/simple_sequence.rb +215 -0
- data/lib/sass/selector.rb +452 -0
- data/lib/sass/shared.rb +76 -0
- data/lib/sass/supports.rb +229 -0
- data/lib/sass/tree/charset_node.rb +22 -0
- data/lib/sass/tree/comment_node.rb +82 -0
- data/lib/sass/tree/content_node.rb +9 -0
- data/lib/sass/tree/css_import_node.rb +60 -0
- data/lib/sass/tree/debug_node.rb +18 -0
- data/lib/sass/tree/directive_node.rb +42 -0
- data/lib/sass/tree/each_node.rb +24 -0
- data/lib/sass/tree/extend_node.rb +36 -0
- data/lib/sass/tree/for_node.rb +36 -0
- data/lib/sass/tree/function_node.rb +34 -0
- data/lib/sass/tree/if_node.rb +52 -0
- data/lib/sass/tree/import_node.rb +75 -0
- data/lib/sass/tree/media_node.rb +58 -0
- data/lib/sass/tree/mixin_def_node.rb +38 -0
- data/lib/sass/tree/mixin_node.rb +39 -0
- data/lib/sass/tree/node.rb +196 -0
- data/lib/sass/tree/prop_node.rb +152 -0
- data/lib/sass/tree/return_node.rb +18 -0
- data/lib/sass/tree/root_node.rb +78 -0
- data/lib/sass/tree/rule_node.rb +132 -0
- data/lib/sass/tree/supports_node.rb +51 -0
- data/lib/sass/tree/trace_node.rb +32 -0
- data/lib/sass/tree/variable_node.rb +30 -0
- data/lib/sass/tree/visitors/base.rb +75 -0
- data/lib/sass/tree/visitors/check_nesting.rb +147 -0
- data/lib/sass/tree/visitors/convert.rb +316 -0
- data/lib/sass/tree/visitors/cssize.rb +241 -0
- data/lib/sass/tree/visitors/deep_copy.rb +102 -0
- data/lib/sass/tree/visitors/extend.rb +68 -0
- data/lib/sass/tree/visitors/perform.rb +446 -0
- data/lib/sass/tree/visitors/set_options.rb +125 -0
- data/lib/sass/tree/visitors/to_css.rb +228 -0
- data/lib/sass/tree/warn_node.rb +18 -0
- data/lib/sass/tree/while_node.rb +18 -0
- data/lib/sass/util/multibyte_string_scanner.rb +155 -0
- data/lib/sass/util/subset_map.rb +109 -0
- data/lib/sass/util/test.rb +10 -0
- data/lib/sass/util.rb +948 -0
- data/lib/sass/version.rb +126 -0
- data/lib/sass.rb +95 -0
- data/rails/init.rb +1 -0
- data/test/Gemfile +3 -0
- data/test/Gemfile.lock +10 -0
- data/test/sass/cache_test.rb +89 -0
- data/test/sass/callbacks_test.rb +61 -0
- data/test/sass/conversion_test.rb +1760 -0
- data/test/sass/css2sass_test.rb +458 -0
- data/test/sass/data/hsl-rgb.txt +319 -0
- data/test/sass/engine_test.rb +3244 -0
- data/test/sass/exec_test.rb +86 -0
- data/test/sass/extend_test.rb +1482 -0
- data/test/sass/fixtures/test_staleness_check_across_importers.css +1 -0
- data/test/sass/fixtures/test_staleness_check_across_importers.scss +1 -0
- data/test/sass/functions_test.rb +1139 -0
- data/test/sass/importer_test.rb +192 -0
- data/test/sass/logger_test.rb +58 -0
- data/test/sass/mock_importer.rb +49 -0
- data/test/sass/more_results/more1.css +9 -0
- data/test/sass/more_results/more1_with_line_comments.css +26 -0
- data/test/sass/more_results/more_import.css +29 -0
- data/test/sass/more_templates/_more_partial.sass +2 -0
- data/test/sass/more_templates/more1.sass +23 -0
- data/test/sass/more_templates/more_import.sass +11 -0
- data/test/sass/plugin_test.rb +564 -0
- data/test/sass/results/alt.css +4 -0
- data/test/sass/results/basic.css +9 -0
- data/test/sass/results/cached_import_option.css +3 -0
- data/test/sass/results/compact.css +5 -0
- data/test/sass/results/complex.css +86 -0
- data/test/sass/results/compressed.css +1 -0
- data/test/sass/results/expanded.css +19 -0
- data/test/sass/results/filename_fn.css +3 -0
- data/test/sass/results/if.css +3 -0
- data/test/sass/results/import.css +31 -0
- data/test/sass/results/import_charset.css +5 -0
- data/test/sass/results/import_charset_1_8.css +5 -0
- data/test/sass/results/import_charset_ibm866.css +5 -0
- data/test/sass/results/import_content.css +1 -0
- data/test/sass/results/line_numbers.css +49 -0
- data/test/sass/results/mixins.css +95 -0
- data/test/sass/results/multiline.css +24 -0
- data/test/sass/results/nested.css +22 -0
- data/test/sass/results/options.css +1 -0
- data/test/sass/results/parent_ref.css +13 -0
- data/test/sass/results/script.css +16 -0
- data/test/sass/results/scss_import.css +31 -0
- data/test/sass/results/scss_importee.css +2 -0
- data/test/sass/results/subdir/nested_subdir/nested_subdir.css +1 -0
- data/test/sass/results/subdir/subdir.css +3 -0
- data/test/sass/results/units.css +11 -0
- data/test/sass/results/warn.css +0 -0
- data/test/sass/results/warn_imported.css +0 -0
- data/test/sass/script_conversion_test.rb +299 -0
- data/test/sass/script_test.rb +622 -0
- data/test/sass/scss/css_test.rb +1100 -0
- data/test/sass/scss/rx_test.rb +156 -0
- data/test/sass/scss/scss_test.rb +2106 -0
- data/test/sass/scss/test_helper.rb +37 -0
- data/test/sass/templates/_cached_import_option_partial.scss +1 -0
- data/test/sass/templates/_double_import_loop2.sass +1 -0
- data/test/sass/templates/_filename_fn_import.scss +11 -0
- data/test/sass/templates/_imported_charset_ibm866.sass +4 -0
- data/test/sass/templates/_imported_charset_utf8.sass +4 -0
- data/test/sass/templates/_imported_content.sass +3 -0
- data/test/sass/templates/_partial.sass +2 -0
- data/test/sass/templates/_same_name_different_partiality.scss +1 -0
- data/test/sass/templates/alt.sass +16 -0
- data/test/sass/templates/basic.sass +23 -0
- data/test/sass/templates/bork1.sass +2 -0
- data/test/sass/templates/bork2.sass +2 -0
- data/test/sass/templates/bork3.sass +2 -0
- data/test/sass/templates/bork4.sass +2 -0
- data/test/sass/templates/bork5.sass +3 -0
- data/test/sass/templates/cached_import_option.scss +3 -0
- data/test/sass/templates/compact.sass +17 -0
- data/test/sass/templates/complex.sass +305 -0
- data/test/sass/templates/compressed.sass +15 -0
- data/test/sass/templates/double_import_loop1.sass +1 -0
- data/test/sass/templates/expanded.sass +17 -0
- data/test/sass/templates/filename_fn.scss +18 -0
- data/test/sass/templates/if.sass +11 -0
- data/test/sass/templates/import.sass +12 -0
- data/test/sass/templates/import_charset.sass +9 -0
- data/test/sass/templates/import_charset_1_8.sass +6 -0
- data/test/sass/templates/import_charset_ibm866.sass +11 -0
- data/test/sass/templates/import_content.sass +4 -0
- data/test/sass/templates/importee.less +2 -0
- data/test/sass/templates/importee.sass +19 -0
- data/test/sass/templates/line_numbers.sass +13 -0
- data/test/sass/templates/mixin_bork.sass +5 -0
- data/test/sass/templates/mixins.sass +76 -0
- data/test/sass/templates/multiline.sass +20 -0
- data/test/sass/templates/nested.sass +25 -0
- data/test/sass/templates/nested_bork1.sass +2 -0
- data/test/sass/templates/nested_bork2.sass +2 -0
- data/test/sass/templates/nested_bork3.sass +2 -0
- data/test/sass/templates/nested_bork4.sass +2 -0
- data/test/sass/templates/nested_import.sass +2 -0
- data/test/sass/templates/nested_mixin_bork.sass +6 -0
- data/test/sass/templates/options.sass +2 -0
- data/test/sass/templates/parent_ref.sass +25 -0
- data/test/sass/templates/same_name_different_ext.sass +2 -0
- data/test/sass/templates/same_name_different_ext.scss +1 -0
- data/test/sass/templates/same_name_different_partiality.scss +1 -0
- data/test/sass/templates/script.sass +101 -0
- data/test/sass/templates/scss_import.scss +11 -0
- data/test/sass/templates/scss_importee.scss +1 -0
- data/test/sass/templates/single_import_loop.sass +1 -0
- data/test/sass/templates/subdir/import_up1.scss +1 -0
- data/test/sass/templates/subdir/import_up2.scss +1 -0
- data/test/sass/templates/subdir/nested_subdir/_nested_partial.sass +2 -0
- data/test/sass/templates/subdir/nested_subdir/nested_subdir.sass +3 -0
- data/test/sass/templates/subdir/subdir.sass +6 -0
- data/test/sass/templates/units.sass +11 -0
- data/test/sass/templates/warn.sass +3 -0
- data/test/sass/templates/warn_imported.sass +4 -0
- data/test/sass/test_helper.rb +8 -0
- data/test/sass/util/multibyte_string_scanner_test.rb +147 -0
- data/test/sass/util/subset_map_test.rb +91 -0
- data/test/sass/util_test.rb +382 -0
- data/test/test_helper.rb +80 -0
- metadata +354 -0
data/lib/sass/version.rb
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
require 'date'
|
|
2
|
+
|
|
3
|
+
# This is necessary for loading Sass when Haml is required in Rails 3.
|
|
4
|
+
# Once the split is complete, we can remove it.
|
|
5
|
+
require File.dirname(__FILE__) + '/../sass'
|
|
6
|
+
require 'sass/util'
|
|
7
|
+
|
|
8
|
+
module Sass
|
|
9
|
+
# Handles Sass version-reporting.
|
|
10
|
+
# Sass not only reports the standard three version numbers,
|
|
11
|
+
# but its Git revision hash as well,
|
|
12
|
+
# if it was installed from Git.
|
|
13
|
+
module Version
|
|
14
|
+
include Sass::Util
|
|
15
|
+
|
|
16
|
+
# Returns a hash representing the version of Sass.
|
|
17
|
+
# The `:major`, `:minor`, and `:teeny` keys have their respective numbers as Fixnums.
|
|
18
|
+
# The `:name` key has the name of the version.
|
|
19
|
+
# The `:string` key contains a human-readable string representation of the version.
|
|
20
|
+
# The `:number` key is the major, minor, and teeny keys separated by periods.
|
|
21
|
+
# The `:date` key, which is not guaranteed to be defined, is the [DateTime] at which this release was cut.
|
|
22
|
+
# If Sass is checked out from Git, the `:rev` key will have the revision hash.
|
|
23
|
+
# For example:
|
|
24
|
+
#
|
|
25
|
+
# {
|
|
26
|
+
# :string => "2.1.0.9616393",
|
|
27
|
+
# :rev => "9616393b8924ef36639c7e82aa88a51a24d16949",
|
|
28
|
+
# :number => "2.1.0",
|
|
29
|
+
# :date => DateTime.parse("Apr 30 13:52:01 2009 -0700"),
|
|
30
|
+
# :major => 2, :minor => 1, :teeny => 0
|
|
31
|
+
# }
|
|
32
|
+
#
|
|
33
|
+
# If a prerelease version of Sass is being used,
|
|
34
|
+
# the `:string` and `:number` fields will reflect the full version
|
|
35
|
+
# (e.g. `"2.2.beta.1"`), and the `:teeny` field will be `-1`.
|
|
36
|
+
# A `:prerelease` key will contain the name of the prerelease (e.g. `"beta"`),
|
|
37
|
+
# and a `:prerelease_number` key will contain the rerelease number.
|
|
38
|
+
# For example:
|
|
39
|
+
#
|
|
40
|
+
# {
|
|
41
|
+
# :string => "3.0.beta.1",
|
|
42
|
+
# :number => "3.0.beta.1",
|
|
43
|
+
# :date => DateTime.parse("Mar 31 00:38:04 2010 -0700"),
|
|
44
|
+
# :major => 3, :minor => 0, :teeny => -1,
|
|
45
|
+
# :prerelease => "beta",
|
|
46
|
+
# :prerelease_number => 1
|
|
47
|
+
# }
|
|
48
|
+
#
|
|
49
|
+
# @return [{Symbol => String/Fixnum}] The version hash
|
|
50
|
+
def version
|
|
51
|
+
return @@version if defined?(@@version)
|
|
52
|
+
|
|
53
|
+
numbers = File.read(scope('VERSION')).strip.split('.').
|
|
54
|
+
map {|n| n =~ /^[0-9]+$/ ? n.to_i : n}
|
|
55
|
+
name = File.read(scope('VERSION_NAME')).strip
|
|
56
|
+
@@version = {
|
|
57
|
+
:major => numbers[0],
|
|
58
|
+
:minor => numbers[1],
|
|
59
|
+
:teeny => numbers[2],
|
|
60
|
+
:name => name
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
if date = version_date
|
|
64
|
+
@@version[:date] = date
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
if numbers[3].is_a?(String)
|
|
68
|
+
@@version[:teeny] = -1
|
|
69
|
+
@@version[:prerelease] = numbers[3]
|
|
70
|
+
@@version[:prerelease_number] = numbers[4]
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
@@version[:number] = numbers.join('.')
|
|
74
|
+
@@version[:string] = @@version[:number].dup
|
|
75
|
+
|
|
76
|
+
if rev = revision_number
|
|
77
|
+
@@version[:rev] = rev
|
|
78
|
+
unless rev[0] == ?(
|
|
79
|
+
@@version[:string] << "." << rev[0...7]
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
@@version[:string] << " (#{name})"
|
|
84
|
+
@@version
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
private
|
|
88
|
+
|
|
89
|
+
def revision_number
|
|
90
|
+
if File.exists?(scope('REVISION'))
|
|
91
|
+
rev = File.read(scope('REVISION')).strip
|
|
92
|
+
return rev unless rev =~ /^([a-f0-9]+|\(.*\))$/ || rev == '(unknown)'
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
return unless File.exists?(scope('.git/HEAD'))
|
|
96
|
+
rev = File.read(scope('.git/HEAD')).strip
|
|
97
|
+
return rev unless rev =~ /^ref: (.*)$/
|
|
98
|
+
|
|
99
|
+
ref_name = $1
|
|
100
|
+
ref_file = scope(".git/#{ref_name}")
|
|
101
|
+
info_file = scope(".git/info/refs")
|
|
102
|
+
return File.read(ref_file).strip if File.exists?(ref_file)
|
|
103
|
+
return unless File.exists?(info_file)
|
|
104
|
+
File.open(info_file) do |f|
|
|
105
|
+
f.each do |l|
|
|
106
|
+
sha, ref = l.strip.split("\t", 2)
|
|
107
|
+
next unless ref == ref_name
|
|
108
|
+
return sha
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
return nil
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def version_date
|
|
115
|
+
return unless File.exists?(scope('VERSION_DATE'))
|
|
116
|
+
return DateTime.parse(File.read(scope('VERSION_DATE')).strip)
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
extend Sass::Version
|
|
121
|
+
|
|
122
|
+
# A string representing the version of Sass.
|
|
123
|
+
# A more fine-grained representation is available from Sass.version.
|
|
124
|
+
# @api public
|
|
125
|
+
VERSION = version[:string] unless defined?(Sass::VERSION)
|
|
126
|
+
end
|
data/lib/sass.rb
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
dir = File.dirname(__FILE__)
|
|
2
|
+
$LOAD_PATH.unshift dir unless $LOAD_PATH.include?(dir)
|
|
3
|
+
|
|
4
|
+
# This is necessary to set so that the Haml code that tries to load Sass
|
|
5
|
+
# knows that Sass is indeed loading,
|
|
6
|
+
# even if there's some crazy autoload stuff going on.
|
|
7
|
+
SASS_BEGUN_TO_LOAD = true unless defined?(SASS_BEGUN_TO_LOAD)
|
|
8
|
+
|
|
9
|
+
require 'sass/version'
|
|
10
|
+
|
|
11
|
+
# The module that contains everything Sass-related:
|
|
12
|
+
#
|
|
13
|
+
# * {Sass::Engine} is the class used to render Sass/SCSS within Ruby code.
|
|
14
|
+
# * {Sass::Plugin} is interfaces with web frameworks (Rails and Merb in particular).
|
|
15
|
+
# * {Sass::SyntaxError} is raised when Sass encounters an error.
|
|
16
|
+
# * {Sass::CSS} handles conversion of CSS to Sass.
|
|
17
|
+
#
|
|
18
|
+
# Also see the {file:SASS_REFERENCE.md full Sass reference}.
|
|
19
|
+
module Sass
|
|
20
|
+
# The global load paths for Sass files. This is meant for plugins and
|
|
21
|
+
# libraries to register the paths to their Sass stylesheets to that they may
|
|
22
|
+
# be `@imported`. This load path is used by every instance of [Sass::Engine].
|
|
23
|
+
# They are lower-precedence than any load paths passed in via the
|
|
24
|
+
# {file:SASS_REFERENCE.md#load_paths-option `:load_paths` option}.
|
|
25
|
+
#
|
|
26
|
+
# If the `SASS_PATH` environment variable is set,
|
|
27
|
+
# the initial value of `load_paths` will be initialized based on that.
|
|
28
|
+
# The variable should be a colon-separated list of path names
|
|
29
|
+
# (semicolon-separated on Windows).
|
|
30
|
+
#
|
|
31
|
+
# Note that files on the global load path are never compiled to CSS
|
|
32
|
+
# themselves, even if they aren't partials. They exist only to be imported.
|
|
33
|
+
#
|
|
34
|
+
# @example
|
|
35
|
+
# Sass.load_paths << File.dirname(__FILE__ + '/sass')
|
|
36
|
+
# @return [Array<String, Pathname, Sass::Importers::Base>]
|
|
37
|
+
def self.load_paths
|
|
38
|
+
@load_paths ||= ENV['SASS_PATH'] ?
|
|
39
|
+
ENV['SASS_PATH'].split(Sass::Util.windows? ? ';' : ':') : []
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Compile a Sass or SCSS string to CSS.
|
|
43
|
+
# Defaults to SCSS.
|
|
44
|
+
#
|
|
45
|
+
# @param contents [String] The contents of the Sass file.
|
|
46
|
+
# @param options [{Symbol => Object}] An options hash;
|
|
47
|
+
# see {file:SASS_REFERENCE.md#sass_options the Sass options documentation}
|
|
48
|
+
# @raise [Sass::SyntaxError] if there's an error in the document
|
|
49
|
+
# @raise [Encoding::UndefinedConversionError] if the source encoding
|
|
50
|
+
# cannot be converted to UTF-8
|
|
51
|
+
# @raise [ArgumentError] if the document uses an unknown encoding with `@charset`
|
|
52
|
+
def self.compile(contents, options = {})
|
|
53
|
+
options[:syntax] ||= :scss
|
|
54
|
+
Engine.new(contents, options).to_css
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Compile a file on disk to CSS.
|
|
58
|
+
#
|
|
59
|
+
# @param filename [String] The path to the Sass, SCSS, or CSS file on disk.
|
|
60
|
+
# @param options [{Symbol => Object}] An options hash;
|
|
61
|
+
# see {file:SASS_REFERENCE.md#sass_options the Sass options documentation}
|
|
62
|
+
# @raise [Sass::SyntaxError] if there's an error in the document
|
|
63
|
+
# @raise [Encoding::UndefinedConversionError] if the source encoding
|
|
64
|
+
# cannot be converted to UTF-8
|
|
65
|
+
# @raise [ArgumentError] if the document uses an unknown encoding with `@charset`
|
|
66
|
+
#
|
|
67
|
+
# @overload compile_file(filename, options = {})
|
|
68
|
+
# Return the compiled CSS rather than writing it to a file.
|
|
69
|
+
#
|
|
70
|
+
# @return [String] The compiled CSS.
|
|
71
|
+
#
|
|
72
|
+
# @overload compile_file(filename, css_filename, options = {})
|
|
73
|
+
# Write the compiled CSS to a file.
|
|
74
|
+
#
|
|
75
|
+
# @param css_filename [String] The location to which to write the compiled CSS.
|
|
76
|
+
def self.compile_file(filename, *args)
|
|
77
|
+
options = args.last.is_a?(Hash) ? args.pop : {}
|
|
78
|
+
css_filename = args.shift
|
|
79
|
+
result = Sass::Engine.for_file(filename, options).render
|
|
80
|
+
if css_filename
|
|
81
|
+
options[:css_filename] ||= css_filename
|
|
82
|
+
open(css_filename,"w") {|css_file| css_file.write(result)}
|
|
83
|
+
nil
|
|
84
|
+
else
|
|
85
|
+
result
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
require 'sass/logger'
|
|
91
|
+
require 'sass/util'
|
|
92
|
+
|
|
93
|
+
require 'sass/engine'
|
|
94
|
+
require 'sass/plugin' if defined?(Merb::Plugins)
|
|
95
|
+
require 'sass/railtie'
|
data/rails/init.rb
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Kernel.load File.join(File.dirname(__FILE__), '..', 'init.rb')
|
data/test/Gemfile
ADDED
data/test/Gemfile.lock
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
|
3
|
+
require File.dirname(__FILE__) + '/test_helper'
|
|
4
|
+
require 'sass/engine'
|
|
5
|
+
|
|
6
|
+
class CacheTest < Test::Unit::TestCase
|
|
7
|
+
@@cache_dir = "tmp/file_cache"
|
|
8
|
+
|
|
9
|
+
def setup
|
|
10
|
+
FileUtils.mkdir_p @@cache_dir
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def teardown
|
|
14
|
+
FileUtils.rm_rf @@cache_dir
|
|
15
|
+
clean_up_sassc
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def test_file_cache_writes_a_file
|
|
19
|
+
file_store = Sass::CacheStores::Filesystem.new(@@cache_dir)
|
|
20
|
+
file_store.store("asdf/foo.scssc", "fakesha1", root_node)
|
|
21
|
+
assert File.exists?("#{@@cache_dir}/asdf/foo.scssc")
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def test_file_cache_reads_a_file
|
|
25
|
+
file_store = Sass::CacheStores::Filesystem.new(@@cache_dir)
|
|
26
|
+
assert !File.exists?("#{@@cache_dir}/asdf/foo.scssc")
|
|
27
|
+
file_store.store("asdf/foo.scssc", "fakesha1", root_node)
|
|
28
|
+
assert File.exists?("#{@@cache_dir}/asdf/foo.scssc")
|
|
29
|
+
assert_kind_of Sass::Tree::RootNode, file_store.retrieve("asdf/foo.scssc", "fakesha1")
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def test_file_cache_miss_returns_nil
|
|
33
|
+
file_store = Sass::CacheStores::Filesystem.new(@@cache_dir)
|
|
34
|
+
assert !File.exists?("#{@@cache_dir}/asdf/foo.scssc")
|
|
35
|
+
assert_nil file_store.retrieve("asdf/foo.scssc", "fakesha1")
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def test_sha_change_invalidates_cache_and_cleans_up
|
|
39
|
+
file_store = Sass::CacheStores::Filesystem.new(@@cache_dir)
|
|
40
|
+
assert !File.exists?("#{@@cache_dir}/asdf/foo.scssc")
|
|
41
|
+
file_store.store("asdf/foo.scssc", "fakesha1", root_node)
|
|
42
|
+
assert File.exists?("#{@@cache_dir}/asdf/foo.scssc")
|
|
43
|
+
assert_nil file_store.retrieve("asdf/foo.scssc", "differentsha1")
|
|
44
|
+
assert !File.exists?("#{@@cache_dir}/asdf/foo.scssc")
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def test_version_change_invalidates_cache_and_cleans_up
|
|
48
|
+
file_store = Sass::CacheStores::Filesystem.new(@@cache_dir)
|
|
49
|
+
assert !File.exists?("#{@@cache_dir}/asdf/foo.scssc")
|
|
50
|
+
file_store.store("asdf/foo.scssc", "fakesha1", root_node)
|
|
51
|
+
assert File.exists?("#{@@cache_dir}/asdf/foo.scssc")
|
|
52
|
+
real_version = Sass::VERSION
|
|
53
|
+
begin
|
|
54
|
+
Sass::VERSION.replace("a different version")
|
|
55
|
+
assert_nil file_store.retrieve("asdf/foo.scssc", "fakesha1")
|
|
56
|
+
assert !File.exists?("#{@@cache_dir}/asdf/foo.scssc")
|
|
57
|
+
ensure
|
|
58
|
+
Sass::VERSION.replace(real_version)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def test_arbitrary_objects_can_go_into_cache
|
|
63
|
+
cache = Sass::CacheStores::Memory.new
|
|
64
|
+
an_object = {:foo => :bar}
|
|
65
|
+
cache.store("an_object", "", an_object)
|
|
66
|
+
assert_equal an_object, cache.retrieve("an_object", "")
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
class Unmarshalable
|
|
70
|
+
def _dump(_)
|
|
71
|
+
raise 'Unmarshalable'
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def test_cache_node_with_unmarshalable_option
|
|
76
|
+
engine = Sass::Engine.new("foo {a: b + c}",
|
|
77
|
+
:syntax => :scss, :object => Unmarshalable.new, :filename => 'file.scss',
|
|
78
|
+
:importer => Sass::Importers::Filesystem.new(absolutize('templates')))
|
|
79
|
+
engine.to_tree
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
private
|
|
83
|
+
def root_node
|
|
84
|
+
Sass::Engine.new(<<-SCSS, :syntax => :scss).to_tree
|
|
85
|
+
@mixin color($c) { color: $c}
|
|
86
|
+
div { @include color(red); }
|
|
87
|
+
SCSS
|
|
88
|
+
end
|
|
89
|
+
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
|
3
|
+
require 'sass/callbacks'
|
|
4
|
+
|
|
5
|
+
class CallerBack
|
|
6
|
+
extend Sass::Callbacks
|
|
7
|
+
define_callback :foo
|
|
8
|
+
define_callback :bar
|
|
9
|
+
|
|
10
|
+
def do_foo
|
|
11
|
+
run_foo
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def do_bar
|
|
15
|
+
run_bar 12
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
module ClassLevelCallerBack
|
|
20
|
+
extend Sass::Callbacks
|
|
21
|
+
define_callback :foo
|
|
22
|
+
extend self
|
|
23
|
+
|
|
24
|
+
def do_foo
|
|
25
|
+
run_foo
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
class SassCallbacksTest < Test::Unit::TestCase
|
|
30
|
+
def test_simple_callback
|
|
31
|
+
cb = CallerBack.new
|
|
32
|
+
there = false
|
|
33
|
+
cb.on_foo {there = true}
|
|
34
|
+
cb.do_foo
|
|
35
|
+
assert there, "Expected callback to be called."
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def test_multiple_callbacks
|
|
39
|
+
cb = CallerBack.new
|
|
40
|
+
str = ""
|
|
41
|
+
cb.on_foo {str += "first"}
|
|
42
|
+
cb.on_foo {str += " second"}
|
|
43
|
+
cb.do_foo
|
|
44
|
+
assert_equal "first second", str
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def test_callback_with_arg
|
|
48
|
+
cb = CallerBack.new
|
|
49
|
+
val = nil
|
|
50
|
+
cb.on_bar {|a| val = a}
|
|
51
|
+
cb.do_bar
|
|
52
|
+
assert_equal 12, val
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def test_class_level_callback
|
|
56
|
+
there = false
|
|
57
|
+
ClassLevelCallerBack.on_foo {there = true}
|
|
58
|
+
ClassLevelCallerBack.do_foo
|
|
59
|
+
assert there, "Expected callback to be called."
|
|
60
|
+
end
|
|
61
|
+
end
|