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 +7 -0
- data/lib/l43/core/forwarder.rb +21 -0
- data/lib/l43/core/result/constructors.rb +28 -0
- data/lib/l43/core/result.rb +43 -0
- data/lib/l43/core/version.rb +8 -0
- data/lib/l43/core.rb +0 -0
- data/lib/l43/errors.rb +6 -0
- data/lib/l43/open_struct.rb +39 -0
- data/lib/l43.rb +12 -0
- metadata +63 -0
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
|
data/lib/l43/core.rb
ADDED
|
File without changes
|
data/lib/l43/errors.rb
ADDED
|
@@ -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: []
|