sass 3.4.25 → 3.5.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.
Files changed (135) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/Rakefile +2 -117
  4. data/VERSION +1 -1
  5. data/VERSION_DATE +1 -1
  6. data/VERSION_NAME +1 -1
  7. data/lib/sass/cache_stores/filesystem.rb +1 -1
  8. data/lib/sass/css.rb +1 -2
  9. data/lib/sass/engine.rb +38 -20
  10. data/lib/sass/environment.rb +26 -5
  11. data/lib/sass/error.rb +2 -2
  12. data/lib/sass/exec/base.rb +2 -11
  13. data/lib/sass/features.rb +1 -0
  14. data/lib/sass/importers/filesystem.rb +2 -2
  15. data/lib/sass/plugin/compiler.rb +20 -50
  16. data/lib/sass/plugin/configuration.rb +2 -2
  17. data/lib/sass/railtie.rb +1 -1
  18. data/lib/sass/script/functions.rb +235 -43
  19. data/lib/sass/script/lexer.rb +13 -2
  20. data/lib/sass/script/parser.rb +69 -67
  21. data/lib/sass/script/tree/funcall.rb +35 -30
  22. data/lib/sass/script/tree/list_literal.rb +23 -8
  23. data/lib/sass/script/tree/map_literal.rb +2 -2
  24. data/lib/sass/script/tree/node.rb +0 -8
  25. data/lib/sass/script/tree/operation.rb +0 -7
  26. data/lib/sass/script/value/arg_list.rb +1 -1
  27. data/lib/sass/script/value/base.rb +17 -0
  28. data/lib/sass/script/value/callable.rb +25 -0
  29. data/lib/sass/script/value/color.rb +5 -0
  30. data/lib/sass/script/value/function.rb +19 -0
  31. data/lib/sass/script/value/helpers.rb +29 -9
  32. data/lib/sass/script/value/list.rb +35 -14
  33. data/lib/sass/script/value/map.rb +2 -2
  34. data/lib/sass/script/value/number.rb +1 -1
  35. data/lib/sass/script/value.rb +2 -0
  36. data/lib/sass/scss/parser.rb +99 -40
  37. data/lib/sass/scss/rx.rb +4 -10
  38. data/lib/sass/scss/static_parser.rb +5 -24
  39. data/lib/sass/selector/abstract_sequence.rb +7 -6
  40. data/lib/sass/selector/comma_sequence.rb +7 -4
  41. data/lib/sass/selector/pseudo.rb +19 -2
  42. data/lib/sass/selector/sequence.rb +35 -6
  43. data/lib/sass/selector/simple.rb +9 -2
  44. data/lib/sass/selector/simple_sequence.rb +8 -4
  45. data/lib/sass/selector.rb +4 -0
  46. data/lib/sass/source/map.rb +2 -2
  47. data/lib/sass/stack.rb +21 -1
  48. data/lib/sass/tree/charset_node.rb +1 -1
  49. data/lib/sass/tree/prop_node.rb +45 -53
  50. data/lib/sass/tree/rule_node.rb +3 -2
  51. data/lib/sass/tree/visitors/check_nesting.rb +1 -1
  52. data/lib/sass/tree/visitors/convert.rb +2 -3
  53. data/lib/sass/tree/visitors/cssize.rb +4 -15
  54. data/lib/sass/tree/visitors/deep_copy.rb +1 -1
  55. data/lib/sass/tree/visitors/extend.rb +2 -8
  56. data/lib/sass/tree/visitors/perform.rb +21 -9
  57. data/lib/sass/tree/visitors/set_options.rb +1 -1
  58. data/lib/sass/tree/visitors/to_css.rb +47 -13
  59. data/lib/sass/util/multibyte_string_scanner.rb +127 -131
  60. data/lib/sass/util/normalized_map.rb +1 -8
  61. data/lib/sass/util.rb +12 -290
  62. data/lib/sass/version.rb +0 -2
  63. data/lib/sass.rb +0 -7
  64. data/test/sass/cache_test.rb +0 -1
  65. data/test/sass/callbacks_test.rb +0 -1
  66. data/test/sass/compiler_test.rb +4 -15
  67. data/test/sass/conversion_test.rb +113 -163
  68. data/test/sass/css2sass_test.rb +16 -19
  69. data/test/sass/css_variable_test.rb +176 -71
  70. data/test/sass/encoding_test.rb +2 -33
  71. data/test/sass/engine_test.rb +71 -19
  72. data/test/sass/exec_test.rb +0 -1
  73. data/test/sass/extend_test.rb +37 -92
  74. data/test/sass/functions_test.rb +58 -14
  75. data/test/sass/importer_test.rb +2 -3
  76. data/test/sass/logger_test.rb +0 -1
  77. data/test/sass/plugin_test.rb +6 -10
  78. data/test/sass/results/script.css +1 -1
  79. data/test/sass/results/units.css +2 -2
  80. data/test/sass/script_conversion_test.rb +10 -2
  81. data/test/sass/script_test.rb +22 -24
  82. data/test/sass/scss/css_test.rb +3 -18
  83. data/test/sass/scss/rx_test.rb +0 -1
  84. data/test/sass/scss/scss_test.rb +49 -16
  85. data/test/sass/source_map_test.rb +13 -16
  86. data/test/sass/superselector_test.rb +0 -1
  87. data/test/sass/util/multibyte_string_scanner_test.rb +121 -124
  88. data/test/sass/util/normalized_map_test.rb +0 -1
  89. data/test/sass/util/subset_map_test.rb +0 -1
  90. data/test/sass/util_test.rb +4 -39
  91. data/test/sass/value_helpers_test.rb +0 -1
  92. data/test/sass-spec.yml +1 -1
  93. data/test/test_helper.rb +39 -0
  94. metadata +19 -44
  95. data/lib/sass/script/css_variable_warning.rb +0 -52
  96. data/lib/sass/util/cross_platform_random.rb +0 -19
  97. data/lib/sass/util/ordered_hash.rb +0 -192
  98. data/test/sass/results/import_charset_1_8.css +0 -5
  99. data/test/sass/templates/import_charset_1_8.sass +0 -6
  100. data/vendor/listen/CHANGELOG.md +0 -1
  101. data/vendor/listen/CONTRIBUTING.md +0 -38
  102. data/vendor/listen/Gemfile +0 -20
  103. data/vendor/listen/Guardfile +0 -8
  104. data/vendor/listen/LICENSE +0 -20
  105. data/vendor/listen/README.md +0 -349
  106. data/vendor/listen/Rakefile +0 -5
  107. data/vendor/listen/Vagrantfile +0 -96
  108. data/vendor/listen/lib/listen/adapter.rb +0 -327
  109. data/vendor/listen/lib/listen/adapters/bsd.rb +0 -75
  110. data/vendor/listen/lib/listen/adapters/darwin.rb +0 -48
  111. data/vendor/listen/lib/listen/adapters/linux.rb +0 -81
  112. data/vendor/listen/lib/listen/adapters/polling.rb +0 -58
  113. data/vendor/listen/lib/listen/adapters/windows.rb +0 -91
  114. data/vendor/listen/lib/listen/directory_record.rb +0 -406
  115. data/vendor/listen/lib/listen/listener.rb +0 -323
  116. data/vendor/listen/lib/listen/turnstile.rb +0 -32
  117. data/vendor/listen/lib/listen/version.rb +0 -3
  118. data/vendor/listen/lib/listen.rb +0 -54
  119. data/vendor/listen/listen.gemspec +0 -28
  120. data/vendor/listen/spec/listen/adapter_spec.rb +0 -149
  121. data/vendor/listen/spec/listen/adapters/bsd_spec.rb +0 -36
  122. data/vendor/listen/spec/listen/adapters/darwin_spec.rb +0 -37
  123. data/vendor/listen/spec/listen/adapters/linux_spec.rb +0 -47
  124. data/vendor/listen/spec/listen/adapters/polling_spec.rb +0 -68
  125. data/vendor/listen/spec/listen/adapters/windows_spec.rb +0 -30
  126. data/vendor/listen/spec/listen/directory_record_spec.rb +0 -1250
  127. data/vendor/listen/spec/listen/listener_spec.rb +0 -258
  128. data/vendor/listen/spec/listen/turnstile_spec.rb +0 -56
  129. data/vendor/listen/spec/listen_spec.rb +0 -67
  130. data/vendor/listen/spec/spec_helper.rb +0 -25
  131. data/vendor/listen/spec/support/adapter_helper.rb +0 -666
  132. data/vendor/listen/spec/support/directory_record_helper.rb +0 -57
  133. data/vendor/listen/spec/support/fixtures_helper.rb +0 -29
  134. data/vendor/listen/spec/support/listeners_helper.rb +0 -179
  135. data/vendor/listen/spec/support/platform_helper.rb +0 -15
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a8b2d6c079c8e8aec59e0dd45294419919f88239
4
- data.tar.gz: 5e31ebbe100aa0b066d414ee32e3f29d792907f6
3
+ metadata.gz: 62b8871bca68353a37c0dc60b2cfeb65ee14eb8d
4
+ data.tar.gz: 901579162ee8f9f1490124807d81b8a79e9955b3
5
5
  SHA512:
6
- metadata.gz: 1782f895c1aaeef19491dfb41434ca10a60d28395f53a3ec19f8a65ec21c97625db3325732007fbc3155821c53adf9bcd00ced70e9fe3c1c935295b34f3dfdaf
7
- data.tar.gz: 39578a844dd4d6e381cb10ced82d5c6782ddd042c79cc5c4c9cc6a69163badbf1ce368526987447b955d44a3d20470ea5e4eae481ea9359d63eea09cab94ca70
6
+ metadata.gz: f0c07e35a2c6f913e2a5041439b7886ba02d071af3da200e0eca1cc8a8a2c2b38edf4f9ffb2cd7b45757b2d611fdbec4189820cd3368f25adc782da4c7479b24
7
+ data.tar.gz: 5f2967d0a40103afdf2209af7c8fac2eccf065fccb536f864ad89369547f87db5c1b204ffd37da03e8a9bc7bad994abb77a3d1d42890a25c1ba111a39a18bf4c
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Sass [![Gem Version](https://badge.fury.io/rb/sass.svg)](http://badge.fury.io/rb/sass) [![Inline docs](http://inch-ci.org/github/sass/sass.svg)](http://inch-ci.org/github/sass/sass)
1
+ # Sass [![Travis Build Status](https://travis-ci.org/sass/sass.svg?branch=next)](https://travis-ci.org/sass/sass) [![Gem Version](https://badge.fury.io/rb/sass.svg)](http://badge.fury.io/rb/sass) [![Inline docs](http://inch-ci.org/github/sass/sass.svg)](http://inch-ci.org/github/sass/sass)
2
2
 
3
3
  **Sass makes CSS fun again**. Sass is an extension of CSS,
4
4
  adding nested rules, variables, mixins, selector inheritance, and more.
data/Rakefile CHANGED
@@ -129,7 +129,7 @@ end
129
129
  # Don't use Rake::GemPackageTast because we want prerequisites to run
130
130
  # before we load the gemspec.
131
131
  desc "Build all the packages."
132
- task :package => [:revision_file, :date_file, :submodules, :permissions] do
132
+ task :package => [:revision_file, :date_file, :permissions] do
133
133
  version = get_version
134
134
  File.open(scope('VERSION'), 'w') {|f| f.puts(version)}
135
135
  load scope('sass.gemspec')
@@ -222,49 +222,10 @@ def changed_since?(rev, *files)
222
222
  return !$?.success?
223
223
  end
224
224
 
225
- task :submodules do
226
- if File.exist?(File.dirname(__FILE__) + "/.git")
227
- sh %{git submodule sync}
228
- sh %{git submodule update --init}
229
- elsif !File.exist?(File.dirname(__FILE__) + "/vendor/listen/lib")
230
- warn <<WARN
231
- WARNING: vendor/listen doesn't exist, and this isn't a git repository so
232
- I can't get it automatically!
233
- WARN
234
- end
235
- end
236
-
237
- task :release_edge do
238
- ensure_git_cleanup do
239
- puts "#{'=' * 50} Running rake release_edge"
240
-
241
- sh %{git checkout master}
242
- sh %{git reset --hard origin/master}
243
- sh %{rake package}
244
- version = get_version
245
- if version.include?('.rc.')
246
- puts "#{'=' * 20} Not releasing edge gem for RC version"
247
- next
248
- end
249
-
250
- sh %{gem push pkg/sass-#{version}.gem}
251
- end
252
- end
253
-
254
225
  # Get the version string. If this is being installed from Git,
255
226
  # this includes the proper prerelease version.
256
227
  def get_version
257
- written_version = File.read(scope('VERSION').strip)
258
- return written_version unless File.exist?(scope('.git'))
259
-
260
- # Get the current master branch version
261
- version = written_version.split('.')
262
- version.map! {|n| n =~ /^[0-9]+$/ ? n.to_i : n}
263
- return written_version unless version.size == 5 && version[3] == "alpha" # prerelease
264
-
265
- return written_version if (commit_count = `git log --pretty=oneline HEAD ^stable | wc -l`).empty?
266
- version[4] = commit_count.strip
267
- version.join('.')
228
+ File.read(scope('VERSION').strip)
268
229
  end
269
230
 
270
231
  task :watch_for_update do
@@ -336,27 +297,6 @@ rescue LoadError
336
297
  task :yard => :rdoc
337
298
  end
338
299
 
339
- task :pages do
340
- ensure_git_cleanup do
341
- puts "#{'=' * 50} Running rake pages"
342
- sh %{git checkout sass-pages}
343
- sh %{git reset --hard origin/sass-pages}
344
-
345
- Dir.chdir("/var/www/sass-pages") do
346
- sh %{git fetch origin}
347
-
348
- sh %{git checkout stable}
349
- sh %{git reset --hard origin/stable}
350
-
351
- sh %{git checkout sass-pages}
352
- sh %{git reset --hard origin/sass-pages}
353
- sh %{rake build --trace}
354
- sh %{mkdir -p tmp}
355
- sh %{touch tmp/restart.txt}
356
- end
357
- end
358
- end
359
-
360
300
  # ----- Coverage -----
361
301
 
362
302
  begin
@@ -396,58 +336,3 @@ END
396
336
  RubyProf.const_get("#{(ENV['OUTPUT'] || 'Flat').capitalize}Printer").new(result).print
397
337
  end
398
338
  rescue LoadError; end
399
-
400
- # ----- Handling Updates -----
401
-
402
- def email_on_error
403
- yield
404
- rescue Exception => e
405
- IO.popen("sendmail nex342@gmail.com", "w") do |sm|
406
- sm << "From: nex3@nex-3.com\n" <<
407
- "To: nex342@gmail.com\n" <<
408
- "Subject: Exception when running rake #{Rake.application.top_level_tasks.join(', ')}\n" <<
409
- e.message << "\n\n" <<
410
- e.backtrace.join("\n")
411
- end
412
- ensure
413
- raise e if e
414
- end
415
-
416
- def ensure_git_cleanup
417
- email_on_error {yield}
418
- ensure
419
- sh %{git reset --hard HEAD}
420
- sh %{git clean -xdf}
421
- sh %{git checkout master}
422
- end
423
-
424
- task :handle_update do
425
- email_on_error do
426
- unless ENV["REF"] =~ %r{^refs/heads/(master|stable|sass-pages)$}
427
- puts "#{'=' * 20} Ignoring rake handle_update REF=#{ENV["REF"].inspect}"
428
- next
429
- end
430
- branch = $1
431
-
432
- puts
433
- puts
434
- puts '=' * 150
435
- puts "Running rake handle_update REF=#{ENV["REF"].inspect}"
436
-
437
- sh %{git fetch origin}
438
- sh %{git checkout stable}
439
- sh %{git reset --hard origin/stable}
440
- sh %{git checkout master}
441
- sh %{git reset --hard origin/master}
442
-
443
- case branch
444
- when "master"
445
- sh %{rake release_edge --trace}
446
- when "stable", "sass-pages"
447
- sh %{rake pages --trace}
448
- end
449
-
450
- puts 'Done running handle_update'
451
- puts '=' * 150
452
- end
453
- end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.4.25
1
+ 3.5.0
data/VERSION_DATE CHANGED
@@ -1 +1 @@
1
- 07 July 2017 22:00:34 UTC
1
+ 12 July 2017 23:31:42 UTC
data/VERSION_NAME CHANGED
@@ -1 +1 @@
1
- Selective Steve
1
+ Bleeding Edge
@@ -52,7 +52,7 @@ module Sass
52
52
  # @param key [String]
53
53
  # @return [String] The path to the cache file.
54
54
  def path_to(key)
55
- key = key.gsub(/[<>:\\|?*%]/) {|c| "%%%03d" % (Sass::Util.ord(c))}
55
+ key = key.gsub(/[<>:\\|?*%]/) {|c| "%%%03d" % c.ord}
56
56
  File.join(cache_location, key)
57
57
  end
58
58
  end
data/lib/sass/css.rb CHANGED
@@ -51,8 +51,7 @@ module Sass
51
51
  raise err
52
52
  end
53
53
 
54
- # Returns the original encoding of the document,
55
- # or `nil` under Ruby 1.8.
54
+ # Returns the original encoding of the document.
56
55
  #
57
56
  # @return [Encoding, nil]
58
57
  # @raise [Encoding::UndefinedConversionError] if the source encoding
data/lib/sass/engine.rb CHANGED
@@ -80,7 +80,13 @@ module Sass
80
80
  #
81
81
  # `type`: `String`
82
82
  # : The user-friendly name of the type of the callable.
83
- Callable = Struct.new(:name, :args, :splat, :environment, :tree, :has_content, :type)
83
+ #
84
+ # `origin`: `Symbol`
85
+ # : From whence comes the callable: `:stylesheet`, `:builtin`, `:css`
86
+ # A callable with an origin of `:stylesheet` was defined in the stylesheet itself.
87
+ # A callable with an origin of `:builtin` was defined in ruby.
88
+ # A callable (function) with an origin of `:css` returns a function call with arguments to CSS.
89
+ Callable = Struct.new(:name, :args, :splat, :environment, :tree, :has_content, :type, :origin)
84
90
 
85
91
  # This class handles the parsing and compilation of the Sass template.
86
92
  # Example usage:
@@ -316,8 +322,7 @@ module Sass
316
322
  end
317
323
  end
318
324
 
319
- # Returns the original encoding of the document,
320
- # or `nil` under Ruby 1.8.
325
+ # Returns the original encoding of the document.
321
326
  #
322
327
  # @return [Encoding, nil]
323
328
  # @raise [Encoding::UndefinedConversionError] if the source encoding
@@ -386,7 +391,7 @@ ERR
386
391
  rendered << "\n" if rendered[-1] != ?\n
387
392
  rendered << "\n" unless compressed
388
393
  rendered << "/*# sourceMappingURL="
389
- rendered << Sass::Util.escape_uri(sourcemap_uri)
394
+ rendered << URI::DEFAULT_PARSER.escape(sourcemap_uri)
390
395
  rendered << " */\n"
391
396
  return rendered, sourcemap
392
397
  end
@@ -520,10 +525,6 @@ MSG
520
525
  nodes = []
521
526
  while (line = arr[i]) && line.tabs >= base
522
527
  if line.tabs > base
523
- raise SyntaxError.new(
524
- "The line was indented #{line.tabs - base} levels deeper than the previous line.",
525
- :line => line.index) if line.tabs > base + 1
526
-
527
528
  nodes.last.children, i = tree(arr, i)
528
529
  else
529
530
  nodes << line
@@ -695,7 +696,14 @@ WARNING
695
696
  end
696
697
 
697
698
  name = line.text[0...scanner.pos]
698
- if (scanned = scanner.scan(/\s*:(?:\s+|$)/)) # test for a property
699
+ could_be_property =
700
+ if name.start_with?('--')
701
+ (scanned = scanner.scan(/\s*:/))
702
+ else
703
+ (scanned = scanner.scan(/\s*:(?:\s+|$)/))
704
+ end
705
+
706
+ if could_be_property # test for a property
699
707
  offset += scanned.length
700
708
  property = parse_property(name, res, scanner.rest, :new, line, offset)
701
709
  property.name_source_range = ident_range
@@ -722,22 +730,32 @@ WARNING
722
730
  # rubocop:disable ParameterLists
723
731
  def parse_property(name, parsed_name, value, prop, line, start_offset)
724
732
  # rubocop:enable ParameterLists
725
- if value.strip.empty?
726
- expr = Sass::Script::Tree::Literal.new(Sass::Script::Value::String.new(""))
733
+
734
+ if name.start_with?('--')
735
+ unless line.children.empty?
736
+ raise SyntaxError.new("Illegal nesting: Nothing may be nested beneath custom properties.",
737
+ :line => @line + 1)
738
+ end
739
+
740
+ parser = Sass::SCSS::Parser.new(value,
741
+ @options[:filename], @options[:importer],
742
+ @line, to_parser_offset(@offset))
743
+ parsed_value = parser.parse_declaration_value
744
+ end_offset = start_offset + value.length
745
+ elsif value.strip.empty?
746
+ parsed_value = [Sass::Script::Tree::Literal.new(Sass::Script::Value::String.new(""))]
727
747
  end_offset = start_offset
728
748
  else
729
- expr = parse_script(value,
730
- :offset => to_parser_offset(start_offset),
731
- :css_variable => name.start_with?("--"))
749
+ expr = parse_script(value, :offset => to_parser_offset(start_offset))
732
750
  end_offset = expr.source_range.end_pos.offset - 1
751
+ parsed_value = [expr]
733
752
  end
734
-
735
- node = Tree::PropNode.new(parse_interp(name), expr, prop)
753
+ node = Tree::PropNode.new(parse_interp(name), parsed_value, prop)
736
754
  node.value_source_range = Sass::Source::Range.new(
737
755
  Sass::Source::Position.new(line.index, to_parser_offset(start_offset)),
738
756
  Sass::Source::Position.new(line.index, to_parser_offset(end_offset)),
739
757
  @options[:filename], @options[:importer])
740
- if value.strip.empty? && line.children.empty?
758
+ if !node.custom_property? && value.strip.empty? && line.children.empty?
741
759
  raise SyntaxError.new(
742
760
  "Invalid property: \"#{node.declaration}\" (no value)." +
743
761
  node.pseudo_class_selector_message)
@@ -1154,9 +1172,9 @@ WARNING
1154
1172
  end
1155
1173
 
1156
1174
  def parse_script(script, options = {})
1157
- line = options.delete(:line) || @line
1158
- offset = options.delete(:offset) || @offset + 1
1159
- Script.parse(script, line, offset, @options.merge(options))
1175
+ line = options[:line] || @line
1176
+ offset = options[:offset] || @offset + 1
1177
+ Script.parse(script, line, offset, @options)
1160
1178
  end
1161
1179
 
1162
1180
  def format_comment_text(text, silent)
@@ -175,6 +175,10 @@ module Sass
175
175
 
176
176
  # A read-only wrapper for a lexical environment for SassScript.
177
177
  class ReadOnlyEnvironment < BaseEnvironment
178
+ def initialize(parent = nil, options = nil)
179
+ super
180
+ @content_cached = nil
181
+ end
178
182
  # The read-only environment of the caller of this environment's mixin or function.
179
183
  #
180
184
  # @see BaseEnvironment#caller
@@ -185,14 +189,31 @@ module Sass
185
189
  @caller ||= env.is_a?(ReadOnlyEnvironment) ? env : ReadOnlyEnvironment.new(env, env.options)
186
190
  end
187
191
 
188
- # The read-only content passed to this environment.
192
+ # The content passed to this environment. If the content's environment isn't already
193
+ # read-only, it's made read-only.
189
194
  #
190
195
  # @see BaseEnvironment#content
191
- # @return {ReadOnlyEnvironment}
196
+ #
197
+ # @return {[Array<Sass::Tree::Node>, ReadOnlyEnvironment]?} The content nodes and
198
+ # the lexical environment of the content block.
199
+ # Returns `nil` when there is no content in this environment.
192
200
  def content
193
- return @content if @content
194
- env = super
195
- @content ||= env.is_a?(ReadOnlyEnvironment) ? env : ReadOnlyEnvironment.new(env, env.options)
201
+ # Return the cached content from a previous invocation if any
202
+ return @content if @content_cached
203
+ # get the content with a read-write environment from the superclass
204
+ read_write_content = super
205
+ if read_write_content
206
+ tree, env = read_write_content
207
+ # make the content's environment read-only
208
+ if env && !env.is_a?(ReadOnlyEnvironment)
209
+ env = ReadOnlyEnvironment.new(env, env.options)
210
+ end
211
+ @content_cached = true
212
+ @content = [tree, env]
213
+ else
214
+ @content_cached = true
215
+ @content = nil
216
+ end
196
217
  end
197
218
  end
198
219
 
data/lib/sass/error.rb CHANGED
@@ -142,7 +142,7 @@ module Sass
142
142
  msg = lines[0] + lines[1..-1].
143
143
  map {|l| "\n" + (" " * "Error: ".size) + l}.join
144
144
  "Error: #{msg}" +
145
- Sass::Util.enum_with_index(sass_backtrace).map do |entry, i|
145
+ sass_backtrace.each_with_index.map do |entry, i|
146
146
  "\n #{i == 0 ? 'on' : 'from'} line #{entry[:line]}" +
147
147
  " of #{entry[:filename] || default_filename}" +
148
148
  (entry[:mixin] ? ", in `#{entry[:mixin]}'" : "")
@@ -186,7 +186,7 @@ END
186
186
  section = e.sass_template.rstrip.split("\n")[min...line_num + 5]
187
187
  return e.sass_backtrace_str if section.nil? || section.empty?
188
188
 
189
- e.sass_backtrace_str + "\n\n" + Sass::Util.enum_with_index(section).
189
+ e.sass_backtrace_str + "\n\n" + section.each_with_index.
190
190
  map {|line, i| "#{line_offset + min + i}: #{line}"}.join("\n")
191
191
  end
192
192
  end
@@ -90,18 +90,9 @@ module Sass::Exec
90
90
  #
91
91
  # @param opts [OptionParser]
92
92
  def encoding_option(opts)
93
- encoding_desc = if Sass::Util.ruby1_8?
94
- 'Does not work in Ruby 1.8.'
95
- else
96
- 'Specify the default encoding for input files.'
97
- end
93
+ encoding_desc = 'Specify the default encoding for input files.'
98
94
  opts.on('-E', '--default-encoding ENCODING', encoding_desc) do |encoding|
99
- if Sass::Util.ruby1_8?
100
- $stderr.puts "Specifying the encoding is not supported in ruby 1.8."
101
- exit 1
102
- else
103
- Encoding.default_external = encoding
104
- end
95
+ Encoding.default_external = encoding
105
96
  end
106
97
  end
107
98
 
data/lib/sass/features.rb CHANGED
@@ -12,6 +12,7 @@ module Sass
12
12
  extend-selector-pseudoclass
13
13
  units-level-3
14
14
  at-error
15
+ custom-property
15
16
  )]
16
17
 
17
18
  # Check if a feature exists by name. This is used to implement
@@ -67,7 +67,7 @@ module Sass
67
67
  end
68
68
 
69
69
  def public_url(name, sourcemap_directory)
70
- file_pathname = Sass::Util.cleanpath(Sass::Util.absolute_path(name, @root))
70
+ file_pathname = Sass::Util.cleanpath(File.absolute_path(name, @root))
71
71
  return Sass::Util.file_uri_from_path(file_pathname) if sourcemap_directory.nil?
72
72
 
73
73
  sourcemap_pathname = Sass::Util.cleanpath(sourcemap_directory)
@@ -133,7 +133,7 @@ module Sass
133
133
 
134
134
  REDUNDANT_DIRECTORY = /#{Regexp.escape(File::SEPARATOR)}\.#{Regexp.escape(File::SEPARATOR)}/
135
135
  # Given a base directory and an `@import`ed name,
136
- # finds an existant file that matches the name.
136
+ # finds an existent file that matches the name.
137
137
  #
138
138
  # @param dir [String] The directory relative to which to search.
139
139
  # @param name [String] The filename to search for.
@@ -303,42 +303,30 @@ module Sass::Plugin
303
303
  directories += @inferred_directories
304
304
  directories = remove_redundant_directories(directories)
305
305
 
306
- # A Listen version prior to 2.0 will write a test file to a directory to
307
- # see if a watcher supports watching that directory. That breaks horribly
308
- # on read-only directories, so we filter those out.
309
- unless Sass::Util.listen_geq_2?
310
- directories = directories.select {|d| File.directory?(d) && File.writable?(d)}
311
- end
312
-
313
306
  # TODO: Keep better track of what depends on what
314
307
  # so we don't have to run a global update every time anything changes.
315
308
  # XXX The :additional_watch_paths option exists for Compass to use until
316
309
  # a deprecated feature is removed. It may be removed without warning.
317
- listener_args = directories +
318
- Array(options[:additional_watch_paths]) +
319
- [{:relative_paths => false}]
320
-
321
- # The native windows listener is much slower than the polling option, according to
322
- # https://github.com/nex3/sass/commit/a3031856b22bc834a5417dedecb038b7be9b9e3e
323
- poll = @options[:poll] || Sass::Util.windows?
324
- if poll && Sass::Util.listen_geq_2?
325
- # In Listen 2.0.0 and on, :force_polling is an option. In earlier
326
- # versions, it's a method on the listener (called below).
327
- listener_args.last[:force_polling] = true
328
- end
310
+ directories += Array(options[:additional_watch_paths])
311
+
312
+ options = {
313
+ :relative_paths => false,
314
+ # The native windows listener is much slower than the polling option, according to
315
+ # https://github.com/nex3/sass/commit/a3031856b22bc834a5417dedecb038b7be9b9e3e
316
+ :force_polling => @options[:poll] || Sass::Util.windows?
317
+ }
329
318
 
330
- listener = create_listener(*listener_args) do |modified, added, removed|
319
+ listener = create_listener(*directories, options) do |modified, added, removed|
331
320
  on_file_changed(individual_files, modified, added, removed)
332
321
  yield(modified, added, removed) if block_given?
333
322
  end
334
323
 
335
- if poll && !Sass::Util.listen_geq_2?
336
- # In Listen 2.0.0 and on, :force_polling is an option (set above). In
337
- # earlier versions, it's a method on the listener.
338
- listener.force_polling(true)
324
+ begin
325
+ listener.start
326
+ sleep
327
+ rescue Interrupt
328
+ # Squelch Interrupt for clean exit from Listen::Listener
339
329
  end
340
-
341
- listen_to(listener)
342
330
  end
343
331
 
344
332
  # Non-destructively modifies \{#options} so that default values are properly set,
@@ -387,28 +375,10 @@ module Sass::Plugin
387
375
 
388
376
  private
389
377
 
378
+ # This is mocked out in compiler_test.rb.
390
379
  def create_listener(*args, &block)
391
- Sass::Util.load_listen!
392
- if Sass::Util.listen_geq_2?
393
- # Work around guard/listen#243.
394
- options = args.pop if args.last.is_a?(Hash)
395
- args.map do |dir|
396
- Listen.to(dir, options, &block)
397
- end
398
- else
399
- Listen::Listener.new(*args, &block)
400
- end
401
- end
402
-
403
- def listen_to(listener)
404
- if Sass::Util.listen_geq_2?
405
- listener.map {|l| l.start}
406
- sleep
407
- else
408
- listener.start!
409
- end
410
- rescue Interrupt
411
- # Squelch Interrupt for clean exit from Listen::Listener
380
+ require 'listen'
381
+ Listen.to(*args, &block)
412
382
  end
413
383
 
414
384
  def remove_redundant_directories(directories)
@@ -494,7 +464,7 @@ module Sass::Plugin
494
464
  rendered = engine.render
495
465
  end
496
466
  rescue StandardError => e
497
- compilation_error_occured = true
467
+ compilation_error_occurred = true
498
468
  run_compilation_error e, filename, css, sourcemap
499
469
  raise e unless options[:full_exception]
500
470
  rendered = Sass::SyntaxError.exception_to_css(e, options[:line] || 1)
@@ -507,14 +477,14 @@ module Sass::Plugin
507
477
  mapping.to_json(
508
478
  :css_path => css, :sourcemap_path => sourcemap, :type => options[:sourcemap]))
509
479
  end
510
- run_updated_stylesheet(filename, css, sourcemap) unless compilation_error_occured
480
+ run_updated_stylesheet(filename, css, sourcemap) unless compilation_error_occurred
511
481
  end
512
482
 
513
483
  def write_file(fileName, content)
514
484
  flag = 'w'
515
485
  flag = 'wb' if Sass::Util.windows? && options[:unix_newlines]
516
486
  File.open(fileName, flag) do |file|
517
- file.set_encoding(content.encoding) unless Sass::Util.ruby1_8?
487
+ file.set_encoding(content.encoding)
518
488
  file.print(content)
519
489
  end
520
490
  end
@@ -26,8 +26,8 @@ module Sass
26
26
  clear_callbacks!
27
27
  end
28
28
 
29
- # An options hash.
30
- # See {file:SASS_REFERENCE.md#Options the Sass options documentation}.
29
+ # An options hash. See {file:SASS_REFERENCE.md#Options the Sass options
30
+ # documentation}.
31
31
  #
32
32
  # @return [{Symbol => Object}]
33
33
  def options
data/lib/sass/railtie.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # Rails 3.0.0.beta.2+, < 3.1
2
- if defined?(ActiveSupport) && Sass::Util.has?(:public_method, ActiveSupport, :on_load) &&
2
+ if defined?(ActiveSupport) && ActiveSupport.public_methods.include?(:on_load) &&
3
3
  !Sass::Util.ap_geq?('3.1.0.beta')
4
4
  require 'sass/plugin/configuration'
5
5
  ActiveSupport.on_load(:before_configuration) do