backports 1.10.0 → 1.10.1
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.yml +1 -1
- data/backports.gemspec +2 -2
- data/lib/backports/1.8.7/enumerator.rb +17 -15
- data/lib/backports/1.9/enumerable.rb +22 -16
- data/lib/backports/1.9/method.rb +2 -2
- data/test/enumerable_test.rb +23 -0
- metadata +2 -2
data/VERSION.yml
CHANGED
data/backports.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{backports}
|
8
|
-
s.version = "1.10.
|
8
|
+
s.version = "1.10.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Marc-Andr\303\251 Lafortune"]
|
12
|
-
s.date = %q{2009-
|
12
|
+
s.date = %q{2009-10-03}
|
13
13
|
s.description = %q{ Essential backports that enable some of the really nice features of ruby 1.8.7, ruby 1.9 and rails from ruby 1.8.6 and earlier.
|
14
14
|
}
|
15
15
|
s.email = %q{github@marc-andre.ca}
|
@@ -1,19 +1,21 @@
|
|
1
1
|
require 'enumerator'
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
2
|
+
if (Enumerable::Enumerator rescue false)
|
3
|
+
module Enumerable
|
4
|
+
class Enumerator
|
5
|
+
def next
|
6
|
+
require 'generator'
|
7
|
+
@generator ||= Generator.new(self)
|
8
|
+
raise StopIteration unless @generator.next?
|
9
|
+
@generator.next
|
10
|
+
end unless method_defined? :next
|
10
11
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
12
|
+
def rewind
|
13
|
+
@object.rewind if @object.respond_to? :rewind
|
14
|
+
require 'generator'
|
15
|
+
@generator ||= Generator.new(self)
|
16
|
+
@generator.rewind
|
17
|
+
self
|
18
|
+
end unless method_defined? :rewind
|
19
|
+
end if const_defined? :Enumerator
|
18
20
|
end
|
19
21
|
end
|
@@ -7,30 +7,36 @@ module Enumerable
|
|
7
7
|
end unless method_defined? :each_with_object
|
8
8
|
|
9
9
|
def chunk(initial_state = nil, &original_block)
|
10
|
-
|
11
|
-
|
10
|
+
raise ArgumentError, "no block given" unless block_given?
|
11
|
+
::Enumerator.new do |yielder|
|
12
|
+
previous = nil
|
12
13
|
accumulate = []
|
13
14
|
block = initial_state.nil? ? original_block : Proc.new{|val| original_block.yield(val, initial_state.clone)}
|
14
15
|
each do |val|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
when :_singleton
|
19
|
-
yielder.yield previous, accumulate unless accumulate.empty?
|
20
|
-
yielder.yield key, [val]
|
16
|
+
key = block.yield(val)
|
17
|
+
if key.nil? || (key.is_a?(Symbol) && key.to_s[0,1] == "_")
|
18
|
+
yielder.yield [previous, accumulate] unless accumulate.empty?
|
21
19
|
accumulate = []
|
22
|
-
previous =
|
23
|
-
|
24
|
-
|
25
|
-
|
20
|
+
previous = nil
|
21
|
+
case key
|
22
|
+
when nil, :_separator
|
23
|
+
when :_singleton
|
24
|
+
yielder.yield [key, [val]]
|
25
|
+
else
|
26
|
+
raise RuntimeError, "symbol beginning with an underscore are reserved"
|
27
|
+
end
|
26
28
|
else
|
27
|
-
|
28
|
-
|
29
|
+
if previous.nil? || previous == key
|
30
|
+
accumulate << val
|
31
|
+
else
|
32
|
+
yielder.yield [previous, accumulate] unless accumulate.empty?
|
33
|
+
accumulate = [val]
|
34
|
+
end
|
29
35
|
previous = key
|
30
36
|
end
|
31
37
|
end
|
32
38
|
# what to do in case of a break?
|
33
|
-
yielder.yield previous, accumulate unless accumulate.empty?
|
39
|
+
yielder.yield [previous, accumulate] unless accumulate.empty?
|
34
40
|
end
|
35
|
-
end
|
41
|
+
end unless method_defined? :chunk
|
36
42
|
end
|
data/lib/backports/1.9/method.rb
CHANGED
@@ -79,8 +79,8 @@ unless Kernel.method_defined? :respond_to_missing?
|
|
79
79
|
false
|
80
80
|
end
|
81
81
|
|
82
|
-
def respond_to_with_call_to_respond_to_missing? method
|
83
|
-
respond_to_without_call_to_respond_to_missing?(method) || respond_to_missing?(method)
|
82
|
+
def respond_to_with_call_to_respond_to_missing? method, include_priv=false
|
83
|
+
respond_to_without_call_to_respond_to_missing?(method, include_priv) || respond_to_missing?(method)
|
84
84
|
end
|
85
85
|
Backports.alias_method_chain self, :respond_to?, :call_to_respond_to_missing
|
86
86
|
|
data/test/enumerable_test.rb
CHANGED
@@ -199,7 +199,30 @@ class EnumerableTest < Test::Unit::TestCase
|
|
199
199
|
[1, [3,4,5]],
|
200
200
|
[0, [6,7]]], e.to_a
|
201
201
|
end
|
202
|
+
|
203
|
+
should "should pass two arguments to the block" do
|
204
|
+
e = (1..7).chunk{|i| (i/3) % 2}
|
205
|
+
e.each do |key, val|
|
206
|
+
assert_equal 0, key
|
207
|
+
assert_equal [1,2], val
|
208
|
+
break
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
should "handles nil & :_symbol" do
|
213
|
+
a = [1,1,nil,1,:_separator, 1, :_singleton, 1]
|
214
|
+
e = a.size.times.chunk{|i| a[i]}
|
215
|
+
assert_equal [
|
216
|
+
[1,[0,1]],
|
217
|
+
[1,[3]],
|
218
|
+
[1,[5]],
|
219
|
+
[:_singleton, [6]],
|
220
|
+
[1,[7]]
|
221
|
+
], e.to_a
|
222
|
+
end
|
223
|
+
|
202
224
|
end
|
225
|
+
|
203
226
|
context "given an initial_state argument" do
|
204
227
|
should "give a new copy" do
|
205
228
|
a = []
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: backports
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.10.
|
4
|
+
version: 1.10.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- "Marc-Andr\xC3\xA9 Lafortune"
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-10-03 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|