Class: NtiEventBus::DSL

Inherits:
Object
  • Object
show all
Defined in:
lib/nti_event_bus/dsl.rb

Overview

Evaluation context for event-definition files.

A root file is instance_evaled against a DSL instance; it may draw additional files from the configured events_dir, and declares subscriptions with on_event / perform:

on_event 'order.created' do
perform Orders::Handlers::Created
end

Instance Method Summary collapse

Constructor Details

#initialize(registry, events_dir) ⇒ DSL

Returns a new instance of DSL.



13
14
15
16
17
# File 'lib/nti_event_bus/dsl.rb', line 13

def initialize(registry, events_dir)
  @registry = registry
  @events_dir = events_dir
  @current_event_name = nil
end

Instance Method Details

#draw(name) ⇒ Object

Raises:



39
40
41
42
43
44
45
46
# File 'lib/nti_event_bus/dsl.rb', line 39

def draw(name)
  raise NotConfiguredError, 'NtiEventBus.configuration.events_dir must be set' unless @events_dir

  path = File.join(@events_dir.to_s, "#{name}.rb")
  raise LoadError, "Event file not found: #{path}" unless File.exist?(path)

  instance_eval(File.read(path), path.to_s)
end

#on_event(event_name, &block) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
# File 'lib/nti_event_bus/dsl.rb', line 19

def on_event(event_name, &block)
  raise ArgumentError, 'Nested `on_event` not allowed' if @current_event_name
  raise ArgumentError, 'Block required for `on_event`' unless block

  event_name = normalize_event!(event_name)

  @current_event_name = event_name
  instance_eval(&block)
ensure
  @current_event_name = nil
end

#perform(handlers) ⇒ Object

Raises:

  • (ArgumentError)


31
32
33
34
35
36
37
# File 'lib/nti_event_bus/dsl.rb', line 31

def perform(handlers)
  raise ArgumentError, 'perform must be inside `on_event`' unless @current_event_name

  Array(handlers).each do |handler|
    @registry.add(@current_event_name, handler)
  end
end