class Roby::YARD::EventHandler

Public Instance Methods

process() click to toggle source
# File lib/roby/yard.rb, line 127
def process
    name = statement.parameters[0].jump(:tstring_content, :ident).source

    controlable = false
    if statement.parameters[1]
        statement.parameters[1].jump(:assoc).to_a.each_slice(2) do |key, value|
            if key.source == 'controlable:' || key.source == "command:"
                controlable = true
            end
        end
    end

    accessor = YARD::CodeObjects::MethodObject.new(namespace, "#{name}_event")
    register(accessor)
    register_group(accessor, "Task Events")
    accessor.docstring.add_tag(
        *YARD::Docstring.parser.create_tag("return", "[EventGenerator]"))

    happened = YARD::CodeObjects::MethodObject.new(namespace, "#{name}?")
    register(happened)
    register_group(happened, "Task Events")
    happened.docstring.add_tag(
        *YARD::Docstring.parser.create_tag("return", "[Boolean]"))

    if controlable
        command = YARD::CodeObjects::MethodObject.new(namespace, "#{name}!")
        register(command)
        register_group(command, "Task Events")
        command.parameters << ['context', 'nil']
    end

    push_state(scope: :class) do
        event_class = YARD::CodeObjects::ClassObject.new(namespace, "#{name.camelcase(true)}")
        register(event_class)
        event_class.docstring.replace(
            YARD::Docstring.new("Event class used to represent the events emitted by #{namespace}##{name}_event\n\n") +
            event_class.docstring)
    end
end