zx-result 0.0.2 → 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: 477e097fbbd8ef0e9653cad235ba58be00f9fc2d3caf59d753cda5f356288841
4
- data.tar.gz: de38c568f3b038e4a58fa653170ca32b651ba721c92146045dd8303de312a94c
3
+ metadata.gz: 210f397a810c2b3298e142cfa3de4b153bc9a4c4f0091bf3764afbe3a7eeb09c
4
+ data.tar.gz: a4e84f994cd018637395ffff524921d41b73e3e61e223192ee74eb2c7fa7e922
5
5
  SHA512:
6
- metadata.gz: 8392ba2d654e02899d5c1d5022af1287648244145c16f3fd875e2064c41442d31a637b95dac71929d1b474f080e264cadb030920a2c25a9a4a192d586310adb5
7
- data.tar.gz: 6c0e807a40f795cf8be7d3721e0f7bab7cda05a2d5456ec67dbe880a9deaa4a6d82b13fac26453e1f1d243b6a5366e380f8aa51e735659d3d2ab7d6b458a2e78
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,13 +42,15 @@ module Zx
38
42
  end
39
43
 
40
44
  def on_unknown(&block)
41
- __execute__(nil, &block)
45
+ Reflect.apply(self, nil, &block)
46
+
47
+ self
42
48
  end
43
49
 
44
50
  def on_success(tag = nil, &block)
45
51
  return self if failure?
46
52
 
47
- __execute__(tag, &block)
53
+ Reflect.apply(self, tag, &block)
48
54
 
49
55
  self
50
56
  end
@@ -52,7 +58,7 @@ module Zx
52
58
  def on_failure(tag = nil, &block)
53
59
  return self if success?
54
60
 
55
- __execute__(tag, &block)
61
+ Reflect.apply(self, tag, &block)
56
62
 
57
63
  self
58
64
  end
@@ -61,6 +67,7 @@ module Zx
61
67
  case ontype.to_sym
62
68
  when :success then on_success(tag, &block)
63
69
  when :failure then on_failure(tag, &block)
70
+ when :unknown then on_unknown(tag, &block)
64
71
  end
65
72
  end
66
73
  alias >> on
@@ -68,21 +75,11 @@ module Zx
68
75
  alias pipe on
69
76
 
70
77
  def then(&block)
71
- fmap(&block)
72
- end
73
-
74
- def step(&block)
75
- fmap(&block)
76
- end
77
-
78
- def fmap(&block)
79
- return self if failure?
80
-
81
- new_value = block.call @value
82
- @value = new_value
83
-
84
- self
78
+ Fmap.call(self, &block)
85
79
  end
80
+ alias and_then then
81
+ alias step then
82
+ alias fmap then
86
83
 
87
84
  def check(&block)
88
85
  return self if !!block.call(@value)
@@ -105,47 +102,5 @@ module Zx
105
102
 
106
103
  self
107
104
  end
108
-
109
- def __execute__(tag = nil, &block)
110
- return block.call(@value, [@type, @success]) if tag.nil?
111
-
112
- block.call(@value, [@type, @success]) if @type == tag.to_sym
113
- end
114
- private :__execute__
115
-
116
- def Success(value = nil, options = {})
117
- success!(value, type: options.fetch(:type, :ok))
118
- end
119
-
120
- def Success!(value = nil, options = {})
121
- success!(value, type: options.fetch(:type, :ok))
122
- end
123
-
124
- def Failure(value = nil, options = {})
125
- failure!(value, type: options.fetch(:type, :error))
126
- end
127
-
128
- def Failure!(value = nil, options = {})
129
- failure!(value, type: options.fetch(:type, :error))
130
- end
131
-
132
- def self.Success(value = nil, options = {})
133
- new.success!(value, type: options.fetch(:type, :ok))
134
- end
135
-
136
- def self.Success!(...)
137
- Success(...)
138
- end
139
-
140
- def self.Failure(value = nil, options = {})
141
- new.failure!(value, type: options.fetch(:type, :error))
142
- end
143
-
144
- def self.Failure!(...)
145
- Failure(...)
146
- end
147
-
148
- Success = ->(*kwargs) { Success(*kwargs) }
149
- Failure = ->(*kwargs) { Failure(*kwargs) }
150
105
  end
151
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.2'
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.2
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-18 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