class Syskit::Models::DynamicDataService::InstantiationContext
Intermediate object used to evaluate the blocks given to Syskit::Models::Component#dynamic_service
Attributes
component_model[R]
The component model in which this service is being instantiated
dynamic_service[R]
The dynamic service description
name[R]
The name of the service that is being instantiated
options[R]
A set of options that are accessible from the instanciation block. This allows to create protocols for dynamic service creation, and is specific to the client component model @return [Hash]
service[R]
The instantiated service
Public Class Methods
new(component_model, name, dynamic_service, **options)
click to toggle source
# File lib/syskit/models/dynamic_data_service.rb, line 70 def initialize(component_model, name, dynamic_service, **options) @component_model, @name, @dynamic_service, @options = component_model, name, dynamic_service, options end
Public Instance Methods
argument(name, options = Hash.new)
click to toggle source
Proxy to declare a new argument on the (specialized) component model
@param (see Roby::Models::Task#argument)
# File lib/syskit/models/dynamic_data_service.rb, line 79 def argument(name, options = Hash.new) component_model.argument(name, options) end
driver_for(device_model, port_mappings = Hash.new, **options)
click to toggle source
# File lib/syskit/models/dynamic_data_service.rb, line 83 def driver_for(device_model, port_mappings = Hash.new, **options) dserv = provides(device_model, port_mappings, **options) component_model.argument "#{dserv.name}_dev" dserv end
provides(service_model, port_mappings = Hash.new, as: nil, **arguments)
click to toggle source
Proxy for #component_model#provides which does some sanity checks
# File lib/syskit/models/dynamic_data_service.rb, line 91 def provides(service_model, port_mappings = Hash.new, as: nil, **arguments) if service raise ArgumentError, "this dynamic service instantiation block already created one new service" end if !service_model.fullfills?(dynamic_service.service_model) raise ArgumentError, "#{service_model.short_name} does not fullfill the model for the dynamic service #{dynamic_service.name}, #{dynamic_service.service_model.short_name}" end if as && as != name raise ArgumentError, "the as: argument was given (with value #{as}) but it is required to be #{name}. Note that it can be omitted in a dynamic service block" end @service = component_model.provides_dynamic( service_model, port_mappings, as: name, bound_service_class: BoundDynamicDataService, **arguments) service.dynamic_service = dynamic_service service.dynamic_service_options = self.options.dup service rescue InvalidPortMapping => e raise InvalidProvides.new(component_model, service_model, e), "while instanciating the dynamic service #{dynamic_service}: #{e}", e.backtrace end