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.



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

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

Instance Attribute Details

#entriesObject (readonly)

Returns the value of attribute entries.



514
515
516
# File 'lib/engine2/core.rb', line 514

def entries
  @entries
end

#nameObject

Returns the value of attribute name.



513
514
515
# File 'lib/engine2/core.rb', line 513

def name
  @name
end

Instance Method Details

#dividerObject



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

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

#each(&blk) ⇒ Object



577
578
579
580
581
582
583
584
585
# File 'lib/engine2/core.rb', line 577

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



554
555
556
557
558
559
# File 'lib/engine2/core.rb', line 554

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



526
527
528
529
530
531
532
533
534
# File 'lib/engine2/core.rb', line 526

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



540
541
542
# File 'lib/engine2/core.rb', line 540

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

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



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

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

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



536
537
538
# File 'lib/engine2/core.rb', line 536

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

#option_index(iname, raise = true) ⇒ Object

Raises:



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

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



522
523
524
# File 'lib/engine2/core.rb', line 522

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

#to_aObject



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

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