enumerable_lz 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog CHANGED
@@ -2,3 +2,7 @@
2
2
 
3
3
  * 1st release
4
4
 
5
+ == 0.1.1 / 2011-02-23
6
+
7
+ * Improve performance (except for MacRuby)
8
+
data/README.md CHANGED
@@ -60,10 +60,6 @@ These expanded methods are inplemented with fundamental filter and transformatio
60
60
 
61
61
  gem install enumerable_lz
62
62
 
63
- or
64
-
65
- gem install antimon2-enumerable_lz
66
-
67
63
 
68
64
  ## License
69
65
 
@@ -16,11 +16,16 @@ 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
- catch :do_break do
20
- @org_enum.each do |*el|
21
- y.yield *el if matches_filter? *el
19
+ the_enum = (@filter||[]).inject(@org_enum) do |r,f|
20
+ Enumerator.new do |iy|
21
+ r.each do |el|
22
+ iy.yield el if f.call(el)
23
+ end
22
24
  end
23
25
  end
26
+ catch :do_break do
27
+ the_enum.each {|el| y.yield el}
28
+ end
24
29
  end
25
30
  filter! the_filter if the_filter
26
31
  end
@@ -28,9 +33,9 @@ module Enumerable
28
33
  def filter! pattern=nil, &block
29
34
  @filter||=[]
30
35
  if pattern.is_a? Array
31
- @filter.push(*pattern)
36
+ pattern.each{|el| @filter << conv_proc(el)}
32
37
  else
33
- @filter<<(pattern || block)
38
+ @filter << conv_proc(pattern || block)
34
39
  end
35
40
  self
36
41
  end
@@ -49,18 +54,14 @@ module Enumerable
49
54
  end
50
55
 
51
56
  private
52
- def matches_filter? obj, *others
53
- return true if @filter.nil?
54
- args = [obj, *others]
55
- @filter.all? do |filter|
56
- case filter
57
- when nil
58
- true
59
- when Proc
60
- filter[*args]
61
- else
62
- filter===obj
63
- end
57
+ def conv_proc pattern
58
+ case pattern
59
+ when nil
60
+ Proc.new{true}
61
+ when Proc
62
+ pattern
63
+ else
64
+ pattern.respond_to?(:to_proc) ? pattern.to_proc : Proc.new{|el|pattern===el}
64
65
  end
65
66
  end
66
67
  end
@@ -9,7 +9,6 @@ module Enumerable
9
9
  end
10
10
 
11
11
  class Filter < Enumerator
12
- require 'generator'
13
12
  def initialize obj, *args
14
13
  the_filter = args.shift
15
14
  init_block, the_filter = [the_filter, args.shift] unless args.empty?
@@ -20,11 +19,12 @@ module Enumerable
20
19
 
21
20
  def each &block
22
21
  return self unless block_given?
22
+ @init_block.call unless @init_block.nil?
23
+ the_enum = (@filter||[]).inject(@org_enum) do |r,f|
24
+ CompliedFilter.new r, f
25
+ end
23
26
  catch :do_break do
24
- @init_block.call unless @init_block.nil?
25
- @org_enum.each do |*el|
26
- block.call(*el) if matches_filter? *el
27
- end
27
+ the_enum.each{|el| block.call(el)}
28
28
  end
29
29
  self
30
30
  end
@@ -32,9 +32,9 @@ module Enumerable
32
32
  def filter! pattern=nil, &block
33
33
  @filter||=[]
34
34
  if pattern.is_a? Array
35
- @filter.push(*pattern)
35
+ pattern.each{|el| @filter << conv_proc(el)}
36
36
  else
37
- @filter<<(pattern || block)
37
+ @filter << conv_proc(pattern || block)
38
38
  end
39
39
  self
40
40
  end
@@ -53,17 +53,26 @@ module Enumerable
53
53
  end
54
54
 
55
55
  private
56
- def matches_filter? obj, *others
57
- return true if @filter.nil?
58
- args = [obj, *others]
59
- @filter.all? do |filter|
60
- case filter
61
- when nil
62
- true
63
- when Proc
64
- filter[*args]
65
- else
66
- filter===obj
56
+ def conv_proc pattern
57
+ case pattern
58
+ when nil
59
+ Proc.new{true}
60
+ when Proc
61
+ pattern
62
+ else
63
+ pattern.respond_to?(:to_proc) ? pattern.to_proc : Proc.new{|el|pattern===el}
64
+ end
65
+ 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)
67
76
  end
68
77
  end
69
78
  end
data/lib/enumerable_lz.rb CHANGED
@@ -13,6 +13,6 @@ end
13
13
 
14
14
  module Enumerable
15
15
  module EnumerableLz
16
- VERSION = "0.1.0"
16
+ VERSION = "0.1.1"
17
17
  end
18
18
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 0
9
- version: 0.1.0
8
+ - 1
9
+ version: 0.1.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - antimon2
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-01-23 00:00:00 +09:00
17
+ date: 2011-02-23 00:00:00 +09:00
18
18
  default_executable:
19
19
  dependencies: []
20
20