dry-rb / dry-transaction

Business transaction DSL
http://dry-rb.org/gems/dry-transaction
MIT License
468 stars 55 forks source link

Allow matching by class instead of just step_name #138

Open andrepcg opened 2 years ago

andrepcg commented 2 years ago

Describe the bug

When calling a transaction with a block I can't match the result by the failure class and only by the name of the step.

To Reproduce

class TestOp
  include Dry::Transaction

  step :validate

  def validate(input)
    Contract.new.call(**input).to_monad
  end
end

TestOp.new.call({}) do |m|
  m.failure(Dry::Validation::Result) do |validation|
    # ... <- doesn't match here
  end

  m.failure do
    # ... <- it matches here
  end

Expected behavior

It should match by the resulting class and not just by the step name.

However, if I don't call it with a block and instead I pattern match the result, it works as intended.

op = TestOp.new.call({})
case op
in Dry::Monads::Failure(Dry::Validation::Result => validation)
  # <- it reaches here
end

My environment

saksham-jain commented 2 years ago

Is this issue been taken up, if not I would like to pick it up and fix it?