enumerabler 1.0.0

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.
Files changed (6) hide show
  1. data/History.txt +6 -0
  2. data/Manifest.txt +5 -0
  3. data/README.txt +65 -0
  4. data/Rakefile +11 -0
  5. data/lib/enumerabler.rb +112 -0
  6. metadata +72 -0
@@ -0,0 +1,6 @@
1
+ === 1.0.0 / 2009-11-11
2
+
3
+ * 1 major enhancement
4
+
5
+ * Birthday!
6
+
@@ -0,0 +1,5 @@
1
+ History.txt
2
+ Manifest.txt
3
+ README.txt
4
+ Rakefile
5
+ lib/enumerabler.rb
@@ -0,0 +1,65 @@
1
+ = enumerabler
2
+
3
+ * http://github.com/mame/enumerabler/tree/master
4
+
5
+ == DESCRIPTION:
6
+
7
+ enumerabler enhances Enumerable with methods returning enumerator.
8
+
9
+ == FEATURES/PROBLEMS:
10
+
11
+ - Enumerable#grepper
12
+ - Enumerable#finder_all (alias: all_finder, selector)
13
+ - Enumerable#rejecter
14
+ - Enumerable#collector (alias: mapper)
15
+ - Enumerable#flat_mapper (alias: concat_collector)
16
+ - Enumerable#zipper
17
+ - Enumerable#taker
18
+ - Enumerable#taker_while
19
+ - Enumerable#dropper
20
+ - Enumerable#dropper_while
21
+
22
+ == SYNOPSIS:
23
+
24
+ require "enumerabler"
25
+
26
+ # `select' and `selector' have the almost same behavior.
27
+ ary.select {|x| x.even? }.take(10)
28
+ ary.selector {|x| x.even? }.take(10)
29
+ # While `select' returns an array, `selector' returns an Enumerator
30
+ # corresponding the array. So, the latter requires no intermediate
31
+ # array, which makes the latter more effective than the former.
32
+
33
+
34
+ # Sieve of Eratosthenes
35
+ def sieve(e, &blk)
36
+ yield n = e.first
37
+ sieve(e.rejecter {|x| x % n == 0 }, &blk)
38
+ end
39
+
40
+ sieve(2..(1.0/0.0)) {|x| p x } #=> 2, 3, 5, 7, 11, 13, 17, 19, 23, ...
41
+
42
+
43
+ # Fibonacci numbers
44
+ def fibonacci
45
+ Enumerator.new do |e|
46
+ e << 1
47
+ e << 1
48
+ fibonacci.zip(fibonacci.dropper(1)) {|x, y| e << x + y }
49
+ end
50
+ end
51
+
52
+ fibonacci.each {|x| p x } #=> 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
53
+
54
+ == REQUIREMENTS:
55
+
56
+ None
57
+
58
+ == INSTALL:
59
+
60
+ * gem install enumerabler
61
+
62
+ == LICENSE:
63
+
64
+ Copyright:: Yusuke Endoh <mame@tsg.ne.jp>
65
+ License:: Ruby's
@@ -0,0 +1,11 @@
1
+ # -*- ruby -*-
2
+
3
+ require 'rubygems'
4
+ require 'hoe'
5
+
6
+ Hoe.new('enumerabler', '1.0.0') do |p|
7
+ p.rubyforge_name = "enumerabler"
8
+ p.developer('Yusuke Endoh', 'mame@tsg.ne.jp')
9
+ end
10
+
11
+ # vim: syntax=Ruby
@@ -0,0 +1,112 @@
1
+ module Enumerable
2
+ def grepper(pat, &blk)
3
+ Enumerator.new do |e|
4
+ each do |x|
5
+ e << (blk ? blk[x] : x) if pat === x
6
+ end
7
+ end
8
+ end
9
+
10
+ def finder_all(&blk)
11
+ Enumerator.new do |e|
12
+ each do |x|
13
+ e << x if blk[x]
14
+ end
15
+ end
16
+ end
17
+ alias all_finder finder_all
18
+ alias selector finder_all
19
+
20
+ def rejecter(&blk)
21
+ Enumerator.new do |e|
22
+ each do |x|
23
+ e << x unless blk[x]
24
+ end
25
+ end
26
+ end
27
+
28
+ def collector(&blk)
29
+ Enumerator.new do |e|
30
+ each do |x|
31
+ e << blk[x]
32
+ end
33
+ end
34
+ end
35
+ alias mapper collector
36
+
37
+ def flat_mapper(&blk)
38
+ Enumerator.new do |e|
39
+ each do |a|
40
+ blk[a].each do |x|
41
+ e << x
42
+ end
43
+ end
44
+ end
45
+ end
46
+ alias concat_collector flat_mapper
47
+
48
+ def zipper(*ary, &blk)
49
+ Enumerator.new do |e|
50
+ if ary.all? {|a| a.is_a?(Array) }
51
+ i = 0
52
+ each do |x|
53
+ e << [x] + ary.map {|a| a[i] }
54
+ i += 1
55
+ end
56
+ else
57
+ ary = ary.map! {|a| a.to_enum }
58
+ each do |x|
59
+ a = ary.map.with_index do |a, i|
60
+ next nil if a == nil
61
+ begin
62
+ a.next
63
+ rescue StopIteration
64
+ ary[i] = nil
65
+ end
66
+ end
67
+ e << [x] + a
68
+ end
69
+ end
70
+ end
71
+ end
72
+
73
+ def taker(n)
74
+ Enumerator.new do |e|
75
+ i = 0
76
+ each do |x|
77
+ break if i == n
78
+ e << x
79
+ i += 1
80
+ end
81
+ end
82
+ end
83
+
84
+ def taker_while(&blk)
85
+ Enumerator.new do |e|
86
+ each do |x|
87
+ break unless blk[x]
88
+ e << x
89
+ end
90
+ end
91
+ end
92
+
93
+ def dropper(n)
94
+ Enumerator.new do |e|
95
+ i = 0
96
+ each do |x|
97
+ e << x if i >= n
98
+ i += 1
99
+ end
100
+ end
101
+ end
102
+
103
+ def dropper_while(&blk)
104
+ Enumerator.new do |e|
105
+ flag = false
106
+ each do |x|
107
+ flag = true unless flag || blk[x]
108
+ e << x if flag
109
+ end
110
+ end
111
+ end
112
+ end
metadata ADDED
@@ -0,0 +1,72 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: enumerabler
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Yusuke Endoh
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-11-11 00:00:00 +09:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: hoe
17
+ type: :development
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 2.3.3
24
+ version:
25
+ description: enumerabler enhances Enumerable with methods returning enumerator.
26
+ email:
27
+ - mame@tsg.ne.jp
28
+ executables: []
29
+
30
+ extensions: []
31
+
32
+ extra_rdoc_files:
33
+ - History.txt
34
+ - Manifest.txt
35
+ - README.txt
36
+ files:
37
+ - History.txt
38
+ - Manifest.txt
39
+ - README.txt
40
+ - Rakefile
41
+ - lib/enumerabler.rb
42
+ has_rdoc: true
43
+ homepage: http://github.com/mame/enumerabler/tree/master
44
+ licenses: []
45
+
46
+ post_install_message:
47
+ rdoc_options:
48
+ - --main
49
+ - README.txt
50
+ require_paths:
51
+ - lib
52
+ required_ruby_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: "0"
57
+ version:
58
+ required_rubygems_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: "0"
63
+ version:
64
+ requirements: []
65
+
66
+ rubyforge_project: enumerabler
67
+ rubygems_version: 1.3.5
68
+ signing_key:
69
+ specification_version: 3
70
+ summary: enumerabler enhances Enumerable with methods returning enumerator.
71
+ test_files: []
72
+