l43_core 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 31825507b2b2f64e12a44413a22d511aa71e529eb1d357364bdff86e7b3aa780
4
+ data.tar.gz: 5c7860e52ceab60e5199d9fe5839679ebe0c8d455b0ccfe8e012824453b048ac
5
+ SHA512:
6
+ metadata.gz: 1d0503c94818fda405c293d43673875ae2aea5625391d353fcfe22ebbb13892fd28de274b4eaee1828903af5ebf2e528c40ce725fc0b45a3140be4ad436c96e0
7
+ data.tar.gz: 291a92b7f9b3810cdf7a7d8aea07a9c39056a86a8be91ae5d8351bbb7aa2fbc713262e74c23ab848a19ffcc55a4f0b0d1c4d1927464b40a2e6e6d6ae9c156cc1
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'forwardable'
4
+ module L43
5
+ module Core
6
+ module Forwarder
7
+ include Forwardable
8
+
9
+ def forward(message, to:, as: nil)
10
+ as ||= message
11
+ def_delegator(to, as, message)
12
+ end
13
+
14
+ def forward_all(*messages, to:)
15
+ def_delegators(to, *messages)
16
+ end
17
+
18
+ end
19
+ end
20
+ end
21
+ # SPDX-License-Identifier: AGPL-3.0-or-later
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module L43
4
+ module Core
5
+ class Result
6
+ module Constructors
7
+ def error(message)
8
+ o = allocate
9
+ o.instance_exec do
10
+ @message = message
11
+ @ok = false
12
+ end
13
+ o
14
+ end
15
+
16
+ def ok(value)
17
+ o = allocate
18
+ o.instance_exec do
19
+ @value = value
20
+ @ok = true
21
+ end
22
+ o
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ # SPDX-License-Identifier: AGPL-3.0-or-later
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'l43'
4
+ require 'l43/errors'
5
+ module L43
6
+ require_all __FILE__
7
+ module Core
8
+ class Result
9
+ extend Constructors
10
+
11
+ def deconstruct(*)
12
+ if @ok
13
+ [:ok, @value]
14
+ else
15
+ [:error, @message]
16
+ end
17
+ end
18
+
19
+ def deconstruct_keys(*)
20
+ if @ok
21
+ {ok: @value}
22
+ else
23
+ {error: @message}
24
+ end
25
+ end
26
+
27
+ def error? = !@ok
28
+
29
+ def message!
30
+ return @message unless @ok
31
+ raise IllegalState, "No error message in an ok result"
32
+ end
33
+
34
+ def ok? = @ok
35
+
36
+ def value!
37
+ return @value if @ok
38
+ raise IllegalState, "No value in an error result"
39
+ end
40
+ end
41
+ end
42
+ end
43
+ # SPDX-License-Identifier: AGPL-3.0-or-later
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module L43
4
+ module Core
5
+ VERSION = "0.1.0"
6
+ end
7
+ end
8
+ # SPDX-License-Identifier: AGPL-3.0-or-later
data/lib/l43/core.rb ADDED
File without changes
data/lib/l43/errors.rb ADDED
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ module L43
4
+ IllegalState = Class.new(RuntimeError)
5
+ end
6
+ # SPDX-License-Identifier: AGPL-3.0-or-later
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ostruct'
4
+ require_relative 'core/forwarder'
5
+ class OpenStruct
6
+ extend L43::Core::Forwarder
7
+ forward_all :deconstruct_keys, :empty?, :fetch, :has_key?, :keys, :to_hash, :values, to: :to_h
8
+
9
+ def self.to_proc
10
+ -> hashy do
11
+ new hashy
12
+ end
13
+ end
14
+
15
+ def merge(other)
16
+ self.class.new(to_h.merge(other.to_h))
17
+ end
18
+
19
+ def merge_values(*keys, &merger)
20
+ self.class.new(to_h).update_values(*keys, &merger)
21
+ end
22
+
23
+ def update(hashy)
24
+ hashy.to_h.each do |k, v|
25
+ self[k] = v
26
+ end
27
+ self
28
+ end
29
+
30
+ def update_values(*keys, &updater)
31
+ keys.flatten.each do |key|
32
+ value = fetch(key) { raise KeyError, "must not update missing key: #{key.inspect}" }
33
+ value = updater.(value)
34
+ self[key] = value
35
+ end
36
+ self
37
+ end
38
+ end
39
+ # SPDX-License-Identifier: AGPL-3.0-or-later
data/lib/l43.rb ADDED
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module L43 extend self
4
+
5
+ def require_all(file, descend: false)
6
+ dir = file.sub(/\.[^.]*\z/, '')
7
+ wc = descend ? '/**/*.rb' : '/*.rb'
8
+ Dir.glob(File.join(dir, wc)).each { require it }
9
+ end
10
+
11
+ end
12
+ # SPDX-License-Identifier: AGPL-3.0-or-later
metadata ADDED
@@ -0,0 +1,63 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: l43_core
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Robert Dober
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 2025-12-09 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: ostruct
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: 0.6.3
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: 0.6.3
26
+ description: 'Core Functionality for L43 Ruby Tools
27
+
28
+ '
29
+ email: robert.dober@gmail.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - lib/l43.rb
35
+ - lib/l43/core.rb
36
+ - lib/l43/core/forwarder.rb
37
+ - lib/l43/core/result.rb
38
+ - lib/l43/core/result/constructors.rb
39
+ - lib/l43/core/version.rb
40
+ - lib/l43/errors.rb
41
+ - lib/l43/open_struct.rb
42
+ homepage: https://codeberg.org/lab419/l43_core
43
+ licenses:
44
+ - AGPL-3.0-or-later
45
+ metadata: {}
46
+ rdoc_options: []
47
+ require_paths:
48
+ - lib
49
+ required_ruby_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: 3.4.5
54
+ required_rubygems_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: '0'
59
+ requirements: []
60
+ rubygems_version: 3.6.9
61
+ specification_version: 4
62
+ summary: Core Functionality for L43 Ruby Tool
63
+ test_files: []