module Hyperstack::Internal::Receiver

Public Class Methods

format_callback(receiver, args) click to toggle source
# File lib/hyperstack/internal/receiver.rb, line 21
def format_callback(receiver, args)
  call_back =
    if args.last.is_a?(Symbol)
      method_name = args.pop
      ->(*aargs) { receiver.send(:"#{method_name}", *aargs) }
    elsif args.last.is_a?(Proc)
      args.pop
    end
  return call_back unless args.empty?
  message = 'At least one operation must be passed in to the \'receives\' macro'
  raise Legacy::Store::InvalidOperationError, message
end
mount(receiver, *args) { |params| ... } click to toggle source
# File lib/hyperstack/internal/receiver.rb, line 5
def mount(receiver, *args, &block)
  return if receiver.respond_to?(:unmounted?) && receiver.unmounted?
  # Format the callback to be Proc or Nil
  callback = format_callback(receiver, args)

  # Loop through receivers and call callback and/or block on dispatch
  args.each do |operation|
    id = operation.on_dispatch do |params|
      callback.call(params) if callback
      yield params if block
    end
    # TODO: broadcaster classes need to define unmount as well
    AutoUnmount.objects_to_unmount[receiver] << id if receiver.respond_to? :unmount
  end
end