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.



505
506
507
508
509
# File 'lib/engine2/core.rb', line 505

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

Instance Attribute Details

#entriesObject (readonly)

Returns the value of attribute entries.



503
504
505
# File 'lib/engine2/core.rb', line 503

def entries
  @entries
end

#nameObject

Returns the value of attribute name.



502
503
504
# File 'lib/engine2/core.rb', line 502

def name
  @name
end

Instance Method Details

#dividerObject



550
551
552
# File 'lib/engine2/core.rb', line 550

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

#each(&blk) ⇒ Object



566
567
568
569
570
571
572
573
574
# File 'lib/engine2/core.rb', line 566

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



543
544
545
546
547
548
# File 'lib/engine2/core.rb', line 543

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



515
516
517
518
519
520
521
522
523
# File 'lib/engine2/core.rb', line 515

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



529
530
531
# File 'lib/engine2/core.rb', line 529

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

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



533
534
535
# File 'lib/engine2/core.rb', line 533

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

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



525
526
527
# File 'lib/engine2/core.rb', line 525

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

#option_index(iname) ⇒ Object

Raises:



537
538
539
540
541
# File 'lib/engine2/core.rb', line 537

def option_index iname
    index = @entries.index{|e| (e.is_a?(MenuBuilder) ? e.name : e[:name]) == iname}
    raise E2Error.new("No menu option #{iname} found") unless index
    index
end

#properties(props = nil) ⇒ Object



511
512
513
# File 'lib/engine2/core.rb', line 511

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

#to_aObject



554
555
556
557
558
559
560
561
562
563
564
# File 'lib/engine2/core.rb', line 554

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