totally_lazy 0.1.13 → 0.1.14
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 +8 -8
- data/lib/lambda_block.rb +6 -0
- data/lib/numbers.rb +4 -0
- data/lib/option.rb +18 -1
- data/lib/sequence.rb +3 -4
- data/lib/totally_lazy.rb +1 -1
- data/spec/option_spec.rb +18 -0
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NjQ2MGUzNjA5MGRjZWI0YzRlMjBmN2MyMjkyYzIyNmQ2OGQxNTIzMg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
YWVkMTVlYWFiZThkNWQ2NWZlMmUwMWExNmE4YTJmNTU3NWY0MjhmOA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
OGY0MjIxNmY1YmVjNDRkNzNkMDkzMTU2NzJhY2RjYmU4MWFjYjlmNmI0MGMx
|
10
|
+
NTE2MmM4OTRkNzM0NWY3NjRhYjUxYjAwODM0OTYxYzVkNmZhMzMwYmY3ZThk
|
11
|
+
ZTM5ZjQ4ZmNkNWNkMGIxOTg1ZGE2N2E1ZmI0MjAzZTE2MTYxNTE=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MGMyZjE0MWI1MDRkOWJkYTY1YjVlOWY3NWQ3ZWZjMmI0NzQyZDljNDIzOGFl
|
14
|
+
MDI5ZTgwNjlmODlkNGFkZWM0NjI2YmIxZjYxYWU5YjVjOGVkOGQzOWNjZDIw
|
15
|
+
OWQzNDM1M2Y0YmIxZmRiOGVhYTllMjkwMDVmNzRjOGUzN2IyMGM=
|
data/lib/lambda_block.rb
ADDED
data/lib/numbers.rb
CHANGED
data/lib/option.rb
CHANGED
@@ -1,4 +1,7 @@
|
|
1
|
+
require_relative 'lambda_block'
|
2
|
+
|
1
3
|
module Option
|
4
|
+
include LambdaBlock
|
2
5
|
|
3
6
|
def option(value)
|
4
7
|
value.nil? ? none : some(value)
|
@@ -18,6 +21,11 @@ module Option
|
|
18
21
|
end
|
19
22
|
end
|
20
23
|
|
24
|
+
def is?(fn_pred=nil, &block_pred)
|
25
|
+
assert_funcs(fn_pred, block_given?)
|
26
|
+
exists?(block_given? ? ->(value) { block_pred.call(value) } : fn_pred)
|
27
|
+
end
|
28
|
+
|
21
29
|
class Some < Option
|
22
30
|
include Comparable
|
23
31
|
attr_reader :value
|
@@ -30,6 +38,11 @@ module Option
|
|
30
38
|
@value == value
|
31
39
|
end
|
32
40
|
|
41
|
+
def exists?(fn_pred=nil, &block_pred)
|
42
|
+
assert_funcs(fn_pred, block_given?)
|
43
|
+
block_given? ? block_pred.call(@value) : fn_pred.(value)
|
44
|
+
end
|
45
|
+
|
33
46
|
def map(fn)
|
34
47
|
some(fn.(value))
|
35
48
|
end
|
@@ -59,7 +72,11 @@ module Option
|
|
59
72
|
true
|
60
73
|
end
|
61
74
|
|
62
|
-
def contains?(
|
75
|
+
def contains?(value)
|
76
|
+
false
|
77
|
+
end
|
78
|
+
|
79
|
+
def exists?(fn_pred=nil, &block_pred)
|
63
80
|
false
|
64
81
|
end
|
65
82
|
|
data/lib/sequence.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require_relative 'lambda_block'
|
2
|
+
|
1
3
|
class NoSuchElementException < RuntimeError
|
2
4
|
end
|
3
5
|
|
@@ -45,6 +47,7 @@ module Sequences
|
|
45
47
|
# noinspection RubyTooManyMethodsInspection
|
46
48
|
class Sequence
|
47
49
|
include Comparable
|
50
|
+
include LambdaBlock
|
48
51
|
attr_reader :enumerator
|
49
52
|
|
50
53
|
def initialize(enumerator)
|
@@ -255,10 +258,6 @@ module Sequences
|
|
255
258
|
end
|
256
259
|
|
257
260
|
private
|
258
|
-
def assert_funcs(fn, block_given)
|
259
|
-
raise 'Cannot pass both lambda and block expressions' if !fn.nil? && block_given
|
260
|
-
end
|
261
|
-
|
262
261
|
def seed(enumerator, fn)
|
263
262
|
enumerator.rewind
|
264
263
|
!fn.nil? && fn.respond_to?(:identity) ? fn.identity : enumerator.next
|
data/lib/totally_lazy.rb
CHANGED
data/spec/option_spec.rb
CHANGED
@@ -14,4 +14,22 @@ describe 'Option' do
|
|
14
14
|
expect(none.contains?(2)).to eq(false)
|
15
15
|
end
|
16
16
|
|
17
|
+
it 'should support exists' do
|
18
|
+
expect(option(1).exists?(greater_than(0))).to eq(true)
|
19
|
+
expect(option(1).exists? { |a| a > 0 }).to eq(true)
|
20
|
+
expect(option(1).exists?(greater_than(1))).to eq(false)
|
21
|
+
expect(none.exists?(greater_than(0))).to eq(false)
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should support is alias' do
|
25
|
+
expect(option(1).is?(greater_than(0))).to eq(true)
|
26
|
+
expect(option(1).is? { |a| a > 0 }).to eq(true)
|
27
|
+
expect(option(1).is?(greater_than(1))).to eq(false)
|
28
|
+
expect(none.is?(greater_than(0))).to eq(false)
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'should raise exception if you try to use both lambda and block' do
|
32
|
+
expect { empty.exists?(->(a) { a == 1 }) { |b| b == 2 } }.to raise_error(RuntimeError)
|
33
|
+
expect { empty.is?(->(a) { a == 1 }) { |b| b == 2 } }.to raise_error(RuntimeError)
|
34
|
+
end
|
17
35
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: totally_lazy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.14
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Raymond Barlow
|
@@ -157,6 +157,7 @@ files:
|
|
157
157
|
- lib/comparators.rb
|
158
158
|
- lib/enumerators.rb
|
159
159
|
- lib/functions.rb
|
160
|
+
- lib/lambda_block.rb
|
160
161
|
- lib/numbers.rb
|
161
162
|
- lib/option.rb
|
162
163
|
- lib/pair.rb
|