diff --git a/lib/dry/cli.rb b/lib/dry/cli.rb index d0b8c13..58c68df 100644 --- a/lib/dry/cli.rb +++ b/lib/dry/cli.rb @@ -112,9 +112,9 @@ def perform_registry(arguments) command, args = parse(result.command, result.arguments, result.names) - result.before_callbacks.run(command, args) + result.before_callbacks.run(command, **args) command.call(**args) - result.after_callbacks.run(command, args) + result.after_callbacks.run(command, **args) end # Parse arguments for a command. diff --git a/lib/dry/cli/command_registry.rb b/lib/dry/cli/command_registry.rb index eb08c75..f05a703 100644 --- a/lib/dry/cli/command_registry.rb +++ b/lib/dry/cli/command_registry.rb @@ -243,9 +243,9 @@ def append(&callback) # @since 0.4.0 # @api private - def run(context, *args) + def run(context, **args) chain.each do |callback| - context.instance_exec(*args, &callback) + context.instance_exec(**args, &callback) end end end diff --git a/spec/integration/third_party_gems_spec.rb b/spec/integration/third_party_gems_spec.rb index e012f31..ab26b5f 100644 --- a/spec/integration/third_party_gems_spec.rb +++ b/spec/integration/third_party_gems_spec.rb @@ -7,10 +7,12 @@ expected = <<~OUTPUT before command callback Foo::Webpack::CLI::CallbacksCommand {:url=>"https://hanamirb.test", :dir=>"."} before callback (class), 2 arg(s): {:url=>"https://hanamirb.test", :dir=>"."} + before callback (class), kwarg(s): url: https://hanamirb.test, dir: . before callback (object), 2 arg(s): {:url=>"https://hanamirb.test", :dir=>"."} dir: ., url: "https://hanamirb.test" after command callback Foo::Webpack::CLI::CallbacksCommand {:url=>"https://hanamirb.test", :dir=>"."} after callback (class), 2 arg(s): {:url=>"https://hanamirb.test", :dir=>"."} + after callback (class), kwarg(s): url: https://hanamirb.test, dir: . after callback (object), 2 arg(s): {:url=>"https://hanamirb.test", :dir=>"."} OUTPUT expect(output).to eq(expected) diff --git a/spec/support/fixtures/foo b/spec/support/fixtures/foo index 4f1dc44..d68f619 100755 --- a/spec/support/fixtures/foo +++ b/spec/support/fixtures/foo @@ -541,6 +541,12 @@ module Callbacks end end + class BeforeKwargsClass + def call(url:, dir:, **) + puts "before callback (class), kwarg(s): url: #{url}, dir: #{dir}" + end + end + class AfterClass def call(args) puts "after callback (class), #{count(args)} arg(s): #{args.inspect}" @@ -553,6 +559,12 @@ module Callbacks end end + class AfterKwargsClass + def call(url:, dir:, **) + puts "after callback (class), kwarg(s): url: #{url}, dir: #{dir}" + end + end + class Before def call(args) puts "before callback (object), #{count(args)} arg(s): #{args.inspect}" @@ -580,7 +592,9 @@ end # rubocop:enable Layout/LineLength Foo::CLI::Commands.before("callbacks", Callbacks::BeforeClass) +Foo::CLI::Commands.before("callbacks", Callbacks::BeforeKwargsClass) Foo::CLI::Commands.after("callbacks", Callbacks::AfterClass) +Foo::CLI::Commands.after("callbacks", Callbacks::AfterKwargsClass) Foo::CLI::Commands.before("callbacks", Callbacks::Before.new) Foo::CLI::Commands.after("callbacks", Callbacks::After.new)