Class: Vedeu::Events::Trigger

Inherits:
Object
  • Object
show all
Defined in:
lib/vedeu/events/trigger.rb

Overview

Trigger a registered or system event by name with arguments. If the event stored returns a value, that is returned. If multiple events are registered for a name, then the result of each event will be returned as part of a collection.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, *args) ⇒ Vedeu::Events::Trigger

Returns a new instance of Vedeu::Events::Trigger.

Parameters:

  • name (Symbol)

    The name of the event you wish to trigger. The event does not have to exist.

  • args (Array)

    Any arguments the event needs to execute correctly.



30
31
32
33
34
# File 'lib/vedeu/events/trigger.rb', line 30

def initialize(name, *args)
  @name = name
  @args = args
  @repository = Vedeu.events
end

Instance Attribute Details

#argsArray (readonly, protected)

Returns:

  • (Array)


54
55
56
# File 'lib/vedeu/events/trigger.rb', line 54

def args
  @args
end

#nameSymbol (readonly, protected)

Returns:

  • (Symbol)


50
51
52
# File 'lib/vedeu/events/trigger.rb', line 50

def name
  @name
end

#repositoryVedeu::Repositories::Repository (readonly, protected)



58
59
60
# File 'lib/vedeu/events/trigger.rb', line 58

def repository
  @repository
end

Class Method Details

.trigger(name, *args) ⇒ Array

Trigger an event by name.

Examples:

Vedeu.trigger(:my_event, :oxidize, 'nitrogen')

Parameters:

  • name (Symbol)

    The name of the event you wish to trigger. The event does not have to exist.

  • args (Array)

    Any arguments the event needs to execute correctly.

Returns:

  • (Array)


19
20
21
# File 'lib/vedeu/events/trigger.rb', line 19

def self.trigger(name, *args)
  new(name, *args).trigger
end

Instance Method Details

#registered_eventsArray|Array<Vedeu::Events::Event> (private)

Return all of the registered events for this name.

Returns:



70
71
72
73
74
75
76
77
78
# File 'lib/vedeu/events/trigger.rb', line 70

def registered_events
  return repository.find(name) if repository.registered?(name)

  Vedeu::Events::Aliases.find(name).map do |event_name|
    Vedeu::Events::Trigger.trigger(event_name, *args)
  end

  []
end

#resultsArray<void>|void (private)

Returns:

  • (Array<void>|void)


63
64
65
# File 'lib/vedeu/events/trigger.rb', line 63

def results
  @results ||= registered_events.map { |event| event.trigger(*args) }
end

#triggerArray

Trigger the event and return the result or an array of results.

Returns:

  • (Array)


40
41
42
43
44
# File 'lib/vedeu/events/trigger.rb', line 40

def trigger
  return results[0] if results.one?

  results
end