to-result 0.1.0 → 0.1.1

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: bc8202a00d4cc8938cac602f09b0a9b0694a29421bedb0c71be82f94fad66e89
4
- data.tar.gz: 783334b0487c880174639c699eb61fc6eacd695086a5c5b9b531947bd1645b30
3
+ metadata.gz: fc48c861de210a05cba164c61710457447f04b60b492ef15791ab7e5c28a3375
4
+ data.tar.gz: fb5802866e75958e710ec9a0be23584f8f737101ef8afd18c5b212a775539c1c
5
5
  SHA512:
6
- metadata.gz: 4e2b40217e547f2cabbcc84847f1f257676863997c088f4e2c43416a608fd804b07bf7586e95d6ab60b8c70fa501b6cd297deb7d9ad7a86f0acade0977ef5f64
7
- data.tar.gz: feceedd4425f782ee47637da08a69fbef6f54b226a5bd104e6a8f22ea219a9b4be1fd30ffac56e88df0ec1aa2212f4c2ea2994b81f51155f8d1dae8ff29fb41b
6
+ metadata.gz: 60728e022ce553988082effc1ab86a3260cf399a464bddea06d936e6428bf54f0604a8b86638ee7932526a20d72b3c80bcc491f6d816d6d17bdd93326c11b2ce
7
+ data.tar.gz: 959d7af9b3eb1367269c6650ca9c9babedd8c3cfd6e36403d3d4f01b750219dc7781cec78e4bc2a4972ce34e230d157dbd17a8bee70b7c9cc24c407fb71f5bc3
data/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.1.1](https://github.com/a-chris/to-result/tree/0.1.1) (2023-08-16)
4
+
5
+ HOTFIXES:
6
+
7
+ - Always pass the error to the `on_error` callable object instead of mixed `error/Failure(error)`
8
+
3
9
  ## [0.1.0](https://github.com/a-chris/to-result/tree/0.1.0) (2022-10-28)
4
10
 
5
11
  - Explicit requires `dry-monads` >= 1.x, just for convenience
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- to-result (0.1.0)
4
+ to-result (0.1.1)
5
5
  dry-monads (~> 1.5)
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
 
2
2
  # ToResult
3
3
 
4
- ToResult is a wrapper built over `dry-monads` to make the `Do Notation`, `Result` and `Try` concepts more handy and consistent to use, in particular to implement the **Railway Pattern**.
4
+ ToResult is a wrapper built over `dry-monads` to make the `Do Notation`, `Result` and `Try` concepts more handy and consistent to use, especially to implement the **Railway Pattern**.
5
5
 
6
6
  ## Why I created ToResult
7
7
 
@@ -120,7 +120,7 @@ class MyClass
120
120
  end
121
121
  ```
122
122
 
123
- now you can always use `ToResult` all the time you wanted to use `Success`, `Failure` or `Try` but with a more convenient interface and consistent behaviour.
123
+ now you can always use `ToResult` all the time you wanted to use `Try` or return `Success/Failure` but with a more convenient interface and consistent behaviour, my goal is to have a solution that can be used for every use-case.
124
124
 
125
125
  Look at this:
126
126
 
@@ -144,6 +144,30 @@ ToResult(only: [ArgumentError]) { yield Failure(YourCustomError.new('error code'
144
144
  # raises YourCustomError('error code')
145
145
  ```
146
146
 
147
+ ## Local and global callback on errors
148
+ to-result gives you the possibility to define a callback to be called when an error is raised inside the `ToResult` block, this is a handy place to log errors.
149
+
150
+ You can define a global callback, usually defined into an initializer:
151
+
152
+ ```ruby
153
+ # initializers/to_result.rb
154
+
155
+ ToResultMixin.configure do |c|
156
+ c.on_error = Proc.new { |e| Logger.log_error(e) }
157
+ end
158
+ ```
159
+
160
+ or a local callback:
161
+
162
+ ```ruby
163
+ ToResult(on_error: proc { |e| Logger.log_error(e) }) do
164
+ yield Failure(StandardError.new('error code'))
165
+ end
166
+ ```
167
+
168
+ you can even use both at the same time but keep in mind that **local callback overrides the global one**.
169
+
170
+
147
171
  ## Changelog
148
172
 
149
173
  [Changelog](CHANGELOG.md)
@@ -154,7 +178,7 @@ I'm already planning to implement some useful features:
154
178
  - [x] configurable error logging when an exception is catched inside `DoResult`
155
179
  e.g. sending the log to Airbrake or whathever service you are using
156
180
  - [x] transform/process the catched error => this can be handled with `alt_map` or other methods already available in `dry-monads`
157
- - [ ] any other suggestion would be appreciated 😁
181
+ - [ ] any type of suggestion is appreciated 😁
158
182
 
159
183
  ## Authors
160
184
 
data/lib/to-result.rb CHANGED
@@ -48,9 +48,10 @@ module ToResultMixin
48
48
  Proc.new do
49
49
  f.call
50
50
  rescue Dry::Monads::Do::Halt => e
51
- error = e.result
51
+ failure = error = e.result
52
+ error = error.failure if error.respond_to?(:failure)
52
53
  on_error.call(error) if on_error.respond_to?(:call)
53
- return error
54
+ return failure
54
55
  rescue *only => e
55
56
  on_error.call(e) if on_error.respond_to?(:call)
56
57
  raise e
@@ -1,6 +1,6 @@
1
1
  class FakeLogger
2
- def self.log_error
3
- true
2
+ def self.log_error(e)
3
+ e
4
4
  end
5
5
 
6
6
  def self.return_error(e)
@@ -67,7 +67,7 @@ class ToResultTest < Minitest::Test
67
67
  clean_room = Class.new(Object)
68
68
  clean_room.new.instance_eval do
69
69
  ToResultMixin.configure do |c|
70
- c.on_error = Proc.new { FakeLogger.log_error }
70
+ c.on_error = Proc.new { |e| FakeLogger.log_error(e) }
71
71
  end
72
72
  end
73
73
  end
@@ -78,6 +78,7 @@ class ToResultTest < Minitest::Test
78
78
  FakeLogger.expects(:log_error).once
79
79
 
80
80
  expected = StandardError.new(@value)
81
+
81
82
  assert ToResult { raise expected } == Failure(expected)
82
83
  end
83
84
 
@@ -108,6 +109,6 @@ class ToResultTest < Minitest::Test
108
109
 
109
110
  expected = StandardError.new(@value)
110
111
  FakeLogger.expects(:return_error).with(expected).returns(expected).once
111
- assert ToResult(on_error: local_on_error) { raise expected } == Failure(expected)
112
+ assert ToResult(on_error: local_on_error) { yield Failure(expected) } == Failure(expected)
112
113
  end
113
114
  end
data/to-result.gemspec CHANGED
@@ -5,7 +5,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = 'to-result'
8
- s.version = '0.1.0'
8
+ s.version = '0.1.1'
9
9
  s.summary = 'A wrapper over dry-monads to offer a handy and consistent way to implement the Railway pattern.'
10
10
  s.description = 'A wrapper over dry-monads to offer a handy and consistent way to implement the Railway pattern.'
11
11
  s.authors = ['Christian Toscano']
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: to-result
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christian Toscano
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-10-27 00:00:00.000000000 Z
11
+ date: 2023-08-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-monads
@@ -60,7 +60,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  requirements: []
63
- rubygems_version: 3.2.22
63
+ rubygems_version: 3.4.10
64
64
  signing_key:
65
65
  specification_version: 4
66
66
  summary: A wrapper over dry-monads to offer a handy and consistent way to implement