lab42_streams 0.1.2 → 0.1.3

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.
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