lab42_streams 0.1.1 → 0.1.2

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: 932f01cab1874c1a2f68148df75733d5ab33561b
4
- data.tar.gz: 9ec01ace503ab4739c4070cfb9eaacf8ce399f4f
3
+ metadata.gz: 2df3a1a7c797bd48984548ffd51d883a1cd91528
4
+ data.tar.gz: 1db8a911626c365787a3c0eea92679f2881ff1a5
5
5
  SHA512:
6
- metadata.gz: f8e99130eac0f83c13737636ce55024f13d41e11698ee62370c493f9393b7a6ec78b3d9b047419ffc0b57320c5dfaa36c678b1ce69dcc85a1e815ba9c9c550a5
7
- data.tar.gz: fd06621f258ec2d9c1f95b7ec1d8cac37c25d18f2b22d21a9e441dee6831efae36624b26432d8841697185f56ebc7a5712fb205ea91c9e292c5ed1f29257d1e6
6
+ metadata.gz: 20ee52d46dfb842b5a54dbef370f144a90c6a21e068cfc459d163141bf2ec165392477288f4391e8804a3164c84ee7f68be34ab2133955e24dcd8441e0639b5a
7
+ data.tar.gz: 3eb81d594c491c5b17a2b40d48c6c6d01c52d7628b44325cd1f60cf47611c9ee1ff689c4abc56b362913a75aee43b257898687ee401f2d5b7122987b5a5cbabb
@@ -0,0 +1,17 @@
1
+ module Enumerable
2
+ def ordered_by *beh, &blk
3
+ raise ArgumentError, 'need exactly one of block and behavior' if !blk == beh.empty?
4
+
5
+ beh = blk || (Symbol === beh.first ? sendmsg( *beh ) : beh.first )
6
+
7
+
8
+ sort do | a, b |
9
+ a == b ? 0 : (
10
+ beh.(a, b) ? -1 : 1
11
+ )
12
+ end
13
+ end
14
+
15
+ def to_stream; finite_stream self end
16
+ end
17
+
@@ -1,6 +1,4 @@
1
- module Enumerable
2
- def to_stream; finite_stream self end
3
- end
1
+ require_relative 'core/enumerable'
4
2
 
5
3
  module Lab42
6
4
  class Stream
@@ -14,6 +14,13 @@ module Kernel
14
14
  Lab42::Stream.new head, tail
15
15
  end
16
16
 
17
+ def cons_stream_n first_head, *more_heads, &tail
18
+ return cons_stream( first_head, &tail ) if more_heads.empty?
19
+ return cons_stream( first_head ){
20
+ cons_stream_n( *more_heads, &tail )
21
+ }
22
+ end
23
+
17
24
  def const_stream const
18
25
  c = cons_stream( const ){ c }
19
26
  end
@@ -46,6 +53,11 @@ module Kernel
46
53
  end
47
54
  end
48
55
 
56
+ def merge_streams_by *streams_and_beh, &blk
57
+ beh = blk || streams_and_beh.pop
58
+ __merge_streams_by__ beh, streams_and_beh
59
+ end
60
+
49
61
  def iterate *args, &blk
50
62
  if blk
51
63
  cons_stream(*args){ iterate( blk.(*args), &blk ) }
@@ -59,4 +71,19 @@ module Kernel
59
71
  end
60
72
  end
61
73
  alias_method :stream_by, :iterate
74
+
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
+ }
88
+ end
62
89
  end
@@ -18,7 +18,8 @@ module Lab42
18
18
  end
19
19
  end
20
20
 
21
- def with_index start=0
21
+ def with_index start={}
22
+ start = Hash === start ? start.fetch( :from, 0 ) : start
22
23
  zip_as_ary iterate( start, :succ )
23
24
  end
24
25
  end # module Utility
@@ -1,5 +1,5 @@
1
1
  module Lab42
2
2
  class Stream
3
- Version = "0.1.1"
3
+ Version = "0.1.2"
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.1
4
+ version: 0.1.2
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-07-11 00:00:00.000000000 Z
11
+ date: 2014-08-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: forwarder2
@@ -16,42 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.2.0
19
+ version: '0.2'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.2.0
26
+ version: '0.2'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: lab42_core
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.0.5
33
+ version: '0.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.0.5
40
+ version: '0.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: pry
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.9.12
47
+ version: '0.9'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 0.9.12
54
+ version: '0.9'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: pry-nav
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 2.14.0
75
+ version: '2.14'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 2.14.0
82
+ version: '2.14'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: qed
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -134,6 +134,7 @@ files:
134
134
  - lib/lab42/stream/array.rb
135
135
  - lib/lab42/stream/auto_import.rb
136
136
  - lib/lab42/stream/class_methods.rb
137
+ - lib/lab42/stream/core/enumerable.rb
137
138
  - lib/lab42/stream/delayed.rb
138
139
  - lib/lab42/stream/empty.rb
139
140
  - lib/lab42/stream/empty/enumerable.rb