Class: Actor::Router

Inherits:
Object
  • Object
show all
Includes:
Actor
Defined in:
lib/actor/router.rb

Defined Under Namespace

Modules: Assertions Classes: AddRoute, RemoveRoute

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Actor

included

Constructor Details

#initializeRouter

Returns a new instance of Router.



8
9
10
11
12
# File 'lib/actor/router.rb', line 8

def initialize
  @routes = Hash.new do |hash, input|
    hash[input] = Set.new
  end
end

Instance Attribute Details

#kernelObject



81
82
83
# File 'lib/actor/router.rb', line 81

def kernel
  @kernel ||= Substitutes::Kernel.new
end

#routesObject (readonly)

Returns the value of attribute routes.



6
7
8
# File 'lib/actor/router.rb', line 6

def routes
  @routes
end

Instance Method Details

#add(reader, output_address) ⇒ Object



51
52
53
# File 'lib/actor/router.rb', line 51

def add reader, output_address
  routes[reader] << output_address
end

#configureObject



77
78
79
# File 'lib/actor/router.rb', line 77

def configure
  self.kernel = Kernel
end

#remove(reader, output_address) ⇒ Object



55
56
57
# File 'lib/actor/router.rb', line 55

def remove reader, output_address
  routes[reader].delete output_address
end

#route_messagesObject



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/actor/router.rb', line 59

def route_messages
  routed_messages = false

  routes.each do |input_reader, outputs|
    msg = input_reader.(wait: false)

    next unless msg

    routed_messages = true

    outputs.each do |output|
      writer.(msg, output)
    end
  end

  routed_messages
end