zx-monads 0.0.3 → 0.0.5
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/.github/workflows/ci.yml +1 -1
- data/.rubocop.yml +1 -1
- data/Gemfile +1 -3
- data/README.md +10 -0
- data/lib/maybe.rb +19 -9
- data/lib/zx/maybe.rb +5 -4
- data/lib/zx/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 92ddc57d4126dfd37ebaeeb3695eeb9bd32dfedd4a1a973b1eefe6cc9f082f88
|
4
|
+
data.tar.gz: 1baafdd45d22c064368e9a8bd789fed4b23cc4cffb493d903441442e26e47502
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9969b07e28b5a4ca988e416bddcde3360e51c6f572b0712c247aedb7f78717e23e9821c2c83a4fafa4bea660e7c20ada2a43c75d07ec6159c09984f27941d471
|
7
|
+
data.tar.gz: 3fffca4170917b53e657cb010727cbdc3fd94f4f752893f01f61022714b5e9fda604b9dac1de3ec11dd642d451ccc6a41427e410894e8105dab63cc05e4c6cb9
|
data/.github/workflows/ci.yml
CHANGED
data/.rubocop.yml
CHANGED
data/Gemfile
CHANGED
@@ -1,14 +1,12 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
|
-
gem 'base64'
|
4
|
-
gem 'json'
|
5
3
|
gem 'zeitwerk'
|
6
4
|
|
7
5
|
group :development, :test do
|
6
|
+
gem 'byebug'
|
8
7
|
gem 'rubocop', github: 'rubocop/rubocop', require: false
|
9
8
|
end
|
10
9
|
|
11
10
|
group :test do
|
12
|
-
gem 'byebug'
|
13
11
|
gem 'rspec'
|
14
12
|
end
|
data/README.md
CHANGED
@@ -96,6 +96,7 @@ end
|
|
96
96
|
#math(some:, none:) -> Receive callables and associate them
|
97
97
|
#on_success{} -> Only when Some
|
98
98
|
#on_failure{} -> Only then None
|
99
|
+
#on(:success|:failure){}
|
99
100
|
```
|
100
101
|
|
101
102
|
### ZX::Maybe
|
@@ -404,6 +405,15 @@ order.call
|
|
404
405
|
.on_failure { |none| expect(none.or(0)).to eq(0) }
|
405
406
|
```
|
406
407
|
|
408
|
+
```rb
|
409
|
+
order = OrderStep.new(20)
|
410
|
+
|
411
|
+
order.call
|
412
|
+
.map { |n| n + 1 }
|
413
|
+
.on(:success) { |some| expect(some.unwrap).to eq(10) }
|
414
|
+
.on(:failure) { |none| expect(none.or(0)).to eq(0) }
|
415
|
+
```
|
416
|
+
|
407
417
|
```rb
|
408
418
|
order = OrderStep.new(-1)
|
409
419
|
|
data/lib/maybe.rb
CHANGED
@@ -1,13 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Maybe
|
4
|
+
attr_reader :value
|
5
|
+
|
4
6
|
IsBlank = ->(value) { value.nil? || value.to_s.strip&.empty? || !value }
|
5
7
|
|
6
8
|
def self.of(...)
|
7
9
|
new.of(...)
|
8
10
|
end
|
9
11
|
|
10
|
-
def self.[](...)
|
12
|
+
def self.[](...)
|
11
13
|
of(...)
|
12
14
|
end
|
13
15
|
|
@@ -18,7 +20,7 @@ class Maybe
|
|
18
20
|
rescue StandardError
|
19
21
|
None.new
|
20
22
|
end
|
21
|
-
|
23
|
+
|
22
24
|
def type
|
23
25
|
to_s.downcase.to_sym
|
24
26
|
end
|
@@ -32,7 +34,7 @@ class Maybe
|
|
32
34
|
end
|
33
35
|
|
34
36
|
def unwrap
|
35
|
-
|
37
|
+
@value
|
36
38
|
end
|
37
39
|
|
38
40
|
def or(value)
|
@@ -42,6 +44,7 @@ class Maybe
|
|
42
44
|
def >>(other)
|
43
45
|
self > other
|
44
46
|
end
|
47
|
+
alias | >>
|
45
48
|
|
46
49
|
def fmap(_)
|
47
50
|
self
|
@@ -58,7 +61,7 @@ class Maybe
|
|
58
61
|
case arg
|
59
62
|
in None then self
|
60
63
|
in Symbol | String then dig(arg)
|
61
|
-
end
|
64
|
+
end
|
62
65
|
rescue StandardError => e
|
63
66
|
None.new(e.message)
|
64
67
|
end
|
@@ -77,7 +80,7 @@ class Maybe
|
|
77
80
|
def dig(...)
|
78
81
|
Maybe[@value&.dig(...)]
|
79
82
|
end
|
80
|
-
|
83
|
+
|
81
84
|
def dig!(...)
|
82
85
|
dig(...).unwrap
|
83
86
|
end
|
@@ -105,6 +108,13 @@ class Maybe
|
|
105
108
|
self
|
106
109
|
end
|
107
110
|
|
111
|
+
def on(ontype, &block)
|
112
|
+
case ontype.to_sym
|
113
|
+
when :success then on_success(&block)
|
114
|
+
when :failure then on_failure(&block)
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
108
118
|
class Some < Maybe
|
109
119
|
def self.[](...)
|
110
120
|
new(...)
|
@@ -114,7 +124,7 @@ class Maybe
|
|
114
124
|
@value = value
|
115
125
|
end
|
116
126
|
|
117
|
-
def deconstruct
|
127
|
+
def deconstruct
|
118
128
|
[@value]
|
119
129
|
end
|
120
130
|
|
@@ -123,7 +133,7 @@ class Maybe
|
|
123
133
|
end
|
124
134
|
|
125
135
|
def to_s
|
126
|
-
|
136
|
+
'Some'
|
127
137
|
end
|
128
138
|
|
129
139
|
def >(other)
|
@@ -136,7 +146,7 @@ class Maybe
|
|
136
146
|
end
|
137
147
|
|
138
148
|
class None < Maybe
|
139
|
-
def self.[](...)
|
149
|
+
def self.[](...)
|
140
150
|
new(...)
|
141
151
|
end
|
142
152
|
|
@@ -160,4 +170,4 @@ class Maybe
|
|
160
170
|
self
|
161
171
|
end
|
162
172
|
end
|
163
|
-
end
|
173
|
+
end
|
data/lib/zx/maybe.rb
CHANGED
@@ -1,19 +1,20 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Zx
|
3
4
|
module Maybe
|
4
5
|
module Maybeable
|
5
6
|
None = ->(*kwargs) { ::Maybe::None.new(*kwargs) }
|
6
7
|
Some = ->(*kwargs) { ::Maybe::Some.new(*kwargs) }
|
7
8
|
Maybe = ->(*kwargs) { ::Maybe.of(*kwargs) }
|
8
|
-
|
9
|
+
|
9
10
|
def Maybe(*kwargs)
|
10
11
|
::Maybe.of(*kwargs)
|
11
12
|
end
|
12
|
-
|
13
|
+
|
13
14
|
def Some(*kwargs)
|
14
15
|
::Maybe::Some.new(*kwargs)
|
15
16
|
end
|
16
|
-
|
17
|
+
|
17
18
|
def None(*kwargs)
|
18
19
|
::Maybe::None.new(*kwargs)
|
19
20
|
end
|
@@ -30,4 +31,4 @@ module Zx
|
|
30
31
|
klass.extend(Maybeable)
|
31
32
|
end
|
32
33
|
end
|
33
|
-
end
|
34
|
+
end
|
data/lib/zx/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zx-monads
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thadeu Esteves
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-09-
|
11
|
+
date: 2023-09-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|