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.



561
562
563
564
565
# File 'lib/engine2/core.rb', line 561

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

Instance Attribute Details

#entriesObject (readonly)

Returns the value of attribute entries.



559
560
561
# File 'lib/engine2/core.rb', line 559

def entries
  @entries
end

#nameObject

Returns the value of attribute name.



558
559
560
# File 'lib/engine2/core.rb', line 558

def name
  @name
end

Instance Method Details

#dividerObject



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

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

#each(&blk) ⇒ Object



622
623
624
625
626
627
628
629
630
# File 'lib/engine2/core.rb', line 622

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



599
600
601
602
603
604
# File 'lib/engine2/core.rb', line 599

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



571
572
573
574
575
576
577
578
579
# File 'lib/engine2/core.rb', line 571

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



585
586
587
# File 'lib/engine2/core.rb', line 585

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

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



589
590
591
# File 'lib/engine2/core.rb', line 589

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

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



581
582
583
# File 'lib/engine2/core.rb', line 581

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

#option_index(iname, raise = true) ⇒ Object

Raises:



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

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



567
568
569
# File 'lib/engine2/core.rb', line 567

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

#to_aObject



610
611
612
613
614
615
616
617
618
619
620
# File 'lib/engine2/core.rb', line 610

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