class ActiveDelivery::Lines::Base

Attributes

handler_class[W]
id[R]
options[R]
owner[RW]
resolver[R]

Public Class Methods

new(id:, owner:, **options) click to toggle source
# File lib/active_delivery/lines/base.rb, line 10
def initialize(id:, owner:, **options)
  @id = id
  @owner = owner
  @options = options.tap(&:freeze)
  @resolver = options[:resolver]
end

Public Instance Methods

dup_for(new_owner) click to toggle source
# File lib/active_delivery/lines/base.rb, line 17
def dup_for(new_owner)
  self.class.new(id: id, **options, owner: new_owner)
end
handler_class() click to toggle source
# File lib/active_delivery/lines/base.rb, line 40
def handler_class
  return @handler_class if instance_variable_defined?(:@handler_class)

  return @handler_class = nil if owner.abstract_class?

  @handler_class = resolve_class(owner.name) ||
    superclass_handler
end
notify(mid, *args, params:, sync:, **kwargs) click to toggle source
# File lib/active_delivery/lines/base.rb, line 35
def notify(mid, *args, params:, sync:, **kwargs)
  clazz = params.empty? ? handler_class : handler_class.with(**params)
  sync ? notify_now(clazz, mid, *args, **kwargs) : notify_later(clazz, mid, *args, **kwargs)
end
notify?(method_name) click to toggle source
# File lib/active_delivery/lines/base.rb, line 25
def notify?(method_name)
  handler_class.respond_to?(method_name)
end
notify_later(handler, mid, *args, **kwargs) click to toggle source
# File lib/active_delivery/lines/base.rb, line 32
def notify_later(handler, mid, *args, **kwargs)
end
notify_now(handler, mid, *args, **kwargs) click to toggle source
# File lib/active_delivery/lines/base.rb, line 29
def notify_now(handler, mid, *args, **kwargs)
end
resolve_class(name) click to toggle source
# File lib/active_delivery/lines/base.rb, line 21
def resolve_class(name)
  resolver&.call(name)
end

Private Instance Methods

superclass_handler() click to toggle source
# File lib/active_delivery/lines/base.rb, line 51
def superclass_handler
  handler_method = "#{id}_class"

  return if ActiveDelivery::Base == owner.superclass
  return unless owner.superclass.respond_to?(handler_method)

  owner.superclass.public_send(handler_method)
end