# Dry-transaction keyword parameters in match blocks in Ruby 3.0

**URL:** https://discourse.dry-rb.org/t/dry-transaction-keyword-parameters-in-match-blocks-in-ruby-3-0/1343
**Category:** Support
**Created:** [September 15, 2021, 11:44am UTC](https://discourse.dry-rb.org/t/dry-transaction-keyword-parameters-in-match-blocks-in-ruby-3-0/1343 "2021-09-15T11:44:39Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![dalbrecht](https://yyz1.discourse-cdn.com/flex031/user_avatar/discourse.dry-rb.org/dalbrecht/32/703_2.png) [@dalbrecht](https://discourse.dry-rb.org/u/dalbrecht)
#### Post date: [September 15, 2021, 11:44am UTC](https://discourse.dry-rb.org/t/dry-transaction-keyword-parameters-in-match-blocks-in-ruby-3-0/1343/1 "2021-09-15T11:44:39Z")

</div>

I can not use keyword parameters in dry-transaction match blocks in Ruby 3.0.

This code sample works on Ruby 2.7 but returns an error on 3.0:

```auto
require "dry/transaction"

class DoSomething
  include Dry::Transaction

  step :run

  private

  def run
    Success(a: 1, b: 2)
  end
end

DoSomething.new.call do |m|
  m.success { |a:, b:| puts "#{a}#{b}" }
  m.failure {}
end

```

Exception raised:  
`ArgumentError: missing keywords: :a, :b`

From what I understand keyword parameters in Ruby 3.0 should be passed with a double splat operator and maybe that’s the problem?  
[https://www.ruby-lang.org/en/news/2019/12/12/separation-of-positional-and-keyword-arguments-in-ruby-3-0/#typical-cases](https://www.ruby-lang.org/en/news/2019/12/12/separation-of-positional-and-keyword-arguments-in-ruby-3-0/#typical-cases)

Or am I doing something wrong?

---

<div class="post-metadata">

### Author: ![flash-gordon](https://yyz1.discourse-cdn.com/flex031/user_avatar/discourse.dry-rb.org/flash-gordon/32/494_2.png) [@flash-gordon](https://discourse.dry-rb.org/u/flash-gordon)
#### Post date: [September 18, 2021, 12:55pm UTC](https://discourse.dry-rb.org/t/dry-transaction-keyword-parameters-in-match-blocks-in-ruby-3-0/1343/2 "2021-09-18T12:55:49Z")

</div>

I don’t think this will work on ruby 3.0, it was an intentional breaking change. It’s not reliable to pass hash values as keywords to a handling block either so the only option is changing your code.

---

<div class="post-metadata">

### Author: ![dalbrecht](https://yyz1.discourse-cdn.com/flex031/user_avatar/discourse.dry-rb.org/dalbrecht/32/703_2.png) [@dalbrecht](https://discourse.dry-rb.org/u/dalbrecht)
#### Post date: [September 20, 2021, 6:27am UTC](https://discourse.dry-rb.org/t/dry-transaction-keyword-parameters-in-match-blocks-in-ruby-3-0/1343/3 "2021-09-20T06:27:35Z")

</div>

Ok, thanks for the response!

---

<div class="post-metadata">

### Author: ![alassek](https://yyz1.discourse-cdn.com/flex031/user_avatar/discourse.dry-rb.org/alassek/32/314_2.png) [@alassek](https://discourse.dry-rb.org/u/alassek)
#### Post date: [September 21, 2021, 2:39am UTC](https://discourse.dry-rb.org/t/dry-transaction-keyword-parameters-in-match-blocks-in-ruby-3-0/1343/4 "2021-09-21T02:39:34Z")

</div>

If you’re running Ruby 3.0, then the pattern-matching basically makes dry-matcher obsolete

```ruby
case DoSomething.new.call
in Success(a:, b:)
  puts "#{a}#{b}"
in Failure(err)
  # handle err
end

```
