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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5d48c39ee25c731beda01954b94304456ca20fab8ae4c34564424474602282b3
4
- data.tar.gz: 0106155fe888bb641e938c7b6873ec1356416ffcba570900871f8e047bda3a3f
3
+ metadata.gz: 0aa197b658b531ac744c4b1abdbb65a6a9e458888719f94e1b4bb6b925c59a01
4
+ data.tar.gz: 5dec25bfea72b6cad59c7129df6016e2468e5524af95b87569f67f8ac78dfea8
5
5
  SHA512:
6
- metadata.gz: 4ed1048e2d1cc0606df899ad88c68c626059093371dd476ca2416c407640f9c8ee21a406516190c9cb1e7fe9e40a115ce9c074cc45adab77fefe3ddd79dc290c
7
- data.tar.gz: 45f4de92da16bd93355548ee866e65cbd81f7a15178119af7368350334edf596078d5b4dec1506993b9d7a0286d1b7cf2f1c3b739dedbebf25cb922eceb03d39
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
- Success.new(value)
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
@@ -2,7 +2,7 @@
2
2
 
3
3
  module L43
4
4
  module Core
5
- VERSION = "0.2.1"
5
+ VERSION = "0.2.2"
6
6
  end
7
7
  end
8
8
  # SPDX-License-Identifier: AGPL-3.0-or-later
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.1
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-01 00:00:00.000000000 Z
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