enumerable_lz 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +4 -0
- data/lib/enumerable_lz/filter.rb +13 -11
- data/lib/enumerable_lz/filter_18.rb +5 -16
- data/lib/enumerable_lz/filter_mrb.rb +16 -16
- data/lib/enumerable_lz/transform.rb +8 -14
- data/lib/enumerable_lz/transform_18.rb +8 -8
- data/lib/enumerable_lz/transform_mrb.rb +8 -8
- data/lib/enumerable_lz.rb +1 -1
- metadata +3 -13
data/ChangeLog
CHANGED
data/lib/enumerable_lz/filter.rb
CHANGED
@@ -16,15 +16,13 @@ module Enumerable
|
|
16
16
|
@init_block = init_block unless init_block.nil?
|
17
17
|
super() do |y|
|
18
18
|
@init_block.call unless @init_block.nil?
|
19
|
-
|
20
|
-
|
21
|
-
r.each do |el|
|
22
|
-
iy.yield el if f.call(el)
|
23
|
-
end
|
24
|
-
end
|
19
|
+
compiled_filter = (@filter||[Proc.new{true}]).inject do |r,f|
|
20
|
+
Proc.new{|el| r===el && f===el}
|
25
21
|
end
|
26
22
|
catch :do_break do
|
27
|
-
|
23
|
+
@org_enum.each do |el|
|
24
|
+
y.yield el if compiled_filter===el
|
25
|
+
end
|
28
26
|
end
|
29
27
|
end
|
30
28
|
filter! the_filter if the_filter
|
@@ -58,11 +56,15 @@ module Enumerable
|
|
58
56
|
case pattern
|
59
57
|
when nil
|
60
58
|
Proc.new{true}
|
61
|
-
|
62
|
-
pattern
|
63
|
-
else
|
64
|
-
pattern.respond_to?(:to_proc) ? pattern.to_proc : Proc.new{|el|pattern===el}
|
59
|
+
else # Proc#=== is equal to Proc#call on Ruby1.9.x
|
60
|
+
pattern.respond_to?(:to_proc) ? pattern.to_proc : pattern
|
65
61
|
end
|
66
62
|
end
|
67
63
|
end
|
64
|
+
end
|
65
|
+
#against the Bug on JRuby <1.6.2
|
66
|
+
if !(Proc.new{true}===true)
|
67
|
+
class Proc
|
68
|
+
alias :=== :call
|
69
|
+
end
|
68
70
|
end
|
@@ -20,11 +20,13 @@ module Enumerable
|
|
20
20
|
def each &block
|
21
21
|
return self unless block_given?
|
22
22
|
@init_block.call unless @init_block.nil?
|
23
|
-
|
24
|
-
|
23
|
+
compiled_filter = (@filter||[Proc.new{true}]).inject do |r,f|
|
24
|
+
Proc.new{|el| r[el] && f[el]}
|
25
25
|
end
|
26
26
|
catch :do_break do
|
27
|
-
|
27
|
+
@org_enum.each do |el|
|
28
|
+
block.call(el) if compiled_filter[el]
|
29
|
+
end
|
28
30
|
end
|
29
31
|
self
|
30
32
|
end
|
@@ -63,18 +65,5 @@ module Enumerable
|
|
63
65
|
pattern.respond_to?(:to_proc) ? pattern.to_proc : Proc.new{|el|pattern===el}
|
64
66
|
end
|
65
67
|
end
|
66
|
-
|
67
|
-
class CompliedFilter
|
68
|
-
def initialize org_enum, filter
|
69
|
-
@org_enum = org_enum
|
70
|
-
@filter = filter
|
71
|
-
end
|
72
|
-
|
73
|
-
def each &block
|
74
|
-
@org_enum.each do |el|
|
75
|
-
block.call(el) if @filter.call(el)
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
68
|
end
|
80
69
|
end
|
@@ -19,9 +19,10 @@ module Enumerable
|
|
19
19
|
define_method :each do
|
20
20
|
return outer unless block_given?
|
21
21
|
init_block.call unless init_block.nil?
|
22
|
+
compiled_filter = outer.__send__(:compile_filter)
|
22
23
|
catch :do_break do
|
23
|
-
obj.each do
|
24
|
-
yield
|
24
|
+
obj.each do |el|
|
25
|
+
yield el if compiled_filter===el
|
25
26
|
end
|
26
27
|
end
|
27
28
|
outer
|
@@ -33,9 +34,9 @@ module Enumerable
|
|
33
34
|
def filter! pattern=nil, &block
|
34
35
|
@filter||=[]
|
35
36
|
if pattern.is_a? Array
|
36
|
-
@filter
|
37
|
+
pattern.each{|el| @filter << conv_proc(el)}
|
37
38
|
else
|
38
|
-
@filter<<(pattern || block)
|
39
|
+
@filter<<conv_proc(pattern || block)
|
39
40
|
end
|
40
41
|
self
|
41
42
|
end
|
@@ -54,18 +55,17 @@ module Enumerable
|
|
54
55
|
end
|
55
56
|
|
56
57
|
private
|
57
|
-
def
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
end
|
58
|
+
def conv_proc pattern
|
59
|
+
case pattern
|
60
|
+
when nil
|
61
|
+
Proc.new{true}
|
62
|
+
else # Proc#=== is equal to Proc#call on Ruby1.9.x
|
63
|
+
pattern.respond_to?(:to_proc) ? pattern.to_proc : pattern
|
64
|
+
end
|
65
|
+
end
|
66
|
+
def compile_filter
|
67
|
+
@filter.inject do |r,f|
|
68
|
+
Proc.new{|el| r===el && f===el}
|
69
69
|
end
|
70
70
|
end
|
71
71
|
end
|
@@ -8,8 +8,9 @@ module Enumerable
|
|
8
8
|
def initialize obj, &transformer
|
9
9
|
@org_enum = obj
|
10
10
|
super() do |y|
|
11
|
-
|
12
|
-
|
11
|
+
the_transformer = compile_transformer
|
12
|
+
obj.each do |el|
|
13
|
+
y << the_transformer[el]
|
13
14
|
end
|
14
15
|
end
|
15
16
|
transform! &transformer if block_given?
|
@@ -31,19 +32,12 @@ module Enumerable
|
|
31
32
|
cp.transform! &block
|
32
33
|
end
|
33
34
|
|
34
|
-
# def clone
|
35
|
-
# cp = super
|
36
|
-
# cp.instance_eval { @transformer = @transformer.nil? ? [] : @transformer.clone }
|
37
|
-
# cp
|
38
|
-
# end
|
39
|
-
|
40
35
|
private
|
41
|
-
def
|
42
|
-
|
43
|
-
@transformer.
|
44
|
-
|
45
|
-
end
|
46
|
-
result
|
36
|
+
def compile_transformer
|
37
|
+
return Proc.new{|a|a} if @transformer.nil? || @transformer.size==0
|
38
|
+
@transformer.inject do |r,f|
|
39
|
+
Proc.new{|el|f[r[el]]}
|
40
|
+
end
|
47
41
|
end
|
48
42
|
end
|
49
43
|
end
|
@@ -12,8 +12,9 @@ module Enumerable
|
|
12
12
|
|
13
13
|
def each &block
|
14
14
|
return self unless block_given?
|
15
|
-
|
16
|
-
|
15
|
+
the_transformer = compile_transformer
|
16
|
+
@org_enum.each do |el|
|
17
|
+
block.call the_transformer[el]
|
17
18
|
end
|
18
19
|
self
|
19
20
|
end
|
@@ -35,12 +36,11 @@ module Enumerable
|
|
35
36
|
end
|
36
37
|
|
37
38
|
private
|
38
|
-
def
|
39
|
-
|
40
|
-
@transformer.
|
41
|
-
|
42
|
-
end
|
43
|
-
result
|
39
|
+
def compile_transformer
|
40
|
+
return Proc.new{|a|a} if @transformer.nil? || @transformer.size==0
|
41
|
+
@transformer.inject do |r,f|
|
42
|
+
Proc.new{|el|f[r[el]]}
|
43
|
+
end
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|
@@ -11,8 +11,9 @@ module Enumerable
|
|
11
11
|
super Class.new {
|
12
12
|
define_method :each do
|
13
13
|
return outer unless block_given?
|
14
|
-
|
15
|
-
|
14
|
+
the_transformer = outer.__send__(:compile_transformer)
|
15
|
+
obj.each do |el|
|
16
|
+
yield the_transformer[el]
|
16
17
|
end
|
17
18
|
end
|
18
19
|
}.new
|
@@ -36,12 +37,11 @@ module Enumerable
|
|
36
37
|
end
|
37
38
|
|
38
39
|
private
|
39
|
-
def
|
40
|
-
|
41
|
-
@transformer.
|
42
|
-
|
43
|
-
end
|
44
|
-
result
|
40
|
+
def compile_transformer
|
41
|
+
return Proc.new{|a|a} if @transformer.nil? || @transformer.size==0
|
42
|
+
@transformer.inject do |r,f|
|
43
|
+
Proc.new{|el|f[r[el]]}
|
44
|
+
end
|
45
45
|
end
|
46
46
|
end
|
47
47
|
end
|
data/lib/enumerable_lz.rb
CHANGED
metadata
CHANGED
@@ -1,12 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: enumerable_lz
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 1
|
8
|
-
- 1
|
9
|
-
version: 0.1.1
|
4
|
+
prerelease:
|
5
|
+
version: 0.1.2
|
10
6
|
platform: ruby
|
11
7
|
authors:
|
12
8
|
- antimon2
|
@@ -56,23 +52,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
56
52
|
requirements:
|
57
53
|
- - ">="
|
58
54
|
- !ruby/object:Gem::Version
|
59
|
-
segments:
|
60
|
-
- 1
|
61
|
-
- 8
|
62
|
-
- 7
|
63
55
|
version: 1.8.7
|
64
56
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
65
57
|
none: false
|
66
58
|
requirements:
|
67
59
|
- - ">="
|
68
60
|
- !ruby/object:Gem::Version
|
69
|
-
segments:
|
70
|
-
- 0
|
71
61
|
version: "0"
|
72
62
|
requirements: []
|
73
63
|
|
74
64
|
rubyforge_project: enumerable_lz
|
75
|
-
rubygems_version: 1.3
|
65
|
+
rubygems_version: 1.5.3
|
76
66
|
signing_key:
|
77
67
|
specification_version: 3
|
78
68
|
summary: Add Enumerable#filter, Enumerable#transform and some equivalent methods on Enumerable with suffix '_lz'.
|