Class: Jace::Registry

Inherits:
Object
  • Object
show all
Defined in:
lib/jace/registry.rb

Overview

Class responsible for registering handlers to events

Author:

  • Darthjee

Instance Method Summary collapse

Instance Method Details

#eventsArray<Symbol>

Registered events

Returns:

  • (Array<Symbol>)


19
20
21
# File 'lib/jace/registry.rb', line 19

def events
  registry.keys
end

#register(event, instant = :after, &block) ⇒ Array<Proc>

Register a handler to an event

Examples:

registering an event

registry = described_class.new

registry.register(:the_event) do
  do_something_after
end

registry.register(:the_event, :before) do
  do_something_before
end

Parameters:

  • event (Symbol, String)

    event name

  • instant (Symbol) (defaults to: :after)

    intant where the handler will be ran (before or after)

  • block (Proc)

    block to be executed when the event is called

Returns:

  • (Array<Proc>)


42
43
44
45
# File 'lib/jace/registry.rb', line 42

def register(event, instant = :after, &block)
  registry[event.to_sym] ||= Dispatcher.new
  registry[event.to_sym].send(instant) << block
end

#registryHash

Event & Handlers registry

Returns:

  • (Hash)

    map of all events and the registered handlers



12
13
14
# File 'lib/jace/registry.rb', line 12

def registry
  @registry ||= {}
end

#trigger(event, context, &block) ⇒ Object

Triggers an event

Examples:

triggering an event

class SomeContext
  def do_something(instant)
    puts "doing something #{instant}"
  end
end

registry = described_class.new
context = SomeContext.new

registry.register(:the_event) { do_something(:after) }
registry.register(:the_event, :before) { do_something(:before) }

registry.trigger(:the_event, context) do
 context.do_something(:middle)
end

# puts 'doing something before',
# puts 'doing something middle',
# puts 'doing something after'

Parameters:

  • event (Symbol, String)

    event to be triggered

  • context (Object)

    context where the events will be ran

Returns:

  • (Object)

    the result of the block call



73
74
75
# File 'lib/jace/registry.rb', line 73

def trigger(event, context, &block)
  dispatcher_for(event).dispatch(context, &block)
end