class Interactor::Initializer::Initialize

Attributes

attributes[R]
keyword_params[R]
target_class[R]

Public Class Methods

for(*args, **kwargs) click to toggle source
# File lib/interactor/initializer/initialize.rb, line 2
def self.for(*args, **kwargs)
  new(*args, **kwargs).run
end
new(target_class, attributes, keyword_params: false) click to toggle source
# File lib/interactor/initializer/initialize.rb, line 8
def initialize(target_class, attributes, keyword_params: false)
  @target_class = target_class
  @attributes = attributes
  @keyword_params = keyword_params
end

Public Instance Methods

run() click to toggle source
# File lib/interactor/initializer/initialize.rb, line 14
  def run
    target_class.class_eval <<-RUBY
      def initialize(#{initializer_signature(attributes)})
        #{attr_assignments(attributes)}
      end
    RUBY
  end

Private Instance Methods

attr_assignments(attributes) click to toggle source
# File lib/interactor/initializer/initialize.rb, line 30
def attr_assignments(attributes)
  attributes.inject('') do |assignments, attribute|
    "#{assignments}@#{attribute} = #{attribute};"
  end
end
initializer_signature(attributes) click to toggle source
# File lib/interactor/initializer/initialize.rb, line 24
def initializer_signature(attributes)
  return attributes.join(', ') unless keyword_params

  attributes.map { |attribute| "#{attribute}:" }.join(', ')
end