l43_core 0.1.3 → 0.1.4

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: b964ad4c7819f22e58ec71b9768521105318d9bdcc42d9d860e399bd9864c491
4
- data.tar.gz: e6399e1a021ca7b549a0c41589e8e200891269e3099fe36a6a6cfd755c4e8ac7
3
+ metadata.gz: 8f1dc19b0e66369e681dc2a7342ea49176148c78aab19832adbc814251f7b93a
4
+ data.tar.gz: d342f6c72085a6f5552930ec780fdd2111c7525fa18094f0e12e722ecc612825
5
5
  SHA512:
6
- metadata.gz: 31d4957c4b081d12d22e3b8236f91bfeed7b93dc99941374d22ae421dd58aacdf2807ec7e7f70a1285be685714bcb53fab409f6dada9ca4125d5fd2a399de849
7
- data.tar.gz: ea5c0da5bac00c239e95c74f213cac1f88e321e78227bce9e7ef6bed7d079b25ca764d5d09d723cea00bcb51039a4f2264dd0768cdf82ba6a3eb66f7be40a403
6
+ metadata.gz: 45fa2391331c65b8337b47be2b7c28e8165a4acf16357fb272bb5d99a6cec7375c79ed8bc6502574ed262e0f40993b35a9932fbd3846e5d9e01b7cc81ed22f8d
7
+ data.tar.gz: a316c3d5fbff4b2fd0bfd8e856b3d4dfbc43c23ad48ab95a8d29070f3c9e4a52667e0ffcd03744ce88f305021c702261fced7e901f72e58d131c2608bba52b81
@@ -4,25 +4,15 @@ require_relative 'result'
4
4
  module L43
5
5
  module Core
6
6
  module AsResult
7
+ include Result::Helpers
8
+
7
9
  def self.extended(from)
8
10
  from.include self
9
11
  end
10
12
 
11
- def as_result(&blk)
12
- Result.ok(blk.())
13
- rescue StandardError => se
14
- Result.error(se.message)
15
- end
16
-
17
- def as_result_fn(&blk)
18
- -> (*a, **k, &b) do
19
- as_result { blk.(*a, **k, &b) }
20
- end
21
- end
22
-
23
13
  def defresult(name, &blk)
24
14
  define_method name do |*a, **k, &b|
25
- as_result { blk.(*a, **k, &b) }
15
+ as_result("method #{name}") { blk.(*a, **k, &b) }
26
16
  end
27
17
  end
28
18
  end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module L43
4
+ module Core
5
+ class Result
6
+ module Helpers
7
+
8
+ def as_result(message=nil, &blk)
9
+ Result.ok(blk.())
10
+ rescue StandardError => se
11
+ location = blk.source_location.join(':')
12
+ error = se.inspect
13
+ error = message + " (" + error + ")" if message
14
+ Result.error([error, "at", location].join(' '))
15
+ end
16
+
17
+ def as_result_fn(message=nil, &blk)
18
+ -> (*a, **k, &b) do
19
+ as_result(message) { blk.(*a, **k, &b) }
20
+ end
21
+ end
22
+
23
+ end
24
+ end
25
+ end
26
+ end
27
+ # SPDX-License-Identifier: AGPL-3.0-or-later
@@ -2,11 +2,13 @@
2
2
 
3
3
  require 'l43/errors'
4
4
  require_relative 'result/constructors'
5
+ require_relative 'result/helpers'
5
6
 
6
7
  module L43
7
8
  module Core
8
9
  class Result
9
10
  extend Constructors
11
+ include Helpers
10
12
 
11
13
  def ==(other)
12
14
  return false unless self.class === other
@@ -22,28 +24,47 @@ module L43
22
24
  end
23
25
  end
24
26
 
25
- def to_h(*)
26
- if @ok
27
- {ok: @value}
28
- else
29
- {error: @message}
27
+ def error? = !@ok
28
+
29
+ def map(&blk)
30
+ return self unless @ok
31
+ blk.(self)
32
+ end
33
+
34
+ def map_result(&blk)
35
+ return self unless @ok
36
+ as_result('map_result') do
37
+ blk.(self)
30
38
  end
31
39
  end
32
- alias_method :deconstruct_keys, :to_h
33
40
 
34
- def error? = !@ok
41
+ def map_result!(&blk)
42
+ return self unless @ok
43
+ self.class.ok(blk.(self))
44
+ end
35
45
 
36
46
  def message!
37
47
  return @message unless @ok
38
48
  raise IllegalState, "No error message in an ok result"
39
49
  end
50
+ alias_method :message, :message!
40
51
 
41
52
  def ok? = @ok
42
53
 
54
+ def to_h(*)
55
+ if @ok
56
+ {ok: @value}
57
+ else
58
+ {error: @message}
59
+ end
60
+ end
61
+ alias_method :deconstruct_keys, :to_h
62
+
43
63
  def value!
44
64
  return @value if @ok
45
65
  raise IllegalState, "No value in an error result"
46
66
  end
67
+ alias_method :value, :value!
47
68
  end
48
69
  end
49
70
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module L43
4
4
  module Core
5
- VERSION = "0.1.3"
5
+ VERSION = "0.1.4"
6
6
  end
7
7
  end
8
8
  # SPDX-License-Identifier: AGPL-3.0-or-later
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: l43_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Dober
@@ -38,6 +38,7 @@ files:
38
38
  - lib/l43/core/none.rb
39
39
  - lib/l43/core/result.rb
40
40
  - lib/l43/core/result/constructors.rb
41
+ - lib/l43/core/result/helpers.rb
41
42
  - lib/l43/core/version.rb
42
43
  - lib/l43/errors.rb
43
44
  - lib/l43/open_struct.rb