ruby-stream 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +1 -1
- data/lib/ruby-stream.rb +15 -0
- data/ruby-stream.gemspec +1 -1
- data/spec/ruby-stream_spec.rb +24 -0
- metadata +2 -2
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#ruby-stream
|
2
2
|
|
3
|
-
[![Build Status](https://travis-ci.org/
|
3
|
+
[![Build Status](https://travis-ci.org/seadowg/ruby-stream.png?branch=master)](https://travis-ci.org/seadowg/ruby-stream)
|
4
4
|
|
5
5
|
Lazy stream implementation for Ruby because Enumerators are kinda silly.
|
6
6
|
|
data/lib/ruby-stream.rb
CHANGED
@@ -16,6 +16,15 @@ class Stream
|
|
16
16
|
@tail_block.call
|
17
17
|
end
|
18
18
|
|
19
|
+
def last
|
20
|
+
result = nil
|
21
|
+
self.each do |ele|
|
22
|
+
result = ele
|
23
|
+
end
|
24
|
+
|
25
|
+
result
|
26
|
+
end
|
27
|
+
|
19
28
|
def [](n)
|
20
29
|
if n == 0
|
21
30
|
self.head
|
@@ -75,6 +84,12 @@ class Stream
|
|
75
84
|
end
|
76
85
|
end
|
77
86
|
|
87
|
+
def scan(zero, &block)
|
88
|
+
Stream.new(zero) do
|
89
|
+
tail.scan(block.call(zero, head), &block)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
78
93
|
def filter(&block)
|
79
94
|
if block.call(head)
|
80
95
|
Stream.new(head) do
|
data/ruby-stream.gemspec
CHANGED
data/spec/ruby-stream_spec.rb
CHANGED
@@ -29,6 +29,12 @@ describe Stream do
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
+
describe "#last" do
|
33
|
+
it "returns the last element for finite Stream" do
|
34
|
+
@stream.take(5).last.must_equal 5
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
32
38
|
describe "#[](n)" do
|
33
39
|
it "calculates the nth element of the stream" do
|
34
40
|
@stream[999].must_equal 1000
|
@@ -174,6 +180,24 @@ describe Stream do
|
|
174
180
|
end
|
175
181
|
end
|
176
182
|
|
183
|
+
describe "#scan(func)" do
|
184
|
+
it "returns a new Stream" do
|
185
|
+
@stream.scan(0) { |x, i| i }.kind_of?(Stream).must_equal true
|
186
|
+
end
|
187
|
+
|
188
|
+
it "returns a Stream with a head equivelant to the passed zero" do
|
189
|
+
@stream.scan(-1) { |x, i| i }.head.must_equal -1
|
190
|
+
end
|
191
|
+
|
192
|
+
it "returns a Stream where each element of the tail is the result of feeding the zero (or result) and function through to each of the original elements" do
|
193
|
+
scan = @stream.scan(0) { |x, i| x + i }
|
194
|
+
scan[1].must_equal(1)
|
195
|
+
scan[2].must_equal(3)
|
196
|
+
scan[3].must_equal(6)
|
197
|
+
scan[100].must_equal(5050)
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
177
201
|
describe ".continually(func)" do
|
178
202
|
it "returns a new Stream" do
|
179
203
|
Stream.continually {
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-stream
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
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-03-
|
12
|
+
date: 2013-03-27 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description:
|
15
15
|
email:
|