Class: Emit::Alternation

Inherits:
Object
  • Object
show all
Defined in:
lib/emit/alternation.rb

Instance Method Summary collapse

Constructor Details

#initialize(guards) ⇒ Alternation

Returns a new instance of Alternation.



3
4
5
6
7
8
9
10
11
12
# File 'lib/emit/alternation.rb', line 3

def initialize(guards)
  @guards = guards.map do |guard|
    case guard
    when InputGuard  then guard
    when OutputGuard then guard
    else
      InputGuard.new(guard)
    end
  end
end

Instance Method Details

#executeObject



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/emit/alternation.rb', line 14

def execute
  idx, request, channel, operation = choose

  if @guards[idx]
    action = @guards[idx].action
    fail "Failed executing action in alternation." unless [Proc, Method].include?(action.class)

    case operation
    when :write then action.()
    when :read  then action.(request.message)
    end
  end

  [channel, request.message]
end