l43_core 0.2.1 → 0.2.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 +4 -4
- data/lib/l43/core/enum/hash.rb +33 -0
- data/lib/l43/core/enum.rb +48 -0
- data/lib/l43/core/result/constructors.rb +10 -2
- data/lib/l43/core/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0aa197b658b531ac744c4b1abdbb65a6a9e458888719f94e1b4bb6b925c59a01
|
|
4
|
+
data.tar.gz: 5dec25bfea72b6cad59c7129df6016e2468e5524af95b87569f67f8ac78dfea8
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 7feb54949e60987eeab232f454888006372beeec962955e391fc8a11cc915a849c461905bdac979309de144f27afe7c62600f5e73bf009c9cc4719bdd9d59d57
|
|
7
|
+
data.tar.gz: 4389d10b980e262493d862ac5e655ef586f03b49965573f38c706191977696dbdff371c84e4a06ebf7fa9d5d86396a5b005d9eedb2a787a04dc4a33c4afc4cab
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../none'
|
|
4
|
+
require_relative '../result'
|
|
5
|
+
|
|
6
|
+
class Hash
|
|
7
|
+
def fetch_any(*keys, default: L43::Core::None, &blk)
|
|
8
|
+
raise ArgumentError, "ambigous default definition, (&block and default: provided)" if
|
|
9
|
+
blk && default != L43::Core::None
|
|
10
|
+
|
|
11
|
+
keys = keys.flatten
|
|
12
|
+
raise ArgumentError, "no keys provided to look for" if keys.empty?
|
|
13
|
+
|
|
14
|
+
keys.each do |key|
|
|
15
|
+
return L43::Core::Result.ok(fetch(key)) if has_key? key
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
return L43::Core::Result.ok(blk.()) if blk
|
|
19
|
+
return L43::Core::Result.ok(default) unless default == L43::Core::None
|
|
20
|
+
|
|
21
|
+
L43::Core::Result.error "no key found from #{keys.inspect}"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def fetch_any!(*keys, default: L43::Core::None, &blk)
|
|
25
|
+
case fetch_any(*keys, default:, &blk)
|
|
26
|
+
in :ok, result
|
|
27
|
+
result
|
|
28
|
+
in :error, error
|
|
29
|
+
raise KeyError, error
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'none'
|
|
4
|
+
module L43
|
|
5
|
+
module Core
|
|
6
|
+
module Enum
|
|
7
|
+
def fetch_from_many(*hash_likes, key:, default: None, &blk)
|
|
8
|
+
raise ArgumentError,
|
|
9
|
+
"ambigous default definition, (&block and default: provided)" if
|
|
10
|
+
blk && default != None
|
|
11
|
+
|
|
12
|
+
_fetch_from_many(hash_likes.flatten, key:, default:, &blk)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def fetch_from_many!(*a, **k, &b)
|
|
16
|
+
case fetch_from_many(*a, **k, &b)
|
|
17
|
+
in :ok, result
|
|
18
|
+
result
|
|
19
|
+
in :error, msg
|
|
20
|
+
raise KeyError, msg
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
private
|
|
25
|
+
|
|
26
|
+
def _fetch_from_many(hash_likes, key:, default:, &blk)
|
|
27
|
+
case hash_likes
|
|
28
|
+
in []
|
|
29
|
+
_error_or_default(key:, default:, &blk)
|
|
30
|
+
in head, *tail
|
|
31
|
+
if head.has_key?(key)
|
|
32
|
+
Result.ok(head.fetch(key))
|
|
33
|
+
else
|
|
34
|
+
_fetch_from_many(tail, key:, default:, &blk)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def _error_or_default(key:, default:, &blk)
|
|
40
|
+
return Result.ok(&blk) if blk
|
|
41
|
+
return Result.ok(default) if default != None
|
|
42
|
+
|
|
43
|
+
Result.error("key not found: #{key.inspect}")
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require_relative '../none'
|
|
3
4
|
require_relative 'failure'
|
|
4
5
|
require_relative 'success'
|
|
5
6
|
module L43
|
|
@@ -10,8 +11,15 @@ module L43
|
|
|
10
11
|
Failure.new(message:, exception:, location:)
|
|
11
12
|
end
|
|
12
13
|
|
|
13
|
-
def ok(value)
|
|
14
|
-
|
|
14
|
+
def ok(value=None, &blk)
|
|
15
|
+
raise ArgumentError,
|
|
16
|
+
"ambigous value definition, (&block and positional arg: provided)" if
|
|
17
|
+
blk && value != None
|
|
18
|
+
if blk
|
|
19
|
+
Success.new(blk.())
|
|
20
|
+
else
|
|
21
|
+
Success.new(value)
|
|
22
|
+
end
|
|
15
23
|
end
|
|
16
24
|
end
|
|
17
25
|
end
|
data/lib/l43/core/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: l43_core
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Robert Dober
|
|
8
8
|
bindir: bin
|
|
9
9
|
cert_chain: []
|
|
10
|
-
date: 2026-04-
|
|
10
|
+
date: 2026-04-04 00:00:00.000000000 Z
|
|
11
11
|
dependencies:
|
|
12
12
|
- !ruby/object:Gem::Dependency
|
|
13
13
|
name: ostruct
|
|
@@ -34,6 +34,8 @@ files:
|
|
|
34
34
|
- lib/l43.rb
|
|
35
35
|
- lib/l43/core.rb
|
|
36
36
|
- lib/l43/core/as_result.rb
|
|
37
|
+
- lib/l43/core/enum.rb
|
|
38
|
+
- lib/l43/core/enum/hash.rb
|
|
37
39
|
- lib/l43/core/forwarder.rb
|
|
38
40
|
- lib/l43/core/none.rb
|
|
39
41
|
- lib/l43/core/result.rb
|