haml-edge 2.3.215 → 2.3.216

Sign up to get free protection for your applications and to get access to all the features.
data/EDGE_GEM_VERSION CHANGED
@@ -1 +1 @@
1
- 2.3.215
1
+ 2.3.216
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.3.215
1
+ 2.3.216
@@ -78,7 +78,7 @@ module Haml
78
78
  [index, subenum]
79
79
  end
80
80
  end
81
- res.flatten!(1)
81
+ res = Haml::Util.flatten(res, 1)
82
82
  res.compact!
83
83
  res.uniq!
84
84
  res.sort!
data/lib/haml/util.rb CHANGED
@@ -189,7 +189,7 @@ module Haml
189
189
  # # [2, 4, 5]]
190
190
  def paths(arrs)
191
191
  arrs.inject([[]]) do |paths, arr|
192
- arr.map {|e| paths.map {|path| path + [e]}}.flatten(1)
192
+ flatten(arr.map {|e| paths.map {|path| path + [e]}}, 1)
193
193
  end
194
194
  end
195
195
 
@@ -370,6 +370,14 @@ module Haml
370
370
  Haml::Util::RUBY_VERSION[0] == 1 && Haml::Util::RUBY_VERSION[1] < 9
371
371
  end
372
372
 
373
+ # Whether or not this is running under Ruby 1.8.6 or lower.
374
+ # Note that lower versions are not officially supported.
375
+ #
376
+ # @return [Boolean]
377
+ def ruby1_8_6?
378
+ ruby1_8? && Haml::Util::RUBY_VERSION[2] < 7
379
+ end
380
+
373
381
  # Checks that the encoding of a string is valid in Ruby 1.9
374
382
  # and cleans up potential encoding gotchas like the UTF-8 BOM.
375
383
  # If it's not, yields an error string describing the invalid character
@@ -458,6 +466,38 @@ MSG
458
466
  ruby1_8? ? c[0] : c.ord
459
467
  end
460
468
 
469
+ # Flattens the first `n` nested arrays in a cross-version manner.
470
+ #
471
+ # @param arr [Array] The array to flatten
472
+ # @param n [Fixnum] The number of levels to flatten
473
+ # @return [Array] The flattened array
474
+ def flatten(arr, n)
475
+ return arr.flatten(n) unless ruby1_8_6?
476
+ return arr if n == 0
477
+ arr.inject([]) {|res, e| e.is_a?(Array) ? res.concat(flatten(e, n - 1)) : res << e}
478
+ end
479
+
480
+ # Returns the hash code for a set in a cross-version manner.
481
+ # Aggravatingly, this is order-dependent in Ruby 1.8.6.
482
+ #
483
+ # @param set [Set]
484
+ # @return [Fixnum] The order-independent hashcode of `set`
485
+ def set_hash(set)
486
+ return set.hash unless ruby1_8_6?
487
+ set.map {|e| e.hash}.uniq.sort.hash
488
+ end
489
+
490
+ # Tests the hash-equality of two sets in a cross-version manner.
491
+ # Aggravatingly, this is order-dependent in Ruby 1.8.6.
492
+ #
493
+ # @param set1 [Set]
494
+ # @param set2 [Set]
495
+ # @return [Boolean] Whether or not the sets are hashcode equal
496
+ def set_eql?(set1, set2)
497
+ return set1.eql?(set2) unless ruby1_8_6?
498
+ set1.to_a.uniq.sort_by {|e| e.hash}.eql?(set2.to_a.uniq.sort_by {|e| e.hash})
499
+ end
500
+
461
501
  ## Static Method Stuff
462
502
 
463
503
  # The context in which the ERB for \{#def\_static\_method} will be run.
@@ -77,10 +77,11 @@ module Sass
77
77
  # These correspond to a {CommaSequence}'s {CommaSequence#members members array}.
78
78
  # @see CommaSequence#do_extend
79
79
  def do_extend(extends, supers = [])
80
- Haml::Util.paths(members.map do |sseq_or_op|
80
+ paths = Haml::Util.paths(members.map do |sseq_or_op|
81
81
  next [[sseq_or_op]] unless sseq_or_op.is_a?(SimpleSequence)
82
82
  [[sseq_or_op], *sseq_or_op.do_extend(extends, supers).map {|seq| seq.members}]
83
- end).map {|path| weave(path)}.flatten(1).map {|p| Sequence.new(p)}
83
+ end)
84
+ Haml::Util.flatten(paths.map {|path| weave(path)}, 1).map {|p| Sequence.new(p)}
84
85
  end
85
86
 
86
87
  # @see Simple#to_a
@@ -134,9 +135,9 @@ module Sass
134
135
  while !current.empty? && last_current.first.is_a?(String) || current.last.is_a?(String)
135
136
  last_current.unshift(current.pop)
136
137
  end
137
- befores = befores.map do |before|
138
- subweave(before, current).map {|seqs| seqs + last_current}
139
- end.flatten(1)
138
+ befores = Haml::Util.flatten(befores.map do |before|
139
+ subweave(before, current).map {|seqs| seqs + last_current}
140
+ end, 1)
140
141
  return befores if afters.empty?
141
142
  end
142
143
  end
@@ -119,7 +119,7 @@ module Sass
119
119
  #
120
120
  # @return [Fixnum]
121
121
  def hash
122
- [base, rest].hash
122
+ [base, Haml::Util.set_hash(rest)].hash
123
123
  end
124
124
 
125
125
  # Checks equality between this and another object.
@@ -127,7 +127,8 @@ module Sass
127
127
  # @param other [Object] The object to test equality against
128
128
  # @return [Boolean] Whether or not this is equal to `other`
129
129
  def eql?(other)
130
- other.class == self.class && other.base.eql?(self.base) && other.rest.eql?(self.rest)
130
+ other.class == self.class && other.base.eql?(self.base) &&
131
+ Haml::Util.set_eql?(other.rest, self.rest)
131
132
  end
132
133
 
133
134
  private
@@ -144,6 +144,50 @@ class UtilTest < Test::Unit::TestCase
144
144
  assert_equal(98, ord("bar"))
145
145
  end
146
146
 
147
+ def test_flatten
148
+ assert_equal([1, 2, 3], flatten([1, 2, 3], 0))
149
+ assert_equal([1, 2, 3], flatten([1, 2, 3], 1))
150
+ assert_equal([1, 2, 3], flatten([1, 2, 3], 2))
151
+
152
+ assert_equal([[1, 2], 3], flatten([[1, 2], 3], 0))
153
+ assert_equal([1, 2, 3], flatten([[1, 2], 3], 1))
154
+ assert_equal([1, 2, 3], flatten([[1, 2], 3], 2))
155
+
156
+ assert_equal([[[1], 2], [3], 4], flatten([[[1], 2], [3], 4], 0))
157
+ assert_equal([[1], 2, 3, 4], flatten([[[1], 2], [3], 4], 1))
158
+ assert_equal([1, 2, 3, 4], flatten([[[1], 2], [3], 4], 2))
159
+ end
160
+
161
+ def test_set_hash
162
+ assert(set_hash(Set[1, 2, 3]) == set_hash(Set[3, 2, 1]))
163
+ assert(set_hash(Set[1, 2, 3]) == set_hash(Set[1, 2, 3]))
164
+
165
+ s1 = Set[]
166
+ s1 << 1
167
+ s1 << 2
168
+ s1 << 3
169
+ s2 = Set[]
170
+ s2 << 3
171
+ s2 << 2
172
+ s2 << 1
173
+ assert(set_hash(s1) == set_hash(s2))
174
+ end
175
+
176
+ def test_set_eql
177
+ assert(set_eql?(Set[1, 2, 3], Set[3, 2, 1]))
178
+ assert(set_eql?(Set[1, 2, 3], Set[1, 2, 3]))
179
+
180
+ s1 = Set[]
181
+ s1 << 1
182
+ s1 << 2
183
+ s1 << 3
184
+ s2 = Set[]
185
+ s2 << 3
186
+ s2 << 2
187
+ s2 << 1
188
+ assert(set_eql?(s1, s2))
189
+ end
190
+
147
191
  def test_caller_info
148
192
  assert_equal(["/tmp/foo.rb", 12, "fizzle"], caller_info("/tmp/foo.rb:12: in `fizzle'"))
149
193
  assert_equal(["/tmp/foo.rb", 12, nil], caller_info("/tmp/foo.rb:12"))
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: haml-edge
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.215
4
+ version: 2.3.216
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Weizenbaum