class Syskit::Composition::CompositionChildInstance
Proxy returned by the child_name_child handler
This is used to perform port mapping if needed
Public Class Methods
new(composition_task, child_name, child_task)
click to toggle source
# File lib/syskit/composition.rb, line 289 def initialize(composition_task, child_name, child_task) @composition_task, @child_name, @child_task = composition_task, child_name, child_task end
Public Instance Methods
as_plan()
click to toggle source
# File lib/syskit/composition.rb, line 292 def as_plan @child_task end
connect_ports(target_task, mappings)
click to toggle source
# File lib/syskit/composition.rb, line 296 def connect_ports(target_task, mappings) mapped_connections = Hash.new mappings.map do |(source, sink), policy| source = find_output_port(source).name mapped_connections[[source, sink]] = policy end @child_task.connect_ports(target_task, mapped_connections) end
disconnect_ports(target_task, mappings)
click to toggle source
# File lib/syskit/composition.rb, line 305 def disconnect_ports(target_task, mappings) mappings = mappings.map do |source, sink| source = find_output_port(source).name [source, sink] end @child_task.disconnect_ports(target_task, mappings) end
method_missing(m, *args, &block)
click to toggle source
# File lib/syskit/composition.rb, line 317 def method_missing(m, *args, &block) if m =~ /_port$/ port_name = $` mapped_port_name = @composition_task.map_child_port(@child_name, port_name) if port = @child_task.find_input_port(mapped_port_name) return port elsif port = @child_task.find_output_port(mapped_port_name) return port else raise NoMethodError, "task #{@child_task}, child #{@child_name} of #{@composition_task}, has no port called #{port_name}" end end @child_task.send(m, *args, &block) end
respond_to_missing?(m, include_private)
click to toggle source
Calls superclass method
Syskit::Coordination::TaskScriptExtension#respond_to_missing?
# File lib/syskit/composition.rb, line 313 def respond_to_missing?(m, include_private) (m =~ /_port$/) || super end