Class: Engine2::MenuBuilder

Inherits:
Object show all
Defined in:
lib/engine2/core.rb

Direct Known Subclasses

ActionMenuBuilder

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, properties = {}) ⇒ MenuBuilder

Returns a new instance of MenuBuilder.



597
598
599
600
601
# File 'lib/engine2/core.rb', line 597

def initialize name, properties = {}
    @name = name
    @properties = properties
    @entries = []
end

Instance Attribute Details

#entriesObject (readonly)

Returns the value of attribute entries.



595
596
597
# File 'lib/engine2/core.rb', line 595

def entries
  @entries
end

#nameObject

Returns the value of attribute name.



594
595
596
# File 'lib/engine2/core.rb', line 594

def name
  @name
end

Instance Method Details

#dividerObject



642
643
644
# File 'lib/engine2/core.rb', line 642

def divider
    @entries << {divider: true}
end

#each(&blk) ⇒ Object



658
659
660
661
662
663
664
665
666
# File 'lib/engine2/core.rb', line 658

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) ⇒ Object



635
636
637
638
639
640
# File 'lib/engine2/core.rb', line 635

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 = {}, index = @entries.size, &blk) ⇒ Object



607
608
609
610
611
612
613
614
615
# File 'lib/engine2/core.rb', line 607

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 = {}, &blk) ⇒ Object



621
622
623
# File 'lib/engine2/core.rb', line 621

def option_after iname, name, properties = {}, &blk
    option name, properties, option_index(iname) + 1, &blk
end

#option_at(index, name, properties = {}, &blk) ⇒ Object



625
626
627
# File 'lib/engine2/core.rb', line 625

def option_at index, name, properties = {}, &blk
    option name, properties, index, &blk
end

#option_before(iname, name, properties = {}, &blk) ⇒ Object



617
618
619
# File 'lib/engine2/core.rb', line 617

def option_before iname, name, properties = {}, &blk
    option name, properties, option_index(iname), &blk
end

#option_index(iname, raise = true) ⇒ Object

Raises:



629
630
631
632
633
# File 'lib/engine2/core.rb', line 629

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) ⇒ Object



603
604
605
# File 'lib/engine2/core.rb', line 603

def properties props = nil
    props ? @properties.merge!(props) : @properties
end

#to_aObject



646
647
648
649
650
651
652
653
654
655
656
# File 'lib/engine2/core.rb', line 646

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