Class: Vedeu::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.

Examples:

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

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

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

Returns a new instance of Vedeu::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.



24
25
26
27
28
# File 'lib/vedeu/events/trigger.rb', line 24

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

Instance Attribute Details

#argsArray (readonly, protected)

Returns:

  • (Array)


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

def args
  @args
end

#nameSymbol (readonly, protected)

Returns:

  • (Symbol)


47
48
49
# File 'lib/vedeu/events/trigger.rb', line 47

def name
  @name
end

#repositoryVedeu::Repository (readonly, protected)

Returns:



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

def repository
  @repository
end

Class Method Details

.trigger(name, *args) ⇒ Array

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)


16
17
18
# File 'lib/vedeu/events/trigger.rb', line 16

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

Instance Method Details

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

Return all of the registered events for this name.

Returns:



67
68
69
70
71
# File 'lib/vedeu/events/trigger.rb', line 67

def registered_events
  return [] unless repository.registered?(name)

  repository.find(name)
end

#resultsArray<void>|void (private)

Returns:

  • (Array<void>|void)


60
61
62
# File 'lib/vedeu/events/trigger.rb', line 60

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

#triggerArray

Trigger the event and return the result (if one) or an array of results.

Returns:

  • (Array)


33
34
35
36
37
38
39
40
41
# File 'lib/vedeu/events/trigger.rb', line 33

def trigger
  if results.one?
    results.first

  else
    results

  end
end