Result matcher

dry-matcher provides a ready-to-use ResultMatcher for working with Result or Try monads from dry-monads or any other compatible gems.

require "dry/monads/result"
require "dry/matcher/result_matcher"

value = Dry::Monads::Success("success!")

result = Dry::Matcher::ResultMatcher.(value) do |m|
  m.success(Integer) do |i|
    "Got int: #{i}"
  end

  m.success do |v|
    "Yay: #{v}"
  end

  m.failure :not_found do |_err, reason|
    "Nope: #{reason}"
  end

  m.failure do |v|
    "Boo: #{v}"
  end
end

result # => "Yay: success!"