lazily 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -134,10 +134,6 @@ Q: Why use Lazily, when Ruby 2.x has built-in lazy enumerations?
134
134
  - Features: Lazily provides some extra features not present in Ruby 2.0, such as multi-threaded lazy enumeration.
135
135
  - Speed: Despite being implemented in pure Ruby, `Enumerable#lazily` actually performs a little better than `Enumerable#lazy`.
136
136
 
137
- Q: When would you use built-in Ruby lazy enumerations, rather than Lazily?
138
-
139
- - I wouldn't.
140
-
141
137
  ### Others
142
138
 
143
139
  See also:
@@ -10,9 +10,9 @@ module Lazily
10
10
  # @see ::Enumerable#collect
11
11
  #
12
12
  def collect(&transformation)
13
- filter("collect") do |output, done|
13
+ filter("collect") do |yielder|
14
14
  each do |element|
15
- output.call yield(element)
15
+ yielder.call yield(element)
16
16
  end
17
17
  end
18
18
  end
@@ -26,9 +26,9 @@ module Lazily
26
26
  # @see ::Enumerable#select
27
27
  #
28
28
  def select(&predicate)
29
- filter("select") do |output, done|
29
+ filter("select") do |yielder|
30
30
  each do |element|
31
- output.call(element) if yield(element)
31
+ yielder.call(element) if yield(element)
32
32
  end
33
33
  end
34
34
  end
@@ -44,9 +44,9 @@ module Lazily
44
44
  # @see ::Enumerable#reject
45
45
  #
46
46
  def reject
47
- filter("reject") do |output, done|
47
+ filter("reject") do |yielder|
48
48
  each do |element|
49
- output.call(element) unless yield(element)
49
+ yielder.call(element) unless yield(element)
50
50
  end
51
51
  end
52
52
  end
@@ -61,7 +61,7 @@ module Lazily
61
61
  # @see ::Enumerable#uniq
62
62
  #
63
63
  def uniq
64
- filter("uniq") do |output, done|
64
+ filter("uniq") do |yielder|
65
65
  seen = Set.new
66
66
  each do |element|
67
67
  key = if block_given?
@@ -69,7 +69,7 @@ module Lazily
69
69
  else
70
70
  element
71
71
  end
72
- output.call(element) if seen.add?(key)
72
+ yielder.call(element) if seen.add?(key)
73
73
  end
74
74
  end
75
75
  end
@@ -82,11 +82,11 @@ module Lazily
82
82
  # @see ::Enumerable#take
83
83
  #
84
84
  def take(n)
85
- filter("take") do |output, done|
85
+ filter("take") do |yielder, all_done|
86
86
  if n > 0
87
87
  each_with_index do |element, index|
88
- output.call(element)
89
- throw done if index + 1 == n
88
+ yielder.call(element)
89
+ throw all_done if index + 1 == n
90
90
  end
91
91
  end
92
92
  end
@@ -99,10 +99,10 @@ module Lazily
99
99
  # @see ::Enumerable#take_while
100
100
  #
101
101
  def take_while(&predicate)
102
- filter("take_while") do |output, done|
102
+ filter("take_while") do |yielder, all_done|
103
103
  each do |element|
104
- throw done unless yield(element)
105
- output.call(element)
104
+ throw all_done unless yield(element)
105
+ yielder.call(element)
106
106
  end
107
107
  end
108
108
  end
@@ -115,10 +115,10 @@ module Lazily
115
115
  # @see ::Enumerable#drop
116
116
  #
117
117
  def drop(n)
118
- filter("drop") do |output, done|
118
+ filter("drop") do |yielder|
119
119
  each_with_index do |element, index|
120
120
  next if index < n
121
- output.call(element)
121
+ yielder.call(element)
122
122
  end
123
123
  end
124
124
  end
@@ -130,11 +130,11 @@ module Lazily
130
130
  # @see ::Enumerable#drop_while
131
131
  #
132
132
  def drop_while(&predicate)
133
- filter("drop_while") do |output, done|
133
+ filter("drop_while") do |yielder|
134
134
  take = false
135
135
  each do |element|
136
136
  take ||= !yield(element)
137
- output.call(element) if take
137
+ yielder.call(element) if take
138
138
  end
139
139
  end
140
140
  end
@@ -146,7 +146,7 @@ module Lazily
146
146
  # @see ::Enumerable#grep
147
147
  #
148
148
  def grep(pattern)
149
- filter("grep") do |output, done|
149
+ filter("grep") do |yielder|
150
150
  each do |element|
151
151
  if pattern === element
152
152
  result = if block_given?
@@ -154,7 +154,7 @@ module Lazily
154
154
  else
155
155
  element
156
156
  end
157
- output.call(result)
157
+ yielder.call(result)
158
158
  end
159
159
  end
160
160
  end
@@ -167,12 +167,12 @@ module Lazily
167
167
  # @see ::Array#flatten
168
168
  #
169
169
  def flatten(level = 1)
170
- filter("flatten") do |output, done|
170
+ filter("flatten") do |yielder|
171
171
  each do |element|
172
172
  if level > 0 && element.respond_to?(:each)
173
- element.flatten(level - 1).each(&output)
173
+ element.flatten(level - 1).each(&yielder)
174
174
  else
175
- output.call(element)
175
+ yielder.call(element)
176
176
  end
177
177
  end
178
178
  end
@@ -191,9 +191,9 @@ module Lazily
191
191
  # @see ::Array#compact
192
192
  #
193
193
  def compact
194
- filter("compact") do |output, done|
194
+ filter("compact") do |yielder|
195
195
  each do |element|
196
- output.call(element) unless element.nil?
196
+ yielder.call(element) unless element.nil?
197
197
  end
198
198
  end
199
199
  end
@@ -239,11 +239,16 @@ module Lazily
239
239
  end
240
240
 
241
241
  def each
242
- done = "done-#{object_id}".to_sym
243
242
  return to_enum unless block_given?
244
243
  yielder = proc { |x| yield x }
245
- catch done do
246
- @generator.call(yielder, done)
244
+ if @generator.arity == 2
245
+ # we might want to terminate early
246
+ all_done = "Lazily::loop-done-#{object_id}".to_sym
247
+ catch all_done do
248
+ @generator.call(yielder, all_done)
249
+ end
250
+ else
251
+ @generator.call(yielder)
247
252
  end
248
253
  end
249
254
 
@@ -1,3 +1,3 @@
1
1
  module Lazily
2
- VERSION = "0.1.1".freeze
2
+ VERSION = "0.1.2".freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lazily
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-05-16 00:00:00.000000000 Z
12
+ date: 2013-05-24 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: ! " Lazily implements \"lazy\" versions of many Enumerable methods,\n
15
15
  \ allowing streamed processing of large (or even infinite) collections.\n\n It's
@@ -63,7 +63,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
63
63
  version: '0'
64
64
  segments:
65
65
  - 0
66
- hash: -3464940325120125091
66
+ hash: 1657751678053576424
67
67
  required_rubygems_version: !ruby/object:Gem::Requirement
68
68
  none: false
69
69
  requirements:
@@ -72,7 +72,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
72
72
  version: '0'
73
73
  segments:
74
74
  - 0
75
- hash: -3464940325120125091
75
+ hash: 1657751678053576424
76
76
  requirements: []
77
77
  rubyforge_project:
78
78
  rubygems_version: 1.8.23