zx-result 0.0.3 → 0.0.5

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: da3bb02e36f9e8c958921f2ff44a76313d06b4f063ca7f9eaee5edd3eccf683d
4
- data.tar.gz: 635a4e33852a269d3f03b8f80595bacec8a1b7cb8ac1c471bb11ed5443595442
3
+ metadata.gz: eca74ba140e8f3b7a5fa5e08dcf070910d2d7d266fce5eaee495d2b41b567659
4
+ data.tar.gz: 369c71724d7d612f12802d443112e63eb7216e2382b6bb51858d592b0abadbc3
5
5
  SHA512:
6
- metadata.gz: 3f8cf43b9abb8772b8436d297997321a677b7bee04ca3688ca1db4fa27dcfec79fa013bd176fc72864653f198b7d5e30c1b00265f291126ac2b97e72c4c7ec24
7
- data.tar.gz: f090b620cac830f80e8037ade19f1dbcb83d629c87ee693b6618854de795a9ffb4297fcedd0bff4e11d6fe9268357554b54d0f70479a60d71cfc7e4a3fe2187a
6
+ metadata.gz: a86e5ad2ef2f77923c34b0a48f222644c4a13662174c5760b1e37d7a575a674f75231ea1e804897e77b1ee4e884e785b9a9788f986243f16a5ad24ec4ea653f4
7
+ data.tar.gz: ef8be07de181dcdca3ca021beaff273133ddecee9985d0ba86307a5beb841f92aec1702ac0e713ffc15243de974b58de12a307129271dceb027f8577d03ac807
data/.rubocop.yml CHANGED
@@ -1,3 +1,6 @@
1
+ Style/CaseEquality:
2
+ Enabled: false
3
+
1
4
  Style/Documentation:
2
5
  Enabled: false
3
6
 
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ class BasicObject
4
+ include ::Zx
5
+ end
data/lib/zx/fmap.rb ADDED
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zx
4
+ module Fmap
5
+ def self.call(result, &block)
6
+ return result if result.failure?
7
+
8
+ new_value = block.call result.value
9
+ result.instance_variable_set(:@value, new_value)
10
+
11
+ result
12
+ end
13
+ end
14
+ end
data/lib/zx/reflect.rb ADDED
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zx
4
+ class Reflect
5
+ attr_accessor :result, :tag
6
+
7
+ def initialize(result, tag)
8
+ self.result = result
9
+ self.tag = tag
10
+ end
11
+
12
+ def apply(&block)
13
+ return block.call(result.value, [result.type, result.success?]) if tag.nil?
14
+
15
+ block.call(result.value, [result.type, result.success?]) if result.type == tag.to_sym
16
+ end
17
+
18
+ def self.apply(result, tag, &block)
19
+ new(result, tag).apply(&block)
20
+ end
21
+ end
22
+ end
data/lib/zx/result.rb CHANGED
@@ -29,6 +29,10 @@ module Zx
29
29
  @value || raise(FailureError)
30
30
  end
31
31
 
32
+ def unwrap
33
+ @value
34
+ end
35
+
32
36
  def deconstruct
33
37
  [type, value]
34
38
  end
@@ -38,7 +42,7 @@ module Zx
38
42
  end
39
43
 
40
44
  def on_unknown(&block)
41
- __execute__(nil, &block)
45
+ Reflect.apply(self, nil, &block)
42
46
 
43
47
  self
44
48
  end
@@ -46,7 +50,7 @@ module Zx
46
50
  def on_success(tag = nil, &block)
47
51
  return self if failure?
48
52
 
49
- __execute__(tag, &block)
53
+ Reflect.apply(self, tag, &block)
50
54
 
51
55
  self
52
56
  end
@@ -54,7 +58,7 @@ module Zx
54
58
  def on_failure(tag = nil, &block)
55
59
  return self if success?
56
60
 
57
- __execute__(tag, &block)
61
+ Reflect.apply(self, tag, &block)
58
62
 
59
63
  self
60
64
  end
@@ -63,6 +67,7 @@ module Zx
63
67
  case ontype.to_sym
64
68
  when :success then on_success(tag, &block)
65
69
  when :failure then on_failure(tag, &block)
70
+ when :unknown then on_unknown(tag, &block)
66
71
  end
67
72
  end
68
73
  alias >> on
@@ -70,21 +75,11 @@ module Zx
70
75
  alias pipe on
71
76
 
72
77
  def then(&block)
73
- fmap(&block)
74
- end
75
-
76
- def step(&block)
77
- fmap(&block)
78
- end
79
-
80
- def fmap(&block)
81
- return self if failure?
82
-
83
- new_value = block.call @value
84
- @value = new_value
85
-
86
- self
78
+ Fmap.call(self, &block)
87
79
  end
80
+ alias and_then then
81
+ alias step then
82
+ alias fmap then
88
83
 
89
84
  def check(&block)
90
85
  return self if !!block.call(@value)
@@ -107,47 +102,5 @@ module Zx
107
102
 
108
103
  self
109
104
  end
110
-
111
- def __execute__(tag = nil, &block)
112
- return block.call(@value, [@type, @success]) if tag.nil?
113
-
114
- block.call(@value, [@type, @success]) if @type == tag.to_sym
115
- end
116
- private :__execute__
117
-
118
- def Success(value = nil, options = {})
119
- success!(value, type: options.fetch(:type, :ok))
120
- end
121
-
122
- def Success!(value = nil, options = {})
123
- success!(value, type: options.fetch(:type, :ok))
124
- end
125
-
126
- def Failure(value = nil, options = {})
127
- failure!(value, type: options.fetch(:type, :error))
128
- end
129
-
130
- def Failure!(value = nil, options = {})
131
- failure!(value, type: options.fetch(:type, :error))
132
- end
133
-
134
- def self.Success(value = nil, options = {})
135
- new.success!(value, type: options.fetch(:type, :ok))
136
- end
137
-
138
- def self.Success!(...)
139
- Success(...)
140
- end
141
-
142
- def self.Failure(value = nil, options = {})
143
- new.failure!(value, type: options.fetch(:type, :error))
144
- end
145
-
146
- def self.Failure!(...)
147
- Failure(...)
148
- end
149
-
150
- Success = ->(*kwargs) { Success(*kwargs) }
151
- Failure = ->(*kwargs) { Failure(*kwargs) }
152
105
  end
153
106
  end
data/lib/zx/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Zx
4
- VERSION = '0.0.3'
4
+ VERSION = '0.0.5'
5
5
  end
data/lib/zx.rb CHANGED
@@ -1,21 +1,43 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'zx/version'
4
+ require 'zx/fmap'
5
+ require 'zx/reflect'
3
6
  require 'zx/result'
4
7
 
5
8
  module Zx
6
- module Extendable
7
- Success = ->(*kwargs) { Result.Success(*kwargs) }
8
- Failure = ->(*kwargs) { Result.Failure(*kwargs) }
9
-
10
- def Success(...)
11
- Result.Success(...)
9
+ class AbortError < ::RuntimeError
10
+ attr_reader :type
11
+
12
+ def initialize(message: nil, type: :error)
13
+ @type = type
14
+ super(message)
12
15
  end
16
+ end
13
17
 
14
- def Failure(...)
15
- Result.Failure(...)
18
+ module Methods
19
+ Success = ->(value = nil, options = {}) { Zx.Success(value, { type: :ok }.merge(options)) }
20
+ Failure = ->(value = nil, options = {}) { Zx.Failure(value, { type: :error }.merge(options)) }
21
+
22
+ def Success(value = nil, options = {})
23
+ Zx::Result.new.success!(value, type: options.fetch(:type, :ok))
24
+ end
25
+
26
+ def Failure(value = nil, options = {})
27
+ Zx::Result.new.failure!(value, type: options.fetch(:type, :error))
28
+ end
29
+
30
+ def Try(default = nil, options = {})
31
+ Success[yield]
32
+ rescue StandardError => e
33
+ Failure[default || options.fetch(:or, nil)]
34
+ end
35
+
36
+ def Given(input)
37
+ Try { input }
16
38
  end
17
39
  end
18
-
19
- include Extendable
20
- extend Extendable
40
+
41
+ include Methods
42
+ extend Methods
21
43
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zx-result
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thadeu Esteves
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-09-20 00:00:00.000000000 Z
11
+ date: 2024-05-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -88,6 +88,9 @@ files:
88
88
  - bin/console
89
89
  - bin/setup
90
90
  - lib/zx.rb
91
+ - lib/zx/eager_load.rb
92
+ - lib/zx/fmap.rb
93
+ - lib/zx/reflect.rb
91
94
  - lib/zx/result.rb
92
95
  - lib/zx/version.rb
93
96
  - zx-result.gemspec
@@ -110,7 +113,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
110
113
  - !ruby/object:Gem::Version
111
114
  version: '0'
112
115
  requirements: []
113
- rubygems_version: 3.1.6
116
+ rubygems_version: 3.4.19
114
117
  signing_key:
115
118
  specification_version: 4
116
119
  summary: Functional result object for Ruby