sass 3.1.7 → 3.1.8

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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.1.7
1
+ 3.1.8
@@ -1,3 +1,5 @@
1
+ require 'fileutils'
2
+
1
3
  module Sass
2
4
  module CacheStores
3
5
  # A backend for the Sass cache using the filesystem.
data/lib/sass/css.rb CHANGED
@@ -75,7 +75,7 @@ module Sass
75
75
  #
76
76
  # @return [Tree::Node] The root node of the parsed tree
77
77
  def build_tree
78
- root = Sass::SCSS::CssParser.new(@template).parse
78
+ root = Sass::SCSS::CssParser.new(@template, @options[:filename]).parse
79
79
  expand_commas root
80
80
  parent_ref_rules root
81
81
  remove_parent_refs root
@@ -106,6 +106,7 @@ module Sass
106
106
  next child
107
107
  end
108
108
  child.rule.first.split(',').map do |rule|
109
+ next if rule.strip.empty?
109
110
  node = Tree::RuleNode.new([rule.strip])
110
111
  node.children = child.children
111
112
  node
data/lib/sass/engine.rb CHANGED
@@ -317,7 +317,7 @@ module Sass
317
317
  check_encoding!
318
318
 
319
319
  if @options[:syntax] == :scss
320
- root = Sass::SCSS::Parser.new(@template).parse
320
+ root = Sass::SCSS::Parser.new(@template, @options[:filename]).parse
321
321
  else
322
322
  root = Tree::RootNode.new(@template)
323
323
  append_children(root, tree(tabulate(@template)).first, true)
@@ -559,7 +559,7 @@ WARNING
559
559
  def parse_property_or_rule(line)
560
560
  scanner = StringScanner.new(line.text)
561
561
  hack_char = scanner.scan(/[:\*\.]|\#(?!\{)/)
562
- parser = Sass::SCSS::SassParser.new(scanner, @line)
562
+ parser = Sass::SCSS::SassParser.new(scanner, @options[:filename], @line)
563
563
 
564
564
  unless res = parser.parse_interp_ident
565
565
  return Tree::RuleNode.new(parse_interp(line.text))
@@ -745,6 +745,11 @@ WARNING
745
745
  break unless scanner.scan(/,\s*/)
746
746
  end
747
747
 
748
+ if scanner.scan(/;/)
749
+ raise SyntaxError.new("Invalid @import: expected end of line, was \";\".",
750
+ :line => @line)
751
+ end
752
+
748
753
  return values
749
754
  end
750
755
 
@@ -752,12 +757,12 @@ WARNING
752
757
  return if scanner.eos?
753
758
  unless (str = scanner.scan(Sass::SCSS::RX::STRING)) ||
754
759
  (uri = scanner.scan(Sass::SCSS::RX::URI))
755
- return Tree::ImportNode.new(scanner.scan(/[^,]+/))
760
+ return Tree::ImportNode.new(scanner.scan(/[^,;]+/))
756
761
  end
757
762
 
758
763
  val = scanner[1] || scanner[2]
759
764
  scanner.scan(/\s*/)
760
- if media = scanner.scan(/[^,].*/)
765
+ if media = scanner.scan(/[^,;].*/)
761
766
  Tree::DirectiveNode.new("@import #{str || uri} #{media}")
762
767
  elsif uri
763
768
  Tree::DirectiveNode.new("@import #{uri}")
data/lib/sass/exec.rb CHANGED
@@ -229,6 +229,10 @@ END
229
229
  'Only meaningful for --watch and --update.') do
230
230
  @options[:stop_on_error] = true
231
231
  end
232
+ opts.on('-f', '--force', 'Recompile all Sass files, even if the CSS file is newer.',
233
+ 'Only meaningful for --update.') do
234
+ @options[:force] = true
235
+ end
232
236
  opts.on('-c', '--check', "Just check syntax, don't evaluate.") do
233
237
  require 'stringio'
234
238
  @options[:check_syntax] = true
@@ -238,6 +242,10 @@ END
238
242
  'Output style. Can be nested (default), compact, compressed, or expanded.') do |name|
239
243
  @options[:for_engine][:style] = name.to_sym
240
244
  end
245
+ opts.on('--precision NUMBER_OF_DIGITS', Integer,
246
+ 'How many digits of precision to use when outputting decimal numbers. Defaults to 3.') do |precision|
247
+ ::Sass::Script::Number.precision = precision
248
+ end
241
249
  opts.on('-q', '--quiet', 'Silence warnings and status messages during compilation.') do
242
250
  @options[:for_engine][:quiet] = true
243
251
  end
@@ -350,6 +358,11 @@ END
350
358
  ::Sass::Plugin.options.merge! @options[:for_engine]
351
359
  ::Sass::Plugin.options[:unix_newlines] = @options[:unix_newlines]
352
360
 
361
+ if @options[:force]
362
+ raise "The --force flag may only be used with --update." unless @options[:update]
363
+ ::Sass::Plugin.options[:always_update] = true
364
+ end
365
+
353
366
  raise <<MSG if @args.empty?
354
367
  What files should I watch? Did you mean something like:
355
368
  #{@default_syntax} --watch input.#{@default_syntax}:output.css
@@ -372,7 +385,7 @@ MSG
372
385
 
373
386
  dirs, files = @args.map {|name| split_colon_path(name)}.
374
387
  partition {|i, _| File.directory? i}
375
- files.map! {|from, to| [from, to || from.gsub(/\..*?$/, '.css')]}
388
+ files.map! {|from, to| [from, to || from.gsub(/\.[^.]*?$/, '.css')]}
376
389
  dirs.map! {|from, to| [from, to || from]}
377
390
  ::Sass::Plugin.options[:template_location] = dirs
378
391
 
@@ -72,7 +72,8 @@ module Sass
72
72
  # If no such files exist, it should return nil.
73
73
  #
74
74
  # The {Sass::Engine} to be returned should be passed `options`,
75
- # with a few modifications. `:filename` and `:syntax` should be set appropriately,
75
+ # with a few modifications. `:syntax` should be set appropriately,
76
+ # `:filename` should be set to `uri`,
76
77
  # and `:importer` should be set to this importer.
77
78
  #
78
79
  # @param uri [String] The URI to import.
@@ -35,11 +35,34 @@ module Sass::Script
35
35
  # @return [Boolean, nil]
36
36
  attr_accessor :original
37
37
 
38
- # The precision with which numbers will be printed to CSS files.
39
- # For example, if this is `1000.0`,
38
+ def self.precision
39
+ @precision ||= 3
40
+ end
41
+
42
+ # Sets the number of digits of precision
43
+ # For example, if this is `3`,
40
44
  # `3.1415926` will be printed as `3.142`.
41
- # @api public
42
- PRECISION = 1000.0
45
+ def self.precision=(digits)
46
+ @precision = digits.round
47
+ @precision_factor = 10.0**@precision
48
+ end
49
+
50
+ # the precision factor used in numeric output
51
+ # it is derived from the `precision` method.
52
+ def self.precision_factor
53
+ @precision_factor ||= 10.0**precision
54
+ end
55
+
56
+ # Handles the deprecation warning for the PRECISION constant
57
+ # This can be removed in 3.2.
58
+ def self.const_missing(const)
59
+ if const == :PRECISION
60
+ Sass::Util.sass_warn("Sass::Script::Number::PRECISION is deprecated and will be removed in a future release. Use Sass::Script::Number.precision_factor instead.")
61
+ const_set(:PRECISION, self.precision_factor)
62
+ else
63
+ super
64
+ end
65
+ end
43
66
 
44
67
  # Used so we don't allocate two new arrays for each new number.
45
68
  NO_UNITS = []
@@ -337,7 +360,7 @@ module Sass::Script
337
360
  elsif num % 1 == 0.0
338
361
  num.to_i
339
362
  else
340
- (num * PRECISION).round / PRECISION
363
+ (num * self.precision_factor).round / self.precision_factor
341
364
  end
342
365
  end
343
366
 
@@ -9,10 +9,12 @@ module Sass
9
9
  # @param str [String, StringScanner] The source document to parse.
10
10
  # Note that `Parser` *won't* raise a nice error message if this isn't properly parsed;
11
11
  # for that, you should use the higher-level {Sass::Engine} or {Sass::CSS}.
12
+ # @param filename [String] The name of the file being parsed. Used for warnings.
12
13
  # @param line [Fixnum] The line on which the source string appeared,
13
- # if it's part of another document
14
- def initialize(str, line = 1)
14
+ # if it's part of another document.
15
+ def initialize(str, filename, line = 1)
15
16
  @template = str
17
+ @filename = filename
16
18
  @line = line
17
19
  @strs = []
18
20
  end
@@ -487,21 +489,30 @@ module Sass
487
489
  res = [e]
488
490
 
489
491
  # The tok(/\*/) allows the "E*" hack
490
- while v = element_name || id_selector || class_selector ||
491
- attrib || negation || pseudo || interpolation_selector ||
492
- (tok(/\*/) && Selector::Universal.new(nil))
492
+ while v = id_selector || class_selector || attrib || negation || pseudo ||
493
+ interpolation_selector || (tok(/\*/) && Selector::Universal.new(nil))
493
494
  res << v
494
495
  end
495
496
 
496
- if tok?(/&/)
497
- begin
498
- expected('"{"')
499
- rescue Sass::SyntaxError => e
500
- e.message << "\n\n" << <<MESSAGE
501
- In Sass 3, the parent selector & can only be used where element names are valid,
502
- since it could potentially be replaced by an element name.
497
+ pos = @scanner.pos
498
+ line = @line
499
+ if sel = str? {simple_selector_sequence}
500
+ @scanner.pos = pos
501
+ @line = line
502
+
503
+ if sel =~ /^&/
504
+ begin
505
+ expected('"{"')
506
+ rescue Sass::SyntaxError => e
507
+ e.message << "\n\n\"#{sel}\" may only be used at the beginning of a selector."
508
+ raise e
509
+ end
510
+ else
511
+ Sass::Util.sass_warn(<<MESSAGE)
512
+ DEPRECATION WARNING:
513
+ On line #{@line}#{" of \"#{@filename}\"" if @filename}, after "#{self.class.prior_snippet(@scanner)}"
514
+ Starting in Sass 3.2, "#{sel}" may only be used at the beginning of a selector.
503
515
  MESSAGE
504
- raise e
505
516
  end
506
517
  end
507
518
 
@@ -875,16 +886,6 @@ MESSAGE
875
886
 
876
887
  # @private
877
888
  def self.expected(scanner, expected, line)
878
- pos = scanner.pos
879
-
880
- after = scanner.string[0...pos]
881
- # Get rid of whitespace between pos and the last token,
882
- # but only if there's a newline in there
883
- after.gsub!(/\s*\n\s*$/, '')
884
- # Also get rid of stuff before the last newline
885
- after.gsub!(/.*\n/, '')
886
- after = "..." + after[-15..-1] if after.size > 18
887
-
888
889
  was = scanner.rest.dup
889
890
  # Get rid of whitespace between pos and the next token,
890
891
  # but only if there's a newline in there
@@ -894,10 +895,24 @@ MESSAGE
894
895
  was = was[0...15] + "..." if was.size > 18
895
896
 
896
897
  raise Sass::SyntaxError.new(
897
- "Invalid CSS after \"#{after}\": expected #{expected}, was \"#{was}\"",
898
+ "Invalid CSS after \"#{prior_snippet(scanner)}\": expected #{expected}, was \"#{was}\"",
898
899
  :line => line)
899
900
  end
900
901
 
902
+ # @private
903
+ def self.prior_snippet(scanner)
904
+ pos = scanner.pos
905
+
906
+ after = scanner.string[0...pos]
907
+ # Get rid of whitespace between pos and the last token,
908
+ # but only if there's a newline in there
909
+ after.gsub!(/\s*\n\s*$/, '')
910
+ # Also get rid of stuff before the last newline
911
+ after.gsub!(/.*\n/, '')
912
+ after = "..." + after[-15..-1] if after.size > 18
913
+ after
914
+ end
915
+
901
916
  # Avoid allocating lots of new strings for `#tok`.
902
917
  # This is important because `#tok` is called all the time.
903
918
  NEWLINE = "\n"
@@ -13,12 +13,12 @@ module Sass
13
13
  # Used for error reporting.
14
14
  # @return [Selector::CommaSequence] The parsed selector
15
15
  # @raise [Sass::SyntaxError] if there's a syntax error in the selector
16
- def parse_selector(filename)
16
+ def parse_selector
17
17
  init_scanner!
18
18
  seq = expr!(:selector_comma_sequence)
19
19
  expected("selector") unless @scanner.eos?
20
20
  seq.line = @line
21
- seq.filename = filename
21
+ seq.filename = @filename
22
22
  seq
23
23
  end
24
24
 
@@ -128,8 +128,8 @@ module Sass::Tree
128
128
  if @rule.all? {|t| t.kind_of?(String)}
129
129
  # We don't use real filename/line info because we don't have it yet.
130
130
  # When we get it, we'll set it on the parsed rules if possible.
131
- parser = Sass::SCSS::StaticParser.new(@rule.join.strip, 1)
132
- @parsed_rules = parser.parse_selector('') rescue nil
131
+ parser = Sass::SCSS::StaticParser.new(@rule.join.strip, '', 1)
132
+ @parsed_rules = parser.parse_selector rescue nil
133
133
  end
134
134
  end
135
135
  end
@@ -43,7 +43,7 @@ class Sass::Tree::Visitors::DeepCopy < Sass::Tree::Visitors::Base
43
43
  yield
44
44
  end
45
45
 
46
- def visit_mixin_def(node)
46
+ def visit_mixindef(node)
47
47
  node.args = node.args.map {|k, v| [k.deep_copy, v && v.deep_copy]}
48
48
  yield
49
49
  end
@@ -89,8 +89,8 @@ class Sass::Tree::Visitors::Perform < Sass::Tree::Visitors::Base
89
89
  # Runs SassScript interpolation in the selector,
90
90
  # and then parses the result into a {Sass::Selector::CommaSequence}.
91
91
  def visit_extend(node)
92
- parser = Sass::SCSS::CssParser.new(run_interp(node.selector), node.line)
93
- node.resolved_selector = parser.parse_selector(node.filename)
92
+ parser = Sass::SCSS::CssParser.new(run_interp(node.selector), node.filename, node.line)
93
+ node.resolved_selector = parser.parse_selector
94
94
  node
95
95
  end
96
96
 
@@ -142,6 +142,7 @@ class Sass::Tree::Visitors::Perform < Sass::Tree::Visitors::Base
142
142
 
143
143
  @environment.push_frame(:filename => node.filename, :line => node.line)
144
144
  root = node.imported_file.to_tree
145
+ Sass::Tree::Visitors::CheckNesting.visit(root)
145
146
  node.children = root.children.map {|c| visit(c)}.flatten
146
147
  node
147
148
  rescue Sass::SyntaxError => e
@@ -225,8 +226,8 @@ END
225
226
  # Runs SassScript interpolation in the selector,
226
227
  # and then parses the result into a {Sass::Selector::CommaSequence}.
227
228
  def visit_rule(node)
228
- parser = Sass::SCSS::StaticParser.new(run_interp(node.rule), node.line)
229
- node.parsed_rules ||= parser.parse_selector(node.filename)
229
+ parser = Sass::SCSS::StaticParser.new(run_interp(node.rule), node.filename, node.line)
230
+ node.parsed_rules ||= parser.parse_selector
230
231
  if node.options[:trace_selectors]
231
232
  @environment.push_frame(:filename => node.filename, :line => node.line)
232
233
  node.stack_trace = @environment.stack_trace
@@ -250,7 +251,8 @@ END
250
251
  res = res.value if res.is_a?(Sass::Script::String)
251
252
  msg = "WARNING: #{res}\n "
252
253
  msg << @environment.stack_trace.join("\n ")
253
- msg << "\n"
254
+ # JRuby doesn't automatically add a newline for #warn
255
+ msg << (RUBY_PLATFORM =~ /java/ ? "\n\n" : "\n")
254
256
  Sass::Util.sass_warn msg
255
257
  []
256
258
  ensure
@@ -50,7 +50,7 @@ class Sass::Tree::Visitors::SetOptions < Sass::Tree::Visitors::Base
50
50
  yield
51
51
  end
52
52
 
53
- def visit_mixin_def(node)
53
+ def visit_mixindef(node)
54
54
  node.args.each do |k, v|
55
55
  k.options = @options
56
56
  v.options = @options if v
data/test/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source :gemcutter
2
+
3
+ gem 'rake'
4
+ gem 'less', '< 2.0.0'
data/test/Gemfile.lock ADDED
@@ -0,0 +1,19 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ less (1.2.21)
5
+ mutter (>= 0.4.2)
6
+ treetop (>= 1.4.2)
7
+ mutter (0.5.3)
8
+ polyglot (0.3.2)
9
+ rake (0.9.2)
10
+ treetop (1.4.10)
11
+ polyglot
12
+ polyglot (>= 0.3.1)
13
+
14
+ PLATFORMS
15
+ ruby
16
+
17
+ DEPENDENCIES
18
+ less (< 2.0.0)
19
+ rake
@@ -268,6 +268,15 @@ SASS
268
268
  CSS
269
269
  end
270
270
 
271
+ def test_double_comma
272
+ assert_equal(<<SASS, css2sass(<<CSS))
273
+ foo, bar
274
+ a: b
275
+ SASS
276
+ foo, , bar { a: b }
277
+ CSS
278
+ end
279
+
271
280
  # Error reporting
272
281
 
273
282
  def test_error_reporting
@@ -62,6 +62,7 @@ MSG
62
62
  "foo\n @import foo.css" => "CSS import directives may only be used at the root of a document.",
63
63
  "@if true\n @import foo" => "Import directives may not be used within control directives or mixins.",
64
64
  "@mixin foo\n @import foo" => "Import directives may not be used within control directives or mixins.",
65
+ "@import foo;" => "Invalid @import: expected end of line, was \";\".",
65
66
  '$foo: "bar" "baz" !' => %Q{Invalid CSS after ""bar" "baz" ": expected expression (e.g. 1px, bold), was "!"},
66
67
  '$foo: "bar" "baz" $' => %Q{Invalid CSS after ""bar" "baz" ": expected expression (e.g. 1px, bold), was "$"},
67
68
  "=foo\n :color red\n.bar\n +bang" => "Undefined mixin 'bang'.",
@@ -258,7 +259,7 @@ SASS
258
259
  end
259
260
 
260
261
  def test_imported_exception
261
- [1, 2, 3, 4].each do |i|
262
+ [1, 2, 3, 4, 5].each do |i|
262
263
  begin
263
264
  Sass::Engine.new("@import bork#{i}", :load_paths => [File.dirname(__FILE__) + '/templates/']).render
264
265
  rescue Sass::SyntaxError => err
@@ -280,7 +281,7 @@ SASS
280
281
  end
281
282
 
282
283
  def test_double_imported_exception
283
- [1, 2, 3, 4].each do |i|
284
+ [1, 2, 3, 4, 5].each do |i|
284
285
  begin
285
286
  Sass::Engine.new("@import nested_bork#{i}", :load_paths => [File.dirname(__FILE__) + '/templates/']).render
286
287
  rescue Sass::SyntaxError => err
@@ -1793,11 +1794,11 @@ SASS
1793
1794
 
1794
1795
  def test_interpolation_doesnt_deep_unquote_strings
1795
1796
  assert_equal(<<CSS, render(<<SASS))
1796
- .foo- "bar" "baz" {
1797
- a: b; }
1797
+ .foo {
1798
+ a: "bar" "baz"; }
1798
1799
  CSS
1799
- .foo-\#{"bar" "baz"}
1800
- a: b
1800
+ .foo
1801
+ a: \#{"bar" "baz"}
1801
1802
  SASS
1802
1803
  end
1803
1804
 
@@ -2451,6 +2452,27 @@ SASS
2451
2452
  assert_equal original_filename, importer.engine("imported").options[:original_filename]
2452
2453
  end
2453
2454
 
2455
+ def test_deprecated_PRECISION
2456
+ assert_warning(<<END) {assert_equal 1000.0, Sass::Script::Number::PRECISION}
2457
+ Sass::Script::Number::PRECISION is deprecated and will be removed in a future release. Use Sass::Script::Number.precision_factor instead.
2458
+ END
2459
+ end
2460
+ def test_changing_precision
2461
+ begin
2462
+ Sass::Script::Number.precision = 8
2463
+ assert_equal <<CSS, render(<<SASS)
2464
+ div {
2465
+ maximum: 1.00000001;
2466
+ too-much: 1.0; }
2467
+ CSS
2468
+ div
2469
+ maximum : 1.00000001
2470
+ too-much: 1.000000001
2471
+ SASS
2472
+ ensure
2473
+ Sass::Script::Number.precision = 3
2474
+ end
2475
+ end
2454
2476
 
2455
2477
  private
2456
2478
 
@@ -909,7 +909,7 @@ SCSS
909
909
  end
910
910
 
911
911
  def render(scss, options = {})
912
- tree = Sass::SCSS::CssParser.new(scss).parse
912
+ tree = Sass::SCSS::CssParser.new(scss, options[:filename]).parse
913
913
  tree.options = Sass::Engine::DEFAULT_OPTIONS.merge(options)
914
914
  tree.render
915
915
  end
@@ -118,11 +118,11 @@ SCSS
118
118
  def test_warn_directive
119
119
  expected_warning = <<EXPECTATION
120
120
  WARNING: this is a warning
121
- on line 2 of test_warn_directive_inline.scss
121
+ on line 2 of test_warn_directive_inline.scss
122
122
 
123
123
  WARNING: this is a mixin
124
- on line 1 of test_warn_directive_inline.scss, in `foo'
125
- from line 3 of test_warn_directive_inline.scss
124
+ on line 1 of test_warn_directive_inline.scss, in `foo'
125
+ from line 3 of test_warn_directive_inline.scss
126
126
  EXPECTATION
127
127
  assert_warning expected_warning do
128
128
  assert_equal <<CSS, render(<<SCSS)
@@ -892,7 +892,8 @@ SCSS
892
892
  end
893
893
 
894
894
  def test_uses_property_exception_with_star_hack
895
- render <<SCSS
895
+ # Silence the "beginning of selector" warning
896
+ Sass::Util.silence_warnings {render <<SCSS}
896
897
  foo {
897
898
  *bar:baz [fail]; }
898
899
  SCSS
@@ -1029,11 +1030,10 @@ SCSS
1029
1030
  end
1030
1031
 
1031
1032
  def test_parent_in_mid_selector_error
1032
- assert_raise_message(Sass::SyntaxError, <<MESSAGE) {render <<SCSS}
1033
+ assert_raise_message(Sass::SyntaxError, <<MESSAGE.rstrip) {render <<SCSS}
1033
1034
  Invalid CSS after ".foo": expected "{", was "&.bar"
1034
1035
 
1035
- In Sass 3, the parent selector & can only be used where element names are valid,
1036
- since it could potentially be replaced by an element name.
1036
+ "&" may only be used at the beginning of a selector.
1037
1037
  MESSAGE
1038
1038
  flim {
1039
1039
  .foo&.bar {a: b}
@@ -1042,11 +1042,10 @@ SCSS
1042
1042
  end
1043
1043
 
1044
1044
  def test_parent_in_mid_selector_error
1045
- assert_raise_message(Sass::SyntaxError, <<MESSAGE) {render <<SCSS}
1045
+ assert_raise_message(Sass::SyntaxError, <<MESSAGE.rstrip) {render <<SCSS}
1046
1046
  Invalid CSS after " .foo.bar": expected "{", was "& {a: b}"
1047
1047
 
1048
- In Sass 3, the parent selector & can only be used where element names are valid,
1049
- since it could potentially be replaced by an element name.
1048
+ "&" may only be used at the beginning of a selector.
1050
1049
  MESSAGE
1051
1050
  flim {
1052
1051
  .foo.bar& {a: b}
@@ -1055,11 +1054,10 @@ SCSS
1055
1054
  end
1056
1055
 
1057
1056
  def test_double_parent_selector_error
1058
- assert_raise_message(Sass::SyntaxError, <<MESSAGE) {render <<SCSS}
1057
+ assert_raise_message(Sass::SyntaxError, <<MESSAGE.rstrip) {render <<SCSS}
1059
1058
  Invalid CSS after " &": expected "{", was "& {a: b}"
1060
1059
 
1061
- In Sass 3, the parent selector & can only be used where element names are valid,
1062
- since it could potentially be replaced by an element name.
1060
+ "&" may only be used at the beginning of a selector.
1063
1061
  MESSAGE
1064
1062
  flim {
1065
1063
  && {a: b}
@@ -0,0 +1,3 @@
1
+ foo
2
+ @function bar($a)
3
+ @return $a
@@ -0,0 +1,2 @@
1
+
2
+ @import bork5
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sass
3
3
  version: !ruby/object:Gem::Version
4
- hash: 13
4
+ hash: 19
5
5
  prerelease: false
6
6
  segments:
7
7
  - 3
8
8
  - 1
9
- - 7
10
- version: 3.1.7
9
+ - 8
10
+ version: 3.1.8
11
11
  platform: ruby
12
12
  authors:
13
13
  - Nathan Weizenbaum
@@ -17,7 +17,7 @@ autorequire:
17
17
  bindir: bin
18
18
  cert_chain: []
19
19
 
20
- date: 2011-08-04 00:00:00 -07:00
20
+ date: 2011-09-30 00:00:00 -07:00
21
21
  default_executable:
22
22
  dependencies:
23
23
  - !ruby/object:Gem::Dependency
@@ -57,6 +57,7 @@ email: sass-lang@googlegroups.com
57
57
  executables:
58
58
  - sass
59
59
  - sass-convert
60
+ - scss
60
61
  extensions: []
61
62
 
62
63
  extra_rdoc_files: []
@@ -198,6 +199,8 @@ files:
198
199
  - bin/sass-convert
199
200
  - bin/scss
200
201
  - bin/sass
202
+ - test/Gemfile
203
+ - test/Gemfile.lock
201
204
  - test/test_helper.rb
202
205
  - test/sass/engine_test.rb
203
206
  - test/sass/functions_test.rb
@@ -225,6 +228,8 @@ files:
225
228
  - test/sass/templates/line_numbers.sass
226
229
  - test/sass/templates/expanded.sass
227
230
  - test/sass/templates/bork3.sass
231
+ - test/sass/templates/bork5.sass
232
+ - test/sass/templates/nested_bork5.sass
228
233
  - test/sass/templates/warn_imported.sass
229
234
  - test/sass/templates/import_charset_ibm866.sass
230
235
  - test/sass/templates/bork1.sass
@@ -320,10 +325,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
320
325
  requirements:
321
326
  - - ">="
322
327
  - !ruby/object:Gem::Version
323
- hash: 3
328
+ hash: 57
324
329
  segments:
325
- - 0
326
- version: "0"
330
+ - 1
331
+ - 8
332
+ - 7
333
+ version: 1.8.7
327
334
  required_rubygems_version: !ruby/object:Gem::Requirement
328
335
  none: false
329
336
  requirements: