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.
- data/History.txt +6 -0
- data/Manifest.txt +5 -0
- data/README.txt +65 -0
- data/Rakefile +11 -0
- data/lib/enumerabler.rb +112 -0
- metadata +72 -0
data/History.txt
ADDED
data/Manifest.txt
ADDED
data/README.txt
ADDED
@@ -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
|
data/Rakefile
ADDED
data/lib/enumerabler.rb
ADDED
@@ -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
|
+
|