class Syskit::Models::Composition::DynamicServiceInstantiationContext

@api private

Context object under which the dynamic data service blocks are evaluated

The composition's version adds the ability to access the children and require dynamic services on them

Public Class Methods

new(component_model, name, dynamic_service, **options) click to toggle source
Calls superclass method
# File lib/syskit/models/composition.rb, line 570
def initialize(component_model, name, dynamic_service, **options)
    @specialized = Set.new
    super
end

Public Instance Methods

add(*args, **options, &block) click to toggle source
# File lib/syskit/models/composition.rb, line 588
def add(*args, **options, &block)
    child = component_model.add(*args, **options, &block)
    Child.new(self, child)
end
export(port, **options) click to toggle source
# File lib/syskit/models/composition.rb, line 584
def export(port, **options)
    component_model.export(port, **options)
end
method_missing(m, *args, &block) click to toggle source
Calls superclass method
# File lib/syskit/models/composition.rb, line 605
def method_missing(m, *args, &block)
    if m =~ /_child$/
        Child.new(self, component_model.public_send(m, *args, &block))
    else
        super
    end
end
overload(*args, **options, &block) click to toggle source
# File lib/syskit/models/composition.rb, line 593
def overload(*args, **options, &block)
    child = component_model.overload(*args, **options, &block)
    Child.new(self, child)
end
respond_to_missing?(m, include_private) click to toggle source
Calls superclass method
# File lib/syskit/models/composition.rb, line 598
def respond_to_missing?(m, include_private)
    if m =~ /_child$/
        component_model.respond_to?(m)
    else super
    end
end
specialized_child(child) click to toggle source
# File lib/syskit/models/composition.rb, line 575
def specialized_child(child)
    child_name = child.child_name
    if !@specialized.include?(child_name)
        @specialized << child_name
        component_model.overload child_name, child.specialize
    end
    component_model.find_child(child_name)
end