Skip to content

Commit

Permalink
Define keyword arguments explicitly
Browse files Browse the repository at this point in the history
  • Loading branch information
dostu committed Jun 12, 2023
1 parent 49a18fa commit 49d9270
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 12 deletions.
2 changes: 1 addition & 1 deletion lib/interactor/initializer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
17 changes: 10 additions & 7 deletions lib/interactor/initializer/helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
8 changes: 4 additions & 4 deletions spec/interactor/initializer_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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' }
Expand Down

0 comments on commit 49d9270

Please sign in to comment.