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.



606
607
608
609
610
# File 'lib/engine2/core.rb', line 606

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

Instance Attribute Details

#entriesObject (readonly)

Returns the value of attribute entries.



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

def entries
  @entries
end

#nameObject

Returns the value of attribute name.



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

def name
  @name
end

Instance Method Details

#dividerObject



651
652
653
# File 'lib/engine2/core.rb', line 651

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

#each(&blk) ⇒ Object



667
668
669
670
671
672
673
674
675
# 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) ⇒ Object



644
645
646
647
648
649
# 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 = {}, index = @entries.size, &blk) ⇒ Object



616
617
618
619
620
621
622
623
624
# 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 = {}, &blk) ⇒ Object



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



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



626
627
628
# 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) ⇒ Object

Raises:



638
639
640
641
642
# 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) ⇒ Object



612
613
614
# File 'lib/engine2/core.rb', line 612

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

#to_aObject



655
656
657
658
659
660
661
662
663
664
665
# 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