module Interaktor::Organizer::InstanceMethods

Public Instance Methods

call() click to toggle source

Invoke the organized Interaktors. An Interaktor::Organizer is expected NOT to define its own `#call` in favor of this default implementation.

@return [void]

# File lib/interaktor/organizer.rb, line 41
def call
  check_attribute_flow_valid

  self.class.organized.each do |interaktor|
    catch(:early_return) { interaktor.call!(@context) }
  end
end

Private Instance Methods

check_attribute_flow_valid() click to toggle source

@return [void]

# File lib/interaktor/organizer.rb, line 52
def check_attribute_flow_valid
  interaktors = self.class.organized

  # @type [Array<Symbol>]
  success_attributes_so_far = []

  success_attributes_so_far += self.class.required_input_attributes

  # @param interaktor [Class]
  interaktors.each do |interaktor|
    interaktor.required_input_attributes.each do |required_attr|
      unless success_attributes_so_far.include?(required_attr)
        raise Interaktor::Error::OrganizerMissingPassedAttributeError.new(interaktor, required_attr)
      end
    end

    success_attributes_so_far += interaktor.success_attributes

    next unless interaktor == interaktors.last

    self.class.success_attributes.each do |success_attr|
      unless success_attributes_so_far.include?(success_attr)
        raise Interaktor::Error::OrganizerSuccessAttributeMissingError.new(interaktor, success_attr)
      end
    end
  end
end