module IAmICan::ResultOf

Public Instance Methods

call(assignment, given, msg_prefix:, fail_msg:, config:) click to toggle source
# File lib/i_am_i_can/helpers/result_of.rb, line 52
def call(assignment, given, msg_prefix:, fail_msg:, config:)
  instances, names = given
  instances.map!(&:name).map!(&:to_sym)
  assignment = assignment.map(&:name).map(&:to_sym) unless assignment.first.is_a?(Symbol)

  to_be_assigned_names = (instances + names).uniq
  failed_items = to_be_assigned_names - assignment

  msg = msg_prefix + (assignment.blank? ? 'do nothing' : "#{assignment} DONE")
  msg << "; And #{failed_items} #{fail_msg}" if failed_items.present?

  if config.strict_mode && failed_items.present?
    raise Error, msg
  else
    Rails.logger.info("  * #{msg}".green) unless ENV['ITEST']
    assignment
  end
end