zx-result 0.0.3 → 0.0.4

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: 210f397a810c2b3298e142cfa3de4b153bc9a4c4f0091bf3764afbe3a7eeb09c
4
+ data.tar.gz: a4e84f994cd018637395ffff524921d41b73e3e61e223192ee74eb2c7fa7e922
5
5
  SHA512:
6
- metadata.gz: 3f8cf43b9abb8772b8436d297997321a677b7bee04ca3688ca1db4fa27dcfec79fa013bd176fc72864653f198b7d5e30c1b00265f291126ac2b97e72c4c7ec24
7
- data.tar.gz: f090b620cac830f80e8037ade19f1dbcb83d629c87ee693b6618854de795a9ffb4297fcedd0bff4e11d6fe9268357554b54d0f70479a60d71cfc7e4a3fe2187a
6
+ metadata.gz: df7513abb2eba86992c5bf03be139b5baa4500bfda8d5d622a8f1315e0a412606317a0f4c7318d6ff049bffc55e91ecc68b3450f3681e48596660a21c9cc299d
7
+ data.tar.gz: a38aeefd2f63478878541adb7e171eba5de1636db1a8a526a6fef81dd3e13f9b3566ccb753e272ce2e3e8f19c0794c7fa4904b9c3584703a5871f6c4d05ce626
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.4'
5
5
  end
data/lib/zx.rb CHANGED
@@ -1,21 +1,34 @@
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
+ module Methods
10
+ Success = ->(value = nil, options = {}) { Zx.Success(value, { type: :ok }.merge(options)) }
11
+ Failure = ->(value = nil, options = {}) { Zx.Failure(value, { type: :error }.merge(options)) }
12
+
13
+ def Success(value = nil, options = {})
14
+ Zx::Result.new.success!(value, type: options.fetch(:type, :ok))
12
15
  end
13
-
14
- def Failure(...)
15
- Result.Failure(...)
16
+
17
+ def Failure(value = nil, options = {})
18
+ Zx::Result.new.failure!(value, type: options.fetch(:type, :error))
19
+ end
20
+
21
+ def Try(default = nil, options = {})
22
+ Success[yield]
23
+ rescue StandardError => e
24
+ Failure[default || options.fetch(:or, nil)]
25
+ end
26
+
27
+ def Given(input)
28
+ Try { input }
16
29
  end
17
30
  end
18
-
19
- include Extendable
20
- extend Extendable
31
+
32
+ include Methods
33
+ extend Methods
21
34
  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.4
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