diff --git a/lib/interactor/initializer.rb b/lib/interactor/initializer.rb index 56406ee..d17590e 100644 --- a/lib/interactor/initializer.rb +++ b/lib/interactor/initializer.rb @@ -24,7 +24,7 @@ def initialize_with(*attributes) def initialize_with_keyword_params(*attributes) signature = attributes.map { |attr| "#{attr}:" }.join(', ') - class_methods = Interactor::Initializer::Helper.methods_with_keywords + class_methods = Interactor::Initializer::Helper.methods_with_keywords(attributes) Interactor::Initializer::Helper.modify_class(self, signature, attributes, class_methods) end diff --git a/lib/interactor/initializer/helper.rb b/lib/interactor/initializer/helper.rb index c4ed09c..3b3704e 100644 --- a/lib/interactor/initializer/helper.rb +++ b/lib/interactor/initializer/helper.rb @@ -40,18 +40,21 @@ def self.with(*args) RUBY end - def self.methods_with_keywords + def self.methods_with_keywords(attributes) + signature = attributes.map { |attr| "#{attr}:" }.join(', ') + initializer_params = attributes.map { |attr| "#{attr}: #{attr}" }.join(', ') + <<-RUBY - def self.for(args) - new(**args).run + def self.for(#{signature}) + new(#{initializer_params}).run end - def self.run(args) - new(**args).run + def self.run(#{signature}) + new(#{initializer_params}).run end - def self.with(args) - new(**args).run + def self.with(#{signature}) + new(#{initializer_params}).run end RUBY end diff --git a/spec/interactor/initializer_spec.rb b/spec/interactor/initializer_spec.rb index e82ea3f..d928131 100644 --- a/spec/interactor/initializer_spec.rb +++ b/spec/interactor/initializer_spec.rb @@ -68,19 +68,19 @@ def run end describe '.for' do - subject { interactor.for(params) } + subject { interactor.for(**params) } it { is_expected.to eq(:result) } end describe '.with' do - subject { interactor.with(params) } + subject { interactor.with(**params) } it { is_expected.to eq(:result) } end describe '.run' do - subject { interactor.run(params) } + subject { interactor.run(**params) } it { is_expected.to eq(:result) } end @@ -95,7 +95,7 @@ def run end context 'when incorrect keywords' do - subject { interactor.for(params) } + subject { interactor.for(**params) } let(:params) do { arg1: 'value2', arg4: 'value2' }