totally_lazy 0.0.14 → 0.0.15
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 +4 -4
- data/README.md +2 -2
- data/VERSION +1 -1
- data/lib/option.rb +34 -18
- data/lib/pair.rb +1 -1
- data/lib/sequence.rb +4 -5
- data/spec/option_spec.rb +41 -27
- data/spec/sequence_spec.rb +3 -2
- data/totally_lazy.gemspec +4 -4
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 76f6d260b177c8aa5b64578b0091377494ce839b
|
4
|
+
data.tar.gz: 312fa25893fa88b9d4cdc32222da221c57151e1d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b70457704551cdc3892eb34f9a02fb089d5fa4c0f39e2d5f10705536db1cf03f3bd2a080b52e31ef02ab9d2413342764a61fba413da77fdb86cee6b7de2e4370
|
7
|
+
data.tar.gz: 518b3ef257b1825686154c90e6a541ef207012fba8443b2fd18b42805c3be849891aba64924a885126a388b47c343cc565b268dd2a7932053696882c568b217f
|
data/README.md
CHANGED
@@ -55,8 +55,8 @@ sequence(pair(1, 2), pair(3, 4)).filter(where(key:odd)) # lazily returns 1,3
|
|
55
55
|
|
56
56
|
#### Sequences
|
57
57
|
|
58
|
-
* sequence
|
59
|
-
* sequence1
|
58
|
+
* sequence modifies what is passed if it's a single item - e.g. sequence1([1,2,3]).head returns the first element of 1
|
59
|
+
* sequence1 wraps whatever is passed without modification - e.g. sequence([1,2,3]).head returns the array [1,2,3]
|
60
60
|
|
61
61
|
#### Generators
|
62
62
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.15
|
data/lib/option.rb
CHANGED
@@ -67,6 +67,10 @@ module Option
|
|
67
67
|
sequence(get)
|
68
68
|
end
|
69
69
|
|
70
|
+
def to_seq1
|
71
|
+
sequence1(get)
|
72
|
+
end
|
73
|
+
|
70
74
|
def contains(item)
|
71
75
|
value == item
|
72
76
|
end
|
@@ -79,47 +83,51 @@ module Option
|
|
79
83
|
sequence(value) << target_sequence
|
80
84
|
end
|
81
85
|
|
86
|
+
def each(&block)
|
87
|
+
@content.each(&block)
|
88
|
+
end
|
89
|
+
|
82
90
|
def map(predicate=nil, &block)
|
83
|
-
|
91
|
+
sequence(@content).map(predicate, &block)
|
84
92
|
end
|
85
93
|
|
86
94
|
alias collect map
|
87
95
|
|
88
96
|
def select(predicate=nil, &block)
|
89
|
-
|
97
|
+
sequence(@content).select(predicate, &block)
|
90
98
|
end
|
91
99
|
|
92
100
|
alias find_all select
|
93
101
|
alias filter select
|
94
102
|
|
95
103
|
def reject(predicate=nil, &block)
|
96
|
-
|
104
|
+
sequence(@content).reject(predicate, &block)
|
97
105
|
end
|
98
106
|
|
99
107
|
alias unfilter reject
|
100
108
|
|
101
109
|
def grep(pattern)
|
102
|
-
|
110
|
+
sequence(@content).grep(pattern)
|
103
111
|
end
|
104
112
|
|
105
113
|
def drop(n)
|
106
|
-
|
114
|
+
sequence(@content).drop(n)
|
107
115
|
end
|
108
116
|
|
109
117
|
def drop_while(&block)
|
110
|
-
|
118
|
+
@content.drop_while(&block)
|
111
119
|
end
|
112
120
|
|
113
121
|
def take(n)
|
114
|
-
|
122
|
+
sequence(@content).take(n)
|
115
123
|
end
|
116
124
|
|
117
125
|
def take_while(&block)
|
118
|
-
|
126
|
+
sequence(@content).take_while(&block)
|
119
127
|
end
|
120
128
|
|
121
129
|
def flat_map(&block)
|
122
|
-
|
130
|
+
sequence(@content).flat_map(&block)
|
123
131
|
end
|
124
132
|
|
125
133
|
alias collect_concat flat_map
|
@@ -201,6 +209,14 @@ module Option
|
|
201
209
|
empty
|
202
210
|
end
|
203
211
|
|
212
|
+
def to_seq1
|
213
|
+
empty
|
214
|
+
end
|
215
|
+
|
216
|
+
def each(&block)
|
217
|
+
empty
|
218
|
+
end
|
219
|
+
|
204
220
|
def contains(item)
|
205
221
|
false
|
206
222
|
end
|
@@ -217,46 +233,46 @@ module Option
|
|
217
233
|
alias << join
|
218
234
|
|
219
235
|
def map(predicate=nil, &block)
|
220
|
-
|
236
|
+
empty
|
221
237
|
end
|
222
238
|
|
223
239
|
alias collect map
|
224
240
|
|
225
241
|
def select(predicate=nil, &block)
|
226
|
-
|
242
|
+
empty
|
227
243
|
end
|
228
244
|
|
229
245
|
alias find_all select
|
230
246
|
alias filter select
|
231
247
|
|
232
248
|
def reject(predicate=nil, &block)
|
233
|
-
|
249
|
+
empty
|
234
250
|
end
|
235
251
|
|
236
252
|
alias unfilter reject
|
237
253
|
|
238
254
|
def grep(pattern)
|
239
|
-
|
255
|
+
empty
|
240
256
|
end
|
241
257
|
|
242
258
|
def drop(n)
|
243
|
-
|
259
|
+
empty
|
244
260
|
end
|
245
261
|
|
246
262
|
def drop_while(&block)
|
247
|
-
|
263
|
+
empty
|
248
264
|
end
|
249
265
|
|
250
266
|
def take(n)
|
251
|
-
|
267
|
+
empty
|
252
268
|
end
|
253
269
|
|
254
270
|
def take_while(&block)
|
255
|
-
|
271
|
+
empty
|
256
272
|
end
|
257
273
|
|
258
274
|
def flat_map(&block)
|
259
|
-
|
275
|
+
empty
|
260
276
|
end
|
261
277
|
|
262
278
|
alias collect_concat flat_map
|
data/lib/pair.rb
CHANGED
data/lib/sequence.rb
CHANGED
@@ -44,7 +44,7 @@ module Sequences
|
|
44
44
|
# end
|
45
45
|
# end
|
46
46
|
|
47
|
-
def
|
47
|
+
def sequence(*items)
|
48
48
|
if items.size == 1
|
49
49
|
if [Range, Hash, Array, Set].include?(items.first.class)
|
50
50
|
Sequence.new(items.first)
|
@@ -57,9 +57,8 @@ module Sequences
|
|
57
57
|
Sequence.new(items)
|
58
58
|
end
|
59
59
|
end
|
60
|
-
module_function :sequence1
|
61
60
|
|
62
|
-
def
|
61
|
+
def sequence1(*items)
|
63
62
|
if items.first.nil?
|
64
63
|
empty
|
65
64
|
else
|
@@ -67,7 +66,6 @@ module Sequences
|
|
67
66
|
end
|
68
67
|
end
|
69
68
|
|
70
|
-
|
71
69
|
# Creates an empty sequence
|
72
70
|
#
|
73
71
|
# == Returns:
|
@@ -82,7 +80,7 @@ module Sequences
|
|
82
80
|
end
|
83
81
|
|
84
82
|
def deserialize(data)
|
85
|
-
|
83
|
+
sequence(data).deserialize
|
86
84
|
end
|
87
85
|
|
88
86
|
class Sequence < Enumerator
|
@@ -463,6 +461,7 @@ module Sequences
|
|
463
461
|
def all
|
464
462
|
to_a.flatten
|
465
463
|
end
|
464
|
+
alias flatten all
|
466
465
|
|
467
466
|
def sorting_by(*attr, &block)
|
468
467
|
if attr.empty?
|
data/spec/option_spec.rb
CHANGED
@@ -29,6 +29,15 @@ describe 'Option' do
|
|
29
29
|
pass
|
30
30
|
end
|
31
31
|
|
32
|
+
it 'should support each' do
|
33
|
+
result = []
|
34
|
+
option(sequence(1,2,3)).each{|i| result << i+1}
|
35
|
+
expect(result).to eq([2,3,4])
|
36
|
+
result = []
|
37
|
+
option(none).each{|i| result << i+1}
|
38
|
+
expect(result).to eq([])
|
39
|
+
end
|
40
|
+
|
32
41
|
it 'should get or else' do
|
33
42
|
expect(option(1).get_or_else(2)).to eq(1)
|
34
43
|
expect(option(empty).get_or_else(2)).to eq(2)
|
@@ -59,6 +68,11 @@ describe 'Option' do
|
|
59
68
|
expect(none.to_seq).to eq(empty)
|
60
69
|
end
|
61
70
|
|
71
|
+
it 'should convert to sequence1' do
|
72
|
+
expect(option([1,2,3]).to_seq1).to eq(sequence1([1,2,3]))
|
73
|
+
expect(none.to_seq1).to eq(empty)
|
74
|
+
end
|
75
|
+
|
62
76
|
it 'should raise empty exception when calling get on none' do
|
63
77
|
expect { option(empty).get }.to raise_error(NoSuchElementException)
|
64
78
|
end
|
@@ -113,57 +127,57 @@ describe 'Option' do
|
|
113
127
|
end
|
114
128
|
|
115
129
|
it 'should support select' do
|
116
|
-
expect(option(2).filter(even)).to eq(
|
117
|
-
expect(option(2).find_all(even)).to eq(
|
118
|
-
expect(option(2).select(even)).to eq(
|
119
|
-
expect(option(2).filter(&:even?)).to eq(
|
120
|
-
expect(option(2).filter{|v| v == 2}).to eq(
|
121
|
-
expect(option(nil).filter(even)).to eq(
|
130
|
+
expect(option(2).filter(even)).to eq(sequence(2))
|
131
|
+
expect(option(2).find_all(even)).to eq(sequence(2))
|
132
|
+
expect(option(2).select(even)).to eq(sequence(2))
|
133
|
+
expect(option(2).filter(&:even?)).to eq(sequence(2))
|
134
|
+
expect(option(2).filter{|v| v == 2}).to eq(sequence(2))
|
135
|
+
expect(option(nil).filter(even)).to eq(empty)
|
122
136
|
end
|
123
137
|
|
124
138
|
it 'should support map' do
|
125
|
-
expect(option([{apple:1,pear:2},{melon:3}]).map{|h| h}).to eq(
|
126
|
-
expect(option(
|
127
|
-
expect(option(1).
|
128
|
-
expect(option(1).
|
129
|
-
expect(option(
|
130
|
-
expect(option(nil).map(as_string)).to eq(
|
139
|
+
expect(option([{apple:1,pear:2},{melon:3}]).map{|h| h}).to eq([{apple:1,pear:2},{melon:3}])
|
140
|
+
expect(option(1).map(as_string)).to eq(sequence('1'))
|
141
|
+
expect(option(1).collect(as_string)).to eq(sequence('1'))
|
142
|
+
expect(option(sequence(1, 2, 3)).map { |s| s.entries }.to_a).to eq([[1, 2, 3]])
|
143
|
+
expect(option(1).map{|v| v+1}).to eq(sequence(2))
|
144
|
+
expect(option(nil).map(as_string)).to eq(empty)
|
131
145
|
end
|
132
146
|
|
133
147
|
it 'should support reject' do
|
134
|
-
expect(option(2).reject(odd)).to eq(
|
135
|
-
expect(option(2).unfilter(odd)).to eq(
|
136
|
-
expect(option(2).reject(&:odd?)).to eq(
|
137
|
-
expect(option(2).reject{|v| v == 1}).to eq(
|
138
|
-
expect(option(nil).reject(odd)).to eq(
|
148
|
+
expect(option(2).reject(odd)).to eq(sequence(2))
|
149
|
+
expect(option(2).unfilter(odd)).to eq(sequence(2))
|
150
|
+
expect(option(2).reject(&:odd?)).to eq(sequence(2))
|
151
|
+
expect(option(2).reject{|v| v == 1}).to eq(sequence(2))
|
152
|
+
expect(option(nil).reject(odd)).to eq(empty)
|
139
153
|
end
|
140
154
|
|
141
155
|
it 'should support grep' do
|
142
|
-
expect(option('apple').grep(/p/)).to eq(
|
143
|
-
expect(option(nil).grep(/p/)).to eq(
|
156
|
+
expect(option('apple').grep(/p/)).to eq(sequence('apple'))
|
157
|
+
expect(option(nil).grep(/p/)).to eq(empty)
|
144
158
|
end
|
145
159
|
|
146
160
|
it 'should support drop' do
|
147
|
-
expect(option(1).drop(1)).to eq(
|
148
|
-
expect(option(nil).drop(1)).to eq(
|
161
|
+
expect(option(1).drop(1)).to eq(empty)
|
162
|
+
expect(option(nil).drop(1)).to eq(empty)
|
149
163
|
end
|
150
164
|
|
151
165
|
it 'should support drop_while' do
|
152
|
-
expect(option(1).drop_while { |n| n < 5 }).to eq(
|
153
|
-
expect(option(nil).drop_while { |n| n < 5 }).to eq(
|
166
|
+
expect(option(sequence(1,7)).drop_while { |n| n < 5 }).to eq(sequence(7))
|
167
|
+
expect(option(nil).drop_while { |n| n < 5 }).to eq(empty)
|
154
168
|
end
|
155
169
|
|
156
170
|
it 'should support take' do
|
157
|
-
expect(option(1).take(2)).to eq(
|
158
|
-
expect(option(nil).take(2)).to eq(
|
171
|
+
expect(option(1).take(2)).to eq(sequence(1))
|
172
|
+
expect(option(nil).take(2)).to eq(empty)
|
159
173
|
end
|
160
174
|
|
161
175
|
it 'should support take_while' do
|
162
|
-
expect(option(nil).take_while { |n| n < 5 }).to eq(
|
176
|
+
expect(option(nil).take_while { |n| n < 5 }).to eq(empty)
|
163
177
|
end
|
164
178
|
|
165
179
|
it 'should support flat_map' do
|
166
|
-
expect(option(nil).flat_map{|v| v.first}).to eq(
|
180
|
+
expect(option(nil).flat_map{|v| v.first}).to eq(empty)
|
167
181
|
end
|
168
182
|
|
169
183
|
end
|
data/spec/sequence_spec.rb
CHANGED
@@ -42,7 +42,7 @@ describe 'Sequence' do
|
|
42
42
|
end
|
43
43
|
|
44
44
|
it 'should lazily shuffle the elements - throws NoSuchElementException if empty' do
|
45
|
-
expect(
|
45
|
+
expect(sequence(1..50).shuffle.entries).not_to eq(sequence(1..50).entries)
|
46
46
|
expect { empty.shuffle.first }.to raise_error(NoSuchElementException)
|
47
47
|
end
|
48
48
|
|
@@ -153,6 +153,7 @@ describe 'Sequence' do
|
|
153
153
|
|
154
154
|
it 'should return all as flattened array' do
|
155
155
|
expect(sequence(sequence(1, 2, 3),sequence(4,5,6)).all).to eq([1,2,3,4,5,6])
|
156
|
+
expect(sequence(sequence(1, 2, 3),sequence(4,5,6)).flatten).to eq([1,2,3,4,5,6])
|
156
157
|
end
|
157
158
|
|
158
159
|
it 'should iterate empty' do
|
@@ -214,7 +215,7 @@ describe 'Sequence' do
|
|
214
215
|
end
|
215
216
|
|
216
217
|
it 'should convert sequence to a map' do
|
217
|
-
expect(
|
218
|
+
expect(sequence(oops('apple',1,'pear',2)).to_map).to eq({apple:1,pear:2})
|
218
219
|
end
|
219
220
|
|
220
221
|
def oops(*values)
|
data/totally_lazy.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: totally_lazy 0.0.
|
5
|
+
# stub: totally_lazy 0.0.15 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "totally_lazy"
|
9
|
-
s.version = "0.0.
|
9
|
+
s.version = "0.0.15"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib"]
|
13
13
|
s.authors = ["Kingsley Hendrickse"]
|
14
|
-
s.date = "2015-
|
14
|
+
s.date = "2015-11-01"
|
15
15
|
s.description = "Port of java functional library totally lazy to ruby"
|
16
16
|
s.email = "kingsleyhendrickse@me.com"
|
17
17
|
s.extra_rdoc_files = [
|
@@ -59,7 +59,7 @@ Gem::Specification.new do |s|
|
|
59
59
|
]
|
60
60
|
s.homepage = "http://github.com/kingsleyh/totally_lazy"
|
61
61
|
s.licenses = ["MIT"]
|
62
|
-
s.rubygems_version = "2.
|
62
|
+
s.rubygems_version = "2.2.2"
|
63
63
|
s.summary = "Port of java functional library totally lazy to ruby"
|
64
64
|
|
65
65
|
if s.respond_to? :specification_version then
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: totally_lazy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.15
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kingsley Hendrickse
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-11-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -201,7 +201,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
201
201
|
version: '0'
|
202
202
|
requirements: []
|
203
203
|
rubyforge_project:
|
204
|
-
rubygems_version: 2.
|
204
|
+
rubygems_version: 2.2.2
|
205
205
|
signing_key:
|
206
206
|
specification_version: 4
|
207
207
|
summary: Port of java functional library totally lazy to ruby
|