class Syskit::CLI::GenMain

Public Instance Methods

app(dir = nil) click to toggle source
Calls superclass method
# File lib/syskit/cli/gen_main.rb, line 10
def app(dir = nil)
    dir = super(dir, init_path: 'syskit_app')

    directory 'syskit_app/', File.join(dir),
        verbose: !options[:quiet]
    dir
end
bus(name) click to toggle source
# File lib/syskit/cli/gen_main.rb, line 33
def bus(name)
    Roby.app.require_app_dir(needs_current: true)
    Roby.app.load_base_config

    file_name, class_name = Roby::CLI::Gen.resolve_name(
        'bus', name, options[:robot], ['models', 'devices'], ["Devices"])

    template File.join('bus', 'class.rb'),
        File.join('models', 'devices', *file_name) + ".rb",
        context: Roby::CLI::Gen.make_context('bus_name' => class_name)
    template File.join('bus', "test.rb"),
        File.join('test', 'devices', *file_name[0..-2], "test_#{file_name[-1]}.rb"),
        context: Roby::CLI::Gen.make_context(
            'bus_name' => class_name,
            'require_path' => File.join('models', "devices", *file_name))
end
cmp(name) click to toggle source
# File lib/syskit/cli/gen_main.rb, line 100
def cmp(name)
    Roby.app.require_app_dir(needs_current: true)
    Roby.app.load_base_config

    file_name, class_name = Roby::CLI::Gen.resolve_name(
        'composition', name, options[:robot], ['models', 'compositions'], ["Compositions"])

    template File.join('cmp', 'class.rb'),
        File.join('models', 'compositions', *file_name) + ".rb",
        context: Roby::CLI::Gen.make_context('class_name' => class_name)
    template File.join('cmp', "test.rb"),
        File.join('test', 'compositions', *file_name[0..-2], "test_#{file_name[-1]}.rb"),
        context: Roby::CLI::Gen.make_context(
            'class_name' => class_name,
            'require_path' => File.join('models', "compositions", *file_name))
end
dev(name) click to toggle source
# File lib/syskit/cli/gen_main.rb, line 66
def dev(name)
    Roby.app.require_app_dir(needs_current: true)
    Roby.app.load_base_config

    file_name, class_name = Roby::CLI::Gen.resolve_name(
        'device', name, options[:robot], ['models', 'devices'], ["Devices"])

    template File.join('dev', 'class.rb'),
        File.join('models', 'devices', *file_name) + ".rb",
        context: Roby::CLI::Gen.make_context('dev_name' => class_name)
    template File.join('dev', "test.rb"),
        File.join('test', 'devices', *file_name[0..-2], "test_#{file_name[-1]}.rb"),
        context: Roby::CLI::Gen.make_context(
            'dev_name' => class_name,
            'require_path' => File.join('models', "devices", *file_name))
end
orogen(project_name) click to toggle source
# File lib/syskit/cli/gen_main.rb, line 226
def orogen(project_name)
    Roby.app.require_app_dir(needs_current: true)
    Roby.app.single = true
    Roby.app.base_setup
    Syskit.conf.only_load_models = true
    Roby.app.setup

    project = Roby.app.using_task_library(project_name)
    orogen_models = project.self_tasks.values
    template File.join('orogen/class.rb'),
        File.join(Roby.app.app_dir, 'models', 'orogen', "#{project_name}.rb"),
        context: Roby::CLI::Gen.make_context(
            'orogen_project_name' => project_name,
            'orogen_models' => orogen_models)
    template File.join('orogen/test.rb'),
        File.join(Roby.app.app_dir, 'test', 'orogen', "test_#{project_name}.rb"),
        context: Roby::CLI::Gen.make_context(
            'orogen_project_name' => project_name,
            'orogen_models' => orogen_models)
ensure
    Roby.app.cleanup
    Roby.app.base_cleanup
end
orogenconf(model_name) click to toggle source
# File lib/syskit/cli/gen_main.rb, line 281
def orogenconf(model_name)
    Roby.app.require_app_dir(needs_current: true)
    Roby.app.load_base_config

    orogen_model_name = model_name
    Roby.app.using_task_library(model_name.split('::').first)
    task_model = Syskit::TaskContext.find_model_from_orogen_name(model_name)
    if !task_model
        raise Roby::CLI::CLIInvalidArguments, "cannot find a task model called #{model_name}"
    end

    file_name = File.join('config', 'orogen', *options[:robot], "#{task_model.orogen_model.name}.yml")
    section_name  = "default"

    section = nil
    begin
        Orocos.run task_model.orogen_model => "oroconf_extract", oro_logfile: '/dev/null' do
            task = Orocos.get "oroconf_extract"
            task_model.configuration_manager.extract(section_name, task)
            section = task_model.configuration_manager.conf(section_name)
            section = Orocos::TaskConfigurations.to_yaml(section)
        end
    rescue Exception => e
        if !section
            raise Roby::CLI::CLICommandFailed, "failed to start a component of model #{task_model.orogen_model.name}, cannot create a configuration file with default values"
        end
    end

    if section
        content = orogenconf_generate_section(section, task_model.orogen_model)
        template File.join('orogenconf', 'conf.yml'), file_name,
            context: Roby::CLI::Gen.make_context('section_name' => section_name, 'content' => content)
    end
end
orogenconf_generate_section(section, orogen_task_model) click to toggle source
# File lib/syskit/cli/gen_main.rb, line 251
def orogenconf_generate_section(section, orogen_task_model)
    section.keys.sort.flat_map do |property_name|
        if (p = orogen_task_model.find_property(property_name)) && (doc = p.doc)
            doc = doc.split("\n").map { |s| "# #{s}" }.join("\n")
        else
            doc = "# no documentation available for this property"
        end

        property_hash = { property_name => section[property_name] }
        yaml = YAML.dump(property_hash)
        [doc, yaml.split("\n")[1..-1].join("\n")]
    end.join("\n")
end
profile(name) click to toggle source
# File lib/syskit/cli/gen_main.rb, line 196
def profile(name)
    Roby.app.require_app_dir(needs_current: true)
    Roby.app.load_base_config

    file_name, class_name = Roby::CLI::Gen.resolve_name(
        'profile', name, options[:robot], ['models', 'profiles'], ["Profiles"])

    template File.join('profile', 'class.rb'),
        File.join('models', 'profiles', *file_name) + ".rb",
        context: Roby::CLI::Gen.make_context('class_name' => class_name)
    template File.join('profile', "test.rb"),
        File.join('test', 'profiles', *file_name[0..-2], "test_#{file_name[-1]}.rb"),
        context: Roby::CLI::Gen.make_context(
            'class_name' => class_name,
            'require_path' => File.join('models', "profiles", *file_name))
end
ruby_task(name) click to toggle source
# File lib/syskit/cli/gen_main.rb, line 134
def ruby_task(name)
    Roby.app.require_app_dir(needs_current: true)
    Roby.app.load_base_config

    file_name, class_name = Roby::CLI::Gen.resolve_name(
        'ruby task', name, options[:robot], ['models', 'compositions'], ["Compositions"])

    template File.join('ruby_task', 'class.rb'),
        File.join('models', 'compositions', *file_name) + ".rb",
        context: Roby::CLI::Gen.make_context('class_name' => class_name)
    template File.join('ruby_task', "test.rb"),
        File.join('test', 'compositions', *file_name[0..-2], "test_#{file_name[-1]}.rb"),
        context: Roby::CLI::Gen.make_context(
            'class_name' => class_name,
            'require_path' => File.join('models', "compositions", *file_name))
end
srv(name) click to toggle source
# File lib/syskit/cli/gen_main.rb, line 167
def srv(name)
    Roby.app.require_app_dir(needs_current: true)
    Roby.app.load_base_config

    file_name, class_name = Roby::CLI::Gen.resolve_name(
        'service', name, options[:robot], ['models', 'services'], ["Services"])

    template File.join('srv', 'class.rb'),
        File.join('models', 'services', *file_name) + ".rb",
        context: Roby::CLI::Gen.make_context('class_name' => class_name)
end