zx-result 0.0.3 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
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