lab42_streams 0.1.1 → 0.1.2

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