class Core::Handler::Callable

public

Attributes

pipelines[R]

Public Class Methods

build_name() click to toggle source
# File lib/core/handler/callable.rb, line 15
def build_name
  suffix = generate_random_suffix
  if __used_random_suffixes__.include?(suffix)
    build_name
  else
    __used_random_suffixes__ << suffix
    "callback_#{suffix}"
  end
end
generate_random_suffix() click to toggle source
# File lib/core/handler/callable.rb, line 25
def generate_random_suffix
  SecureRandom.hex(8)
end
new(object) click to toggle source
# File lib/core/handler/callable.rb, line 38
def initialize(object)
  @object = object
  @mutex = Mutex.new
  @compiled = false
  @pipelines = {
    __core_event_global__: Core::Pipeline::Callable.new(@object)
  }
end

Public Instance Methods

finalize() click to toggle source
public
# File lib/core/handler/callable.rb, line 98
def finalize
  compile

  self
end
handle(*events, global: false, method: nil, context: nil, &block) click to toggle source
public
# File lib/core/handler/callable.rb, line 67
def handle(*events, global: false, method: nil, context: nil, &block)
  @mutex.synchronize do
    if global == true
      @pipelines[:__core_event_global__].action(method, context: context, curry: true, &block)
    end

    needs_recompile = false

    events.each do |event|
      event = event.to_sym if event.is_a?(String)

      unless @pipelines.include?(event)
        @pipelines[event] = Core::Pipeline::Callable.new(@object)
        needs_recompile = true
      end

      @pipelines[event].action(method, context: context, curry: true, &block)
    end

    recompile if compiled? && needs_recompile
  end
end
initialize_copy(...) click to toggle source
Calls superclass method
# File lib/core/handler/callable.rb, line 47
def initialize_copy(...)
  @pipelines = @pipelines.each_pair.each_with_object({}) { |(key, value), hash|
    hash[key] = value.clone
  }

  super
end
relocate(object) click to toggle source
public

Relocates to another object context.

# File lib/core/handler/callable.rb, line 57
def relocate(object)
  @object = object

  @pipelines.each_value do |pipeline|
    pipeline.relocate(object)
  end
end
trigger(object, event, ...) click to toggle source
public
# File lib/core/handler/callable.rb, line 92
def trigger(object, event, ...)
  finalize.trigger(object, event, ...)
end

Private Instance Methods

call_handler(object, event, handled, *args, **kwargs, &block) click to toggle source
# File lib/core/handler/callable.rb, line 127
        def call_handler(object, event, handled, *args, **kwargs, &block)
  if (pipeline = @pipelines[event])
    pipeline.call(object, *args, event: handled, **kwargs, &block)
  end
end
compile() click to toggle source
# File lib/core/handler/callable.rb, line 104
        def compile
  return if compiled?

  instance_eval(Compiler.compile(self), __FILE__, __LINE__ - 1)
  @compiled = true
end
compiled?() click to toggle source
# File lib/core/handler/callable.rb, line 116
        def compiled?
  @compiled == true
end
recompile() click to toggle source
# File lib/core/handler/callable.rb, line 111
        def recompile
  remove_compiled_trigger
  compile
end
remove_compiled_trigger() click to toggle source
# File lib/core/handler/callable.rb, line 120
        def remove_compiled_trigger
  return unless compiled?

  singleton_class.remove_method(:trigger)
  @compiled = false
end