sass 3.3.7 → 3.3.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3056f55a693a030fff05f6e9cdb3c828c4092823
4
- data.tar.gz: 03510d67bb0d7206043ba4fd8ea0f056f036b970
3
+ metadata.gz: 0bf6310b2324741eab4f6267b1999e90b522b0d7
4
+ data.tar.gz: df120388678de1053e5f8a22d1b4e972d0ab536c
5
5
  SHA512:
6
- metadata.gz: 890d0f4b3049a3cad64dfb4aa70ce63b4cbc29d32fcb510f92c2d0dfd23a15f7c438f86fcbc865ecd3035df1e3019cf3225c63cedcb17a692d6597eb9c5e955e
7
- data.tar.gz: d550673bc5cbd178c362aa1389ef22aadce524127a9016f0b11299cffd19eccb13af568b8b67f3b56f27698dd60baee9a2daaaf1685be2872a1afdcca1ff3871
6
+ metadata.gz: 2138eb4290f33ed4058020bdf52e238802a11b5be8d2ad1eed798691005cf6ce02f765cbd6db48ee90e5b7b23c1c6825db0e4711ebc69e9ee9e5dbe788c75879
7
+ data.tar.gz: 81538da0a25f9c024f7bfd20bbc38e53873c8f2f72b4f822dc950d04f8990274a8cb37483fa1603bf101941bb022244a455c84e496fb152a46d427b03959660f
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.3.7
1
+ 3.3.8
@@ -1 +1 @@
1
- 03 May 2014 00:22:30 UTC
1
+ 31 May 2014 00:35:27 UTC
@@ -1009,15 +1009,16 @@ WARNING
1009
1009
  script_parser = Sass::Script::Parser.new(scanner, @line, to_parser_offset(offset), @options)
1010
1010
  str = script_parser.parse_string
1011
1011
 
1012
- media_parser = Sass::SCSS::Parser.new(scanner,
1013
- @options[:filename], @options[:importer],
1014
- @line, str.source_range.end_pos.offset)
1015
- if (media = media_parser.parse_media_query_list)
1016
- end_pos = Sass::Source::Position.new(@line, media_parser.offset + 1)
1017
- node = Tree::CssImportNode.new(str, media.to_a)
1018
- else
1012
+ if scanner.eos?
1019
1013
  end_pos = str.source_range.end_pos
1020
1014
  node = Tree::CssImportNode.new(str)
1015
+ else
1016
+ media_parser = Sass::SCSS::Parser.new(scanner,
1017
+ @options[:filename], @options[:importer],
1018
+ @line, str.source_range.end_pos.offset)
1019
+ media = media_parser.parse_media_query_list
1020
+ end_pos = Sass::Source::Position.new(@line, media_parser.offset + 1)
1021
+ node = Tree::CssImportNode.new(str, media.to_a)
1021
1022
  end
1022
1023
 
1023
1024
  node.source_range = Sass::Source::Range.new(
@@ -229,7 +229,9 @@ module Sass::Plugin
229
229
  # A Listen version prior to 2.0 will write a test file to a directory to
230
230
  # see if a watcher supports watching that directory. That breaks horribly
231
231
  # on read-only directories, so we filter those out.
232
- directories.reject {|d| File.writable?(d)} unless Sass::Util.listen_geq_2?
232
+ unless Sass::Util.listen_geq_2?
233
+ directories = directories.select {|d| File.directory?(d) && File.writable?(d)}
234
+ end
233
235
 
234
236
  # TODO: Keep better track of what depends on what
235
237
  # so we don't have to run a global update every time anything changes.
@@ -276,7 +278,7 @@ module Sass::Plugin
276
278
  private
277
279
 
278
280
  def create_listener(*args, &block)
279
- load_listen!
281
+ Sass::Util.load_listen!
280
282
  if Sass::Util.listen_geq_2?
281
283
  Listen.to(*args, &block)
282
284
  else
@@ -310,44 +312,6 @@ module Sass::Plugin
310
312
  dedupped
311
313
  end
312
314
 
313
- def load_listen!
314
- if defined?(gem)
315
- begin
316
- gem 'listen', '>= 1.1.0', '< 3.0.0'
317
- require 'listen'
318
- rescue Gem::LoadError
319
- dir = Sass::Util.scope("vendor/listen/lib")
320
- $LOAD_PATH.unshift dir
321
- begin
322
- require 'listen'
323
- rescue LoadError => e
324
- if Sass::Util.version_geq(RUBY_VERSION, "1.9.3")
325
- version_constraint = "~> 2.7"
326
- else
327
- version_constraint = "~> 1.1"
328
- end
329
- e.message << "\n" <<
330
- "Run \"gem install listen --version '#{version_constraint}'\" to get it."
331
- raise e
332
- end
333
- end
334
- else
335
- begin
336
- require 'listen'
337
- rescue LoadError => e
338
- dir = Sass::Util.scope("vendor/listen/lib")
339
- if $LOAD_PATH.include?(dir)
340
- raise e unless File.exists?(scope(".git"))
341
- e.message << "\n" <<
342
- 'Run "git submodule update --init" to get the bundled version.'
343
- else
344
- $LOAD_PATH.unshift dir
345
- retry
346
- end
347
- end
348
- end
349
- end
350
-
351
315
  def on_file_changed(individual_files, modified, added, removed)
352
316
  recompile_required = false
353
317
 
@@ -2036,7 +2036,7 @@ module Sass::Script
2036
2036
  # @raise [ArgumentError] if `$args` isn't a variable argument list
2037
2037
  def keywords(args)
2038
2038
  assert_type args, :ArgList, :args
2039
- map(Sass::Util.map_keys(args.keywords.as_stored) {|k| Sass::Script::String.new(k)})
2039
+ map(Sass::Util.map_keys(args.keywords.as_stored) {|k| Sass::Script::Value::String.new(k)})
2040
2040
  end
2041
2041
  declare :keywords, [:args]
2042
2042
 
@@ -2106,31 +2106,29 @@ module Sass::Script
2106
2106
  end
2107
2107
  declare :call, [:name], :var_args => true, :var_kwargs => true
2108
2108
 
2109
- # This function only exists as a workaround for IE7's [`content: counter`
2110
- # bug][bug]. It works identically to any other plain-CSS function, except it
2109
+ # This function only exists as a workaround for IE7's [`content:
2110
+ # counter` bug](http://jes.st/2013/ie7s-css-breaking-content-counter-bug/).
2111
+ # It works identically to any other plain-CSS function, except it
2111
2112
  # avoids adding spaces between the argument commas.
2112
2113
  #
2113
- # [bug]: http://jes.st/2013/ie7s-css-breaking-content-counter-bug/
2114
- #
2115
2114
  # @example
2116
2115
  # counter(item, ".") => counter(item,".")
2117
2116
  # @overload counter($args...)
2118
- # @return [String]
2117
+ # @return [Sass::Script::Value::String]
2119
2118
  def counter(*args)
2120
2119
  identifier("counter(#{args.map {|a| a.to_s(options)}.join(',')})")
2121
2120
  end
2122
2121
  declare :counter, [], :var_args => true
2123
2122
 
2124
- # This function only exists as a workaround for IE7's [`content: counters`
2125
- # bug][bug]. It works identically to any other plain-CSS function, except it
2123
+ # This function only exists as a workaround for IE7's [`content:
2124
+ # counter` bug](http://jes.st/2013/ie7s-css-breaking-content-counter-bug/).
2125
+ # It works identically to any other plain-CSS function, except it
2126
2126
  # avoids adding spaces between the argument commas.
2127
2127
  #
2128
- # [bug]: http://jes.st/2013/ie7s-css-breaking-content-counter-bug/
2129
- #
2130
2128
  # @example
2131
2129
  # counters(item, ".") => counters(item,".")
2132
2130
  # @overload counters($args...)
2133
- # @return [String]
2131
+ # @return [Sass::Script::Value::String]
2134
2132
  def counters(*args)
2135
2133
  identifier("counters(#{args.map {|a| a.to_s(options)}.join(',')})")
2136
2134
  end
@@ -2144,9 +2142,11 @@ module Sass::Script
2144
2142
  # variable-exists(a-false-value) => true
2145
2143
  #
2146
2144
  # variable-exists(nonexistent) => false
2147
- # @param name [Sass::Script::String] The name of the variable to
2148
- # check. The name should not include the `$`.
2149
- # @return [Sass::Script::Bool] Whether the variable is defined in
2145
+ #
2146
+ # @overload variable_exists($name)
2147
+ # @param $name [Sass::Script::Value::String] The name of the variable to
2148
+ # check. The name should not include the `$`.
2149
+ # @return [Sass::Script::Value::Bool] Whether the variable is defined in
2150
2150
  # the current scope.
2151
2151
  def variable_exists(name)
2152
2152
  assert_type name, :String, :name
@@ -2165,9 +2165,11 @@ module Sass::Script
2165
2165
  # $some-var: false;
2166
2166
  # @if global-variable-exists(some-var) { /* false, doesn't run */ }
2167
2167
  # }
2168
- # @param name [Sass::Script::String] The name of the variable to
2169
- # check. The name should not include the `$`.
2170
- # @return [Sass::Script::Bool] Whether the variable is defined in
2168
+ #
2169
+ # @overload global_variable_exists($name)
2170
+ # @param $name [Sass::Script::Value::String] The name of the variable to
2171
+ # check. The name should not include the `$`.
2172
+ # @return [Sass::Script::Value::Bool] Whether the variable is defined in
2171
2173
  # the global scope.
2172
2174
  def global_variable_exists(name)
2173
2175
  assert_type name, :String, :name
@@ -2182,9 +2184,11 @@ module Sass::Script
2182
2184
  #
2183
2185
  # @function myfunc { @return "something"; }
2184
2186
  # function-exists(myfunc) => true
2185
- # @param name [Sass::Script::String] The name of the function to
2186
- # check.
2187
- # @return [Sass::Script::Bool] Whether the function is defined.
2187
+ #
2188
+ # @overload function_exists($name)
2189
+ # @param name [Sass::Script::Value::String] The name of the function to
2190
+ # check.
2191
+ # @return [Sass::Script::Value::Bool] Whether the function is defined.
2188
2192
  def function_exists(name)
2189
2193
  assert_type name, :String, :name
2190
2194
  exists = Sass::Script::Functions.callable?(name.value.tr("-", "_"))
@@ -2200,9 +2204,11 @@ module Sass::Script
2200
2204
  #
2201
2205
  # @mixin red-text { color: red; }
2202
2206
  # mixin-exists(red-text) => true
2203
- # @param name [Sass::Script::String] The name of the mixin to
2204
- # check.
2205
- # @return [Sass::Script::Bool] Whether the mixin is defined.
2207
+ #
2208
+ # @overload mixin_exists($name)
2209
+ # @param name [Sass::Script::Value::String] The name of the mixin to
2210
+ # check.
2211
+ # @return [Sass::Script::Value::Bool] Whether the mixin is defined.
2206
2212
  def mixin_exists(name)
2207
2213
  assert_type name, :String, :name
2208
2214
  bool(environment.mixin(name.value))
@@ -2211,7 +2217,8 @@ module Sass::Script
2211
2217
 
2212
2218
  # Return a string containing the value as its Sass representation.
2213
2219
  #
2214
- # @param value [Sass::Script::Value::Base] The value to inspect.
2220
+ # @overload inspect($value)
2221
+ # @param $value [Sass::Script::Value::Base] The value to inspect.
2215
2222
  # @return [Sass::Script::Value::String] A representation of the value as
2216
2223
  # it would be written in Sass.
2217
2224
  def inspect(value)
@@ -2221,12 +2228,12 @@ module Sass::Script
2221
2228
 
2222
2229
  # @overload random()
2223
2230
  # Return a decimal between 0 and 1, inclusive of 0 but not 1.
2224
- # @return [Sass::Script::Number] A decimal value.
2231
+ # @return [Sass::Script::Value::Number] A decimal value.
2225
2232
  # @overload random($limit)
2226
2233
  # Return an integer between 1 and `$limit`, inclusive of 1 but not `$limit`.
2227
2234
  # @param $limit [Sass::Script::Value::Number] The maximum of the random integer to be
2228
2235
  # returned, a positive integer.
2229
- # @return [Sass::Script::Number] An integer.
2236
+ # @return [Sass::Script::Value::Number] An integer.
2230
2237
  # @raise [ArgumentError] if the `$limit` is not 1 or greater
2231
2238
  def random(limit = nil)
2232
2239
  generator = Sass::Script::Functions.random_number_generator
@@ -39,7 +39,7 @@ module Sass
39
39
  def parse
40
40
  init_scanner!
41
41
  root = stylesheet
42
- expected("selector or at-rule") unless @scanner.eos?
42
+ expected("selector or at-rule") unless root && @scanner.eos?
43
43
  root
44
44
  end
45
45
 
@@ -62,7 +62,7 @@ module Sass
62
62
  def parse_media_query_list
63
63
  init_scanner!
64
64
  ql = media_query_list
65
- expected("media query list") unless @scanner.eos?
65
+ expected("media query list") unless ql && @scanner.eos?
66
66
  ql
67
67
  end
68
68
 
@@ -74,7 +74,7 @@ module Sass
74
74
  def parse_at_root_query
75
75
  init_scanner!
76
76
  query = at_root_query
77
- expected("@at-root query list") unless @scanner.eos?
77
+ expected("@at-root query list") unless query && @scanner.eos?
78
78
  query
79
79
  end
80
80
 
@@ -86,7 +86,7 @@ module Sass
86
86
  def parse_supports_condition
87
87
  init_scanner!
88
88
  condition = supports_condition
89
- expected("supports condition") unless @scanner.eos?
89
+ expected("supports condition") unless condition && @scanner.eos?
90
90
  condition
91
91
  end
92
92
 
@@ -78,8 +78,7 @@ module Sass
78
78
  # @see Simple#to_a
79
79
  def to_a
80
80
  arr = Sass::Util.intersperse(@members.map {|m| m.to_a}, ", ").flatten
81
- arr.delete("\n")
82
- arr
81
+ Sass::Util.replace_subseq(arr, [", ", "\n"], [",\n"])
83
82
  end
84
83
 
85
84
  private
@@ -119,7 +119,9 @@ module Sass
119
119
  ary = @members.map do |seq_or_op|
120
120
  seq_or_op.is_a?(SimpleSequence) ? seq_or_op.to_a : seq_or_op
121
121
  end
122
- Sass::Util.intersperse(ary, " ").flatten.compact
122
+ ary = Sass::Util.intersperse(ary, " ").flatten.compact
123
+ ary = Sass::Util.replace_subseq(ary, ["\n", " "], ["\n"])
124
+ Sass::Util.replace_subseq(ary, [" ", "\n"], ["\n"])
123
125
  end
124
126
 
125
127
  # Returns a string representation of the sequence.
@@ -236,12 +236,13 @@ class Sass::Tree::Visitors::Convert < Sass::Tree::Visitors::Base
236
236
  end
237
237
 
238
238
  def visit_rule(node)
239
+ rule = node.parsed_rules ? node.parsed_rules.to_a : node.rule
239
240
  if @format == :sass
240
- name = selector_to_sass(node.rule)
241
+ name = selector_to_sass(rule)
241
242
  name = "\\" + name if name[0] == ?:
242
243
  name.gsub(/^/, tab_str) + yield
243
244
  elsif @format == :scss
244
- name = selector_to_scss(node.rule)
245
+ name = selector_to_scss(rule)
245
246
  res = name + yield
246
247
  if node.children.last.is_a?(Sass::Tree::CommentNode) && node.children.last.type == :silent
247
248
  res.slice!(-3..-1)
@@ -315,19 +315,31 @@ class Sass::Tree::Visitors::Cssize < Sass::Tree::Visitors::Base
315
315
  # omitted.
316
316
  # @return [List<Sass::Tree::Node, Bubble>]
317
317
  def debubble(children, parent = nil)
318
+ # Keep track of the previous parent so that we don't divide `parent`
319
+ # unnecessarily if the `@at-root` doesn't produce any new nodes (e.g.
320
+ # `@at-root {@extend %foo}`).
321
+ previous_parent = nil
322
+
318
323
  Sass::Util.slice_by(children) {|c| c.is_a?(Bubble)}.map do |(is_bubble, slice)|
319
324
  unless is_bubble
320
325
  next slice unless parent
321
- new_parent = parent.dup
322
- new_parent.children = slice
323
- next new_parent
326
+ if previous_parent
327
+ previous_parent.children.push(*slice)
328
+ next []
329
+ else
330
+ previous_parent = new_parent = parent.dup
331
+ new_parent.children = slice
332
+ next new_parent
333
+ end
324
334
  end
325
335
 
326
- next slice.map do |bubble|
336
+ slice.map do |bubble|
327
337
  next unless (node = block_given? ? yield(bubble.node) : bubble.node)
328
338
  node.tabs += bubble.tabs
329
339
  node.group_end = bubble.group_end
330
- [visit(node)].flatten
340
+ results = [visit(node)].flatten
341
+ previous_parent = nil unless results.empty?
342
+ results
331
343
  end.compact
332
344
  end.flatten
333
345
  end
@@ -487,7 +487,7 @@ WARNING
487
487
 
488
488
  def visit_cssimport(node)
489
489
  node.resolved_uri = run_interp([node.uri])
490
- if node.query
490
+ if node.query && !node.query.empty?
491
491
  parser = Sass::SCSS::StaticParser.new(run_interp(node.query),
492
492
  node.filename, node.options[:importer], node.line)
493
493
  node.resolved_query ||= parser.parse_media_query_list
@@ -162,6 +162,43 @@ module Sass
162
162
  end
163
163
  end
164
164
 
165
+ # Non-destructively replaces all occurrences of a subsequence in an array
166
+ # with another subsequence.
167
+ #
168
+ # @example
169
+ # replace_subseq([1, 2, 3, 4, 5], [2, 3], [:a, :b])
170
+ # #=> [1, :a, :b, 4, 5]
171
+ #
172
+ # @param arr [Array] The array whose subsequences will be replaced.
173
+ # @param subseq [Array] The subsequence to find and replace.
174
+ # @param replacement [Array] The sequence that `subseq` will be replaced with.
175
+ # @return [Array] `arr` with `subseq` replaced with `replacement`.
176
+ def replace_subseq(arr, subseq, replacement)
177
+ new = []
178
+ matched = []
179
+ i = 0
180
+ arr.each do |elem|
181
+ if elem != subseq[i]
182
+ new.push(*matched)
183
+ matched = []
184
+ i = 0
185
+ new << elem
186
+ next
187
+ end
188
+
189
+ if i == subseq.length - 1
190
+ matched = []
191
+ i = 0
192
+ new.push(*replacement)
193
+ else
194
+ matched << elem
195
+ i += 1
196
+ end
197
+ end
198
+ new.push(*matched)
199
+ new
200
+ end
201
+
165
202
  # Intersperses a value in an enumerable, as would be done with `Array#join`
166
203
  # but without concatenating the array together afterwards.
167
204
  #
@@ -1173,6 +1210,44 @@ MSG
1173
1210
  tmpfile.unlink if tmpfile
1174
1211
  end
1175
1212
 
1213
+ def load_listen!
1214
+ if defined?(gem)
1215
+ begin
1216
+ gem 'listen', '>= 1.1.0', '< 3.0.0'
1217
+ require 'listen'
1218
+ rescue Gem::LoadError
1219
+ dir = scope("vendor/listen/lib")
1220
+ $LOAD_PATH.unshift dir
1221
+ begin
1222
+ require 'listen'
1223
+ rescue LoadError => e
1224
+ if version_geq(RUBY_VERSION, "1.9.3")
1225
+ version_constraint = "~> 2.7"
1226
+ else
1227
+ version_constraint = "~> 1.1"
1228
+ end
1229
+ e.message << "\n" <<
1230
+ "Run \"gem install listen --version '#{version_constraint}'\" to get it."
1231
+ raise e
1232
+ end
1233
+ end
1234
+ else
1235
+ begin
1236
+ require 'listen'
1237
+ rescue LoadError => e
1238
+ dir = scope("vendor/listen/lib")
1239
+ if $LOAD_PATH.include?(dir)
1240
+ raise e unless File.exists?(scope(".git"))
1241
+ e.message << "\n" <<
1242
+ 'Run "git submodule update --init" to get the bundled version.'
1243
+ else
1244
+ $LOAD_PATH.unshift dir
1245
+ retry
1246
+ end
1247
+ end
1248
+ end
1249
+ end
1250
+
1176
1251
  private
1177
1252
 
1178
1253
  # rubocop:disable LineLength
@@ -174,12 +174,12 @@ class CompilerTest < Test::Unit::TestCase
174
174
  directories = nil
175
175
  c = watcher do |listener|
176
176
  directories = listener.directories
177
- listener.removed "/asdf/foobar/sass/foo.scss"
177
+ listener.removed File.expand_path("./foo.scss")
178
178
  listener.fire_events!
179
179
  end
180
- c.watch([["/asdf/foobar/sass/foo.scss", "/asdf/foobar/css/foo.css", nil]])
181
- assert directories.include?("/asdf/foobar/sass"), directories.inspect
182
- assert_equal "/asdf/foobar/css/foo.css", c.deleted_css_files.first, "the corresponding css file was not deleted"
180
+ c.watch([[File.expand_path("./foo.scss"), File.expand_path("./foo.css"), nil]])
181
+ assert directories.include?(File.expand_path(".")), directories.inspect
182
+ assert_equal File.expand_path("./foo.css"), c.deleted_css_files.first, "the corresponding css file was not deleted"
183
183
  assert_equal [], c.update_stylesheets_called_with[1], "the sass file should not have been compiled"
184
184
  end
185
185
 
@@ -265,6 +265,25 @@ CSS
265
265
 
266
266
  # Regressions
267
267
 
268
+ def test_nesting_with_matching_property
269
+ assert_equal(<<SASS, css2sass(<<CSS))
270
+ ul
271
+ width: 10px
272
+ div
273
+ width: 20px
274
+
275
+ article
276
+ width: 10px
277
+ p
278
+ width: 20px
279
+ SASS
280
+ ul {width: 10px}
281
+ ul div {width: 20px}
282
+ article {width: 10px}
283
+ article p {width: 20px}
284
+ CSS
285
+ end
286
+
268
287
  def test_empty_rule
269
288
  assert_equal(<<SASS, css2sass(<<CSS))
270
289
  a
@@ -2848,6 +2848,34 @@ CSS
2848
2848
  SCSS
2849
2849
  end
2850
2850
 
2851
+ def test_at_root_doesnt_always_break_blocks
2852
+ assert_equal <<CSS, render(<<SCSS)
2853
+ .foo {
2854
+ a: b; }
2855
+
2856
+ @media screen {
2857
+ .foo {
2858
+ c: d; }
2859
+ .bar {
2860
+ e: f; } }
2861
+ CSS
2862
+ %base {
2863
+ a: b;
2864
+ }
2865
+
2866
+ @media screen {
2867
+ .foo {
2868
+ c: d;
2869
+ @at-root (without: media) {
2870
+ @extend %base;
2871
+ }
2872
+ }
2873
+
2874
+ .bar {e: f}
2875
+ }
2876
+ SCSS
2877
+ end
2878
+
2851
2879
  ## Errors
2852
2880
 
2853
2881
  def test_nested_mixin_def_is_scoped
@@ -3098,6 +3126,16 @@ MESSAGE
3098
3126
  SCSS
3099
3127
  end
3100
3128
 
3129
+ def test_empty_media_query_error
3130
+ assert_raise_message(Sass::SyntaxError, <<MESSAGE.rstrip) {render(<<SCSS)}
3131
+ Invalid CSS after "": expected media query list, was ""
3132
+ MESSAGE
3133
+ @media \#{""} {
3134
+ foo {a: b}
3135
+ }
3136
+ SCSS
3137
+ end
3138
+
3101
3139
  # Regression
3102
3140
 
3103
3141
  def test_top_level_unknown_directive_in_at_root
@@ -79,6 +79,15 @@ class UtilTest < Test::Unit::TestCase
79
79
  merge_adjacent_strings([str, " ", str, " ", str, :bang, str, " ", str, 12]))
80
80
  end
81
81
 
82
+ def test_replace_subseq
83
+ assert_equal([1, 2, :a, :b, 5],
84
+ replace_subseq([1, 2, 3, 4, 5], [3, 4], [:a, :b]))
85
+ assert_equal([1, 2, 3, 4, 5],
86
+ replace_subseq([1, 2, 3, 4, 5], [3, 4, 6], [:a, :b]))
87
+ assert_equal([1, 2, 3, 4, 5],
88
+ replace_subseq([1, 2, 3, 4, 5], [4, 5, 6], [:a, :b]))
89
+ end
90
+
82
91
  def test_intersperse
83
92
  assert_equal(["foo", " ", "bar", " ", "baz"],
84
93
  intersperse(%w[foo bar baz], " "))
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sass
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.7
4
+ version: 3.3.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Weizenbaum
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-05-03 00:00:00.000000000 Z
13
+ date: 2014-05-31 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: yard