class Engine2::MenuBuilder

Attributes

entries[R]
name[RW]

Public Class Methods

new(name, properties = {}) click to toggle source
# File lib/engine2/core.rb, line 606
def initialize name, properties = {}
    @name = name
    @properties = properties
    @entries = []
end

Public Instance Methods

divider() click to toggle source
# File lib/engine2/core.rb, line 651
def divider
    @entries << {divider: true}
end
each() { |m| ... } click to toggle source
# File lib/engine2/core.rb, line 667
def each &blk
    @entries.each do |m|
        if m.is_a? MenuBuilder
            m.each &blk
        else
            yield m
        end
    end
end
modify_option(name, properties) click to toggle source
# File lib/engine2/core.rb, line 644
def modify_option name, properties
    index = option_index(name)
    entry = @entries[index]
    props = entry.is_a?(MenuBuilder) ? entry.properties : entry
    props.merge!(properties)
end
option(name, properties = {}) click to toggle source
# File lib/engine2/core.rb, line 616
def option name, properties = {}, index = @entries.size, &blk
    if blk
        entries = MenuBuilder.new(name, properties)
        entries.instance_eval(&blk)
        @entries.insert index, entries
    else
        @entries.insert index, {name: name}.merge(properties)
    end
end
option_after(iname, name, properties = {}) click to toggle source
# File lib/engine2/core.rb, line 630
def option_after iname, name, properties = {}, &blk
    option name, properties, option_index(iname) + 1, &blk
end
option_at(index, name, properties = {}) click to toggle source
# File lib/engine2/core.rb, line 634
def option_at index, name, properties = {}, &blk
    option name, properties, index, &blk
end
option_before(iname, name, properties = {}) click to toggle source
# File lib/engine2/core.rb, line 626
def option_before iname, name, properties = {}, &blk
    option name, properties, option_index(iname), &blk
end
option_index(iname, raise = true) click to toggle source
# File lib/engine2/core.rb, line 638
def option_index iname, raise = true
    index = @entries.index{|e| (e.is_a?(MenuBuilder) ? e.name : e[:name]) == iname}
    raise E2Error.new("No menu option #{iname} found") if !index && raise
    index
end
properties(props = nil) click to toggle source
# File lib/engine2/core.rb, line 612
def properties props = nil
    props ? @properties.merge!(props) : @properties
end
to_a() click to toggle source
# File lib/engine2/core.rb, line 655
def to_a
    @entries.map do |m|
        if m.is_a? MenuBuilder
            h = {entries: m.to_a}.merge(m.properties)
            h[:loc] ||= LOCS[m.name]
            {menu: h}
        else
            m[:loc] ? m : m.merge(loc: LOCS[m[:name]])
        end
    end
end