monad-oxide 0.16.0 → 0.17.0
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/lib/monad-oxide/concurrent-promises.rb +27 -0
- data/lib/{err.rb → monad-oxide/err.rb} +1 -0
- data/lib/{left.rb → monad-oxide/left.rb} +1 -1
- data/lib/{ok.rb → monad-oxide/ok.rb} +2 -0
- data/lib/{right.rb → monad-oxide/right.rb} +1 -1
- data/lib/{version.rb → monad-oxide/version.rb} +1 -1
- data/lib/monad-oxide.rb +11 -11
- metadata +29 -14
- /data/lib/{array.rb → monad-oxide/array.rb} +0 -0
- /data/lib/{either.rb → monad-oxide/either.rb} +0 -0
- /data/lib/{error.rb → monad-oxide/error.rb} +0 -0
- /data/lib/{none.rb → monad-oxide/none.rb} +0 -0
- /data/lib/{option.rb → monad-oxide/option.rb} +0 -0
- /data/lib/{result.rb → monad-oxide/result.rb} +0 -0
- /data/lib/{some.rb → monad-oxide/some.rb} +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7f4add1af70591ea0b72483b5608bb2c0e08d06d29d2c34dc2d952d501c9f632
|
|
4
|
+
data.tar.gz: c7a0d1d2a47c157faf8aa069425e37b11964b9dc81ff6d3329b51dd352350d51
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 37c193a394b45179137bd13127c0907b9848fb87a116e81e9de5b821aca3e967e5559209861c6da200ea59bc30d35f1b1a8591cca0224a8cc617ccc5e39b3e01
|
|
7
|
+
data.tar.gz: fefeeef05166cee8ae902fec3af6e47d848dcacc3da0008bade58d896ca1d9e9846f8f549348b9834d4ba44cd63efa2eb912c4a8b8cbbb2315d9ac3fff035d74
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
################################################################################
|
|
3
|
+
# Defines a helper for concurrent/promises.
|
|
4
|
+
################################################################################
|
|
5
|
+
|
|
6
|
+
require 'concurrent/promises'
|
|
7
|
+
require_relative '../monad-oxide'
|
|
8
|
+
|
|
9
|
+
class Concurrent::Promises::Future
|
|
10
|
+
|
|
11
|
+
##
|
|
12
|
+
# Coerces a Current::Promises::Future into a MonadOxide::Result. This
|
|
13
|
+
# behavior forces the Future to finalize, and thus is blocking behavior.
|
|
14
|
+
# A successful Future becomes a MonadOxide::Ok, and a failed Future becomes a
|
|
15
|
+
# MonadOxide::Err.
|
|
16
|
+
# @return [MonadOxide::Result<A, E>] A coerced Result from the Future,
|
|
17
|
+
# containing whatever value the Future was holding.
|
|
18
|
+
def into_result()
|
|
19
|
+
success, value, err = self.result()
|
|
20
|
+
success ? MonadOxide.ok(value) : MonadOxide.err(
|
|
21
|
+
# err isn't actually the error unless someone called rescue on the promise
|
|
22
|
+
# chain. It's pretty weird. So we have to check for both.
|
|
23
|
+
err.nil?() ? value : err,
|
|
24
|
+
)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
################################################################################
|
|
3
|
-
#
|
|
3
|
+
# Defines Left, a variant of Either.
|
|
4
4
|
################################################################################
|
|
5
5
|
|
|
6
6
|
require_relative './error'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
################################################################################
|
|
3
|
-
#
|
|
3
|
+
# Defines Right, a variant of Either.
|
|
4
4
|
################################################################################
|
|
5
5
|
|
|
6
6
|
require_relative './error'
|
|
@@ -3,5 +3,5 @@ module MonadOxide
|
|
|
3
3
|
# This version is locked to 0.x.0 because semver is a lie and this project
|
|
4
4
|
# uses CICD to push new versions. Any commits that appear on main will result
|
|
5
5
|
# in a new version of the gem created and published.
|
|
6
|
-
VERSION='0.
|
|
6
|
+
VERSION='0.17.0'
|
|
7
7
|
end
|
data/lib/monad-oxide.rb
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
require_relative './
|
|
3
|
-
require_relative './
|
|
4
|
-
require_relative './
|
|
5
|
-
require_relative './
|
|
6
|
-
require_relative './
|
|
7
|
-
require_relative './
|
|
8
|
-
require_relative './
|
|
9
|
-
require_relative './
|
|
10
|
-
|
|
11
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require_relative './monad-oxide/result'
|
|
3
|
+
require_relative './monad-oxide/err'
|
|
4
|
+
require_relative './monad-oxide/ok'
|
|
5
|
+
require_relative './monad-oxide/either'
|
|
6
|
+
require_relative './monad-oxide/left'
|
|
7
|
+
require_relative './monad-oxide/right'
|
|
8
|
+
require_relative './monad-oxide/array'
|
|
9
|
+
require_relative './monad-oxide/version'
|
|
10
|
+
# Intentionally do not require helpers which inflict external dependencies, such
|
|
11
|
+
# as ./concurrent-promises.rb which requires the 'concurrent' gem.
|
|
12
12
|
|
|
13
13
|
##
|
|
14
14
|
# The top level module for the monad-oxide library. Of interest, @see `Result',
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: monad-oxide
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.17.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Logan Barnett
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2026-02-05 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: org-ruby
|
|
@@ -66,6 +66,20 @@ dependencies:
|
|
|
66
66
|
- - ">="
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
68
|
version: '0'
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: concurrent-ruby
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - ">="
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
version: '0'
|
|
76
|
+
type: :development
|
|
77
|
+
prerelease: false
|
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
+
requirements:
|
|
80
|
+
- - ">="
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: '0'
|
|
69
83
|
description: |
|
|
70
84
|
Monad-Oxide is a port of Rust's built-in monads from std, such as Result and
|
|
71
85
|
Option. This enables better reasoning about error handling and possibly missing
|
|
@@ -75,19 +89,20 @@ executables: []
|
|
|
75
89
|
extensions: []
|
|
76
90
|
extra_rdoc_files: []
|
|
77
91
|
files:
|
|
78
|
-
- lib/array.rb
|
|
79
|
-
- lib/either.rb
|
|
80
|
-
- lib/err.rb
|
|
81
|
-
- lib/error.rb
|
|
82
|
-
- lib/left.rb
|
|
83
92
|
- lib/monad-oxide.rb
|
|
84
|
-
- lib/
|
|
85
|
-
- lib/
|
|
86
|
-
- lib/
|
|
87
|
-
- lib/
|
|
88
|
-
- lib/
|
|
89
|
-
- lib/
|
|
90
|
-
- lib/
|
|
93
|
+
- lib/monad-oxide/array.rb
|
|
94
|
+
- lib/monad-oxide/concurrent-promises.rb
|
|
95
|
+
- lib/monad-oxide/either.rb
|
|
96
|
+
- lib/monad-oxide/err.rb
|
|
97
|
+
- lib/monad-oxide/error.rb
|
|
98
|
+
- lib/monad-oxide/left.rb
|
|
99
|
+
- lib/monad-oxide/none.rb
|
|
100
|
+
- lib/monad-oxide/ok.rb
|
|
101
|
+
- lib/monad-oxide/option.rb
|
|
102
|
+
- lib/monad-oxide/result.rb
|
|
103
|
+
- lib/monad-oxide/right.rb
|
|
104
|
+
- lib/monad-oxide/some.rb
|
|
105
|
+
- lib/monad-oxide/version.rb
|
|
91
106
|
homepage:
|
|
92
107
|
licenses:
|
|
93
108
|
- Apache-2.0
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|