Skip to content

Commit

Permalink
Match multiple step names with ResultMatcher on failure
Browse files Browse the repository at this point in the history
  • Loading branch information
TastyPi committed Jun 22, 2023
1 parent 5b33df1 commit 10180fd
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 3 deletions.
6 changes: 3 additions & 3 deletions lib/dry/transaction/result_matcher.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@ module Transaction
resolve: -> result { result.value! }
),
failure: Dry::Matcher::Case.new(
match: -> result, step_name = nil {
if step_name
result.failure? && result.failure.step.name == step_name
match: -> result, *step_names {
if step_names.any?
result.failure? && step_names.include?(result.failure.step.name)
else
result.failure?
end
Expand Down
20 changes: 20 additions & 0 deletions spec/unit/result_matcher_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# frozen_string_literal: true

RSpec.describe Dry::Transaction::ResultMatcher do
include Dry::Monads[:result]

describe "when failure" do
it "can match using multiple step names" do
expected = Object.new
actual = nil

failure = Failure(Dry::Transaction::StepFailure.new(Struct.new(:name).new(:step), expected))
Dry::Transaction::ResultMatcher.(failure) do |on|
on.success { raise }
on.failure(:step, :other_step) { |value| actual = value }
end

expect(actual).to be expected
end
end
end

0 comments on commit 10180fd

Please sign in to comment.