Skip to content

Allow matching by class instead of just step_name #138

@andrepcg

Description

@andrepcg

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

  • Affects my production application: NO
  • Ruby version: 2.7.2
  • OS: debian

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions