errgonomic 0.6.0 → 0.7.0

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: 4dc41a36e372dc0af60cb4282d28c3fd92575c1b6999a41222e4be9623ead934
4
- data.tar.gz: 6d5b368f9eabb77bfc1b3e459d18e29b6767681c08e83a77faf69df0bee7dcc0
3
+ metadata.gz: 1490dc9d568769e95cc3d584907bf7a4bffb1af0381de3e4ce9a141736133166
4
+ data.tar.gz: 75fe0c80ad6ee5067aa8cce76c78f293e22ca1019b9d3415c57688c9c64ec2b9
5
5
  SHA512:
6
- metadata.gz: e9e9b29acfc45cbfee45957b864c2ca0498765bd37a2066cd516a012a2397c6b6962695f5ff8844d63aeeaf177014cb16235559153d0d107557f0e4c4e35f26d
7
- data.tar.gz: 1484855cc2d7b22649679924958d34694e9e7726969d179147877ebaf31a34089e83c55881b330f3b63bfa8edf1a52f0598da5cc2439b3bf7795a9e96e97580d
6
+ metadata.gz: 836b910b35ffd4bef2e78a7e5f72548e952a3da57f2e7642baaeeae1ba7bf93992f09b62baca76f2918836621f2dfa5780bfc56beea9c359d38d0154ae601286
7
+ data.tar.gz: 1fd7d78dcebdbc6eda3f54471f5e7f41c9f2f2db718ee7885489de16d9fbdbe42bf00ae842f171a32067f187abd26e7d6d93c1cb3422d893805f6c2716b7eb67
data/gemset.nix CHANGED
@@ -269,7 +269,7 @@
269
269
  path = ./.;
270
270
  type = "path";
271
271
  };
272
- version = "0.6.0";
272
+ version = "0.7.0";
273
273
  };
274
274
  erubi = {
275
275
  groups = ["default" "development"];
@@ -250,6 +250,17 @@ module Errgonomic
250
250
  Ok(block.call(value))
251
251
  end
252
252
 
253
+ # Map the Err(e) to an Err(f), preserving the Ok
254
+ #
255
+ # @example
256
+ # Ok(:Alice).map_err { |_e| :Bob } # => Ok(:Alice)
257
+ # Err(:bob).map_err { |e| e.capitalize } # => Err(:Bob)
258
+ def map_err(&block)
259
+ return self if ok?
260
+
261
+ Err(block.call(value))
262
+ end
263
+
253
264
  # Refuse to serialize an unwrapped Result as a String. Results must be
254
265
  # correctly handled to access their inner value.
255
266
  #
@@ -271,6 +282,30 @@ module Errgonomic
271
282
  def to_json(*_args)
272
283
  raise Errgonomic::SerializeError, 'cannot serialize an unwrapped Result'
273
284
  end
285
+
286
+ # @example simple pattern match with variable capture of the value
287
+ # result = Errgonomic::Result::Ok.new(1)
288
+ # case result
289
+ # in Errgonomic::Result::Ok, value
290
+ # "Measurement is #{value}"
291
+ # in Errgonomic::Result::Err, err
292
+ # "Measurement is not available"
293
+ # end # => "Measurement is 1"
294
+ #
295
+ # @example more advanced pattern match against the kind of value
296
+ # result = Errgonomic::Result::Err.new(StandardError.new("nope"))
297
+ # case result
298
+ # in Errgonomic::Result::Ok, value
299
+ # "Measurement is #{value}"
300
+ # in Errgonomic::Result::Err, String => msg
301
+ # "Measurement failed with a message: #{msg}"
302
+ # in Errgonomic::Result::Err, Exception => e
303
+ # "Measurement produced an exception -- #{e.class}: #{e}"
304
+ # end # => "Measurement produced an exception -- StandardError: nope"
305
+ def deconstruct
306
+ [self, value]
307
+ end
308
+
274
309
  end
275
310
 
276
311
  # The Ok variant.
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Errgonomic
4
- VERSION = '0.6.0'
4
+ VERSION = '0.7.0'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: errgonomic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Zadrozny