lab42_streams 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2df3a1a7c797bd48984548ffd51d883a1cd91528
4
- data.tar.gz: 1db8a911626c365787a3c0eea92679f2881ff1a5
3
+ metadata.gz: d09f7787dde8a103ab385e107f3edfb91cab85cb
4
+ data.tar.gz: 2fcdf2c0ea44003310d0e05d7df2716a4d1d5ff5
5
5
  SHA512:
6
- metadata.gz: 20ee52d46dfb842b5a54dbef370f144a90c6a21e068cfc459d163141bf2ec165392477288f4391e8804a3164c84ee7f68be34ab2133955e24dcd8441e0639b5a
7
- data.tar.gz: 3eb81d594c491c5b17a2b40d48c6c6d01c52d7628b44325cd1f60cf47611c9ee1ff689c4abc56b362913a75aee43b257898687ee401f2d5b7122987b5a5cbabb
6
+ metadata.gz: 3d87e2f2e764b300379b879ce4a2f7716abfab0d6b56d5894e25e13d7d663d8a571c8e9623a092c22de34315624b6398becac64e3ac29cfa9445453f46d6f999
7
+ data.tar.gz: df8e4190c2c63dfb1e238e6c60483af3c5b90385248a0117411f40cd77aed7c6f0a274ec102f89b5943caa5ee641e9dea7ef151fb7c4ae8ed8c7af24830baf0b
data/README.md CHANGED
@@ -4,6 +4,11 @@ Bringing Streams to Ruby
4
4
 
5
5
  An excellent introduction into `Streams` can be found [here](http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/video-lectures/6a-streams-part-1/)
6
6
 
7
+ [![Build Status](https://travis-ci.org/RobertDober/lab42_streams.svg?branch=master)](https://travis-ci.org/RobertDober/lab42_streams)
8
+ [![Code Climate](https://codeclimate.com/github/RobertDober/lab42_streams/badges/gpa.svg)](https://codeclimate.com/github/RobertDober/lab42_streams)
9
+ [![Test Coverage](https://codeclimate.com/github/RobertDober/lab42_streams/badges/coverage.svg)](https://codeclimate.com/github/RobertDober/lab42_streams)
10
+ [![Gem Version](https://badge.fury.io/rb/lab42_streams.svg)](http://badge.fury.io/rb/lab42_streams)
11
+
7
12
 
8
13
 
9
14
  Please see the [QED](http://rubyworks.github.io/qed/) demos [here](https://github.com/RobertDober/lab42_streams/blob/master/demo)
@@ -107,11 +107,11 @@ module Lab42
107
107
  end
108
108
 
109
109
  def filter *args, &blk
110
- __filter__ blk.make_behavior( *args )
110
+ __filter__ self, blk.make_behavior( *args )
111
111
  end
112
112
 
113
113
  def reject *args, &blk
114
- __filter__ blk.make_behavior( *args ).not
114
+ __filter__ self, blk.make_behavior( *args ).not
115
115
  end
116
116
 
117
117
  def flatmap *args, &blk
@@ -244,11 +244,11 @@ module Lab42
244
244
  }
245
245
  end
246
246
 
247
- def __filter__ a_proc
248
- if a_proc.( head )
249
- cons_stream( head ){ tail.__filter__ a_proc }
250
- else
251
- tail.__filter__ a_proc
247
+ def __filter__ stream, a_proc
248
+ loop do
249
+ return stream if stream.empty?
250
+ return cons_stream( stream.head ){ __filter__ stream.tail, a_proc } if a_proc.( stream.head )
251
+ stream = stream.tail
252
252
  end
253
253
  end
254
254
 
@@ -62,28 +62,34 @@ module Kernel
62
62
  if blk
63
63
  cons_stream(*args){ iterate( blk.(*args), &blk ) }
64
64
  else
65
- rest = args.drop 1
66
- if Method === rest.first
67
- cons_stream( args.first ){ iterate( rest.first.(*([args.first] + rest.drop(1))), *rest ) }
68
- else
69
- cons_stream( args.first ){ iterate( sendmsg(*rest).(args.first), *rest ) }
70
- end
65
+ iterate_without_block args
71
66
  end
72
67
  end
73
68
  alias_method :stream_by, :iterate
74
69
 
75
- private
76
- def __merge_streams_by__ beh, streams
77
- # TODO: Get rid of Symbol#to_proc kludge
78
- still_there = streams.reject( &:empty? )
79
- return empty_stream if still_there.empty?
80
-
81
- ordered_heads = still_there
82
- .map( &:head )
83
- .ordered_by( beh )
84
-
85
- cons_stream_n( *ordered_heads ){
86
- __merge_streams_by__ beh, still_there.map( &:tail )
87
- }
70
+ def iterate_without_block args
71
+ rest = args.drop 1
72
+ if Method === rest.first
73
+ cons_stream( args.first ){ iterate( rest.first.(*([args.first] + rest.drop(1))), *rest ) }
74
+ else
75
+ cons_stream( args.first ){ iterate( sendmsg(*rest).(args.first), *rest ) }
76
+ end
88
77
  end
78
+
79
+ private
80
+ def __merge_streams_by__ beh, streams
81
+ still_there = streams.reject( &:empty? )
82
+ return empty_stream if still_there.empty?
83
+ __merge_streams_by_with_present__ beh, still_there, streams
84
+ end
85
+
86
+ def __merge_streams_by_with_present__ beh, still_there, streams
87
+ ordered_heads = still_there
88
+ .map( &:head )
89
+ .ordered_by( beh )
90
+
91
+ cons_stream_n( *ordered_heads ){
92
+ __merge_streams_by__ beh, still_there.map( &:tail )
93
+ }
94
+ end
89
95
  end
@@ -1,5 +1,5 @@
1
1
  module Lab42
2
2
  class Stream
3
- Version = "0.1.2"
3
+ Version = "0.1.3"
4
4
  end # class Stream
5
5
  end # module Lab42
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lab42_streams
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Dober
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-03 00:00:00.000000000 Z
11
+ date: 2015-05-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: forwarder2
@@ -158,7 +158,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
158
158
  requirements:
159
159
  - - ">="
160
160
  - !ruby/object:Gem::Version
161
- version: 2.0.0
161
+ version: 2.1.0
162
162
  required_rubygems_version: !ruby/object:Gem::Requirement
163
163
  requirements:
164
164
  - - ">="
@@ -166,7 +166,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
166
166
  version: '0'
167
167
  requirements: []
168
168
  rubyforge_project:
169
- rubygems_version: 2.2.2
169
+ rubygems_version: 2.4.6
170
170
  signing_key:
171
171
  specification_version: 4
172
172
  summary: Streams for Ruby 2.0