Class: Engine2::MenuBuilder
Direct Known Subclasses
Instance Attribute Summary collapse
-
#entries ⇒ Object
readonly
Returns the value of attribute entries.
-
#name ⇒ Object
Returns the value of attribute name.
Instance Method Summary collapse
- #divider ⇒ Object
- #each(&blk) ⇒ Object
-
#initialize(name, properties = {}) ⇒ MenuBuilder
constructor
A new instance of MenuBuilder.
- #modify_option(name, properties) ⇒ Object
- #option(name, properties = {}, index = @entries.size, &blk) ⇒ Object
- #option_after(iname, name, properties = {}, &blk) ⇒ Object
- #option_at(index, name, properties = {}, &blk) ⇒ Object
- #option_before(iname, name, properties = {}, &blk) ⇒ Object
- #option_index(iname, raise = true) ⇒ Object
- #properties(props = nil) ⇒ Object
- #to_a ⇒ Object
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
#entries ⇒ Object (readonly)
Returns the value of attribute entries.
595 596 597 |
# File 'lib/engine2/core.rb', line 595 def entries @entries end |
#name ⇒ Object
Returns the value of attribute name.
594 595 596 |
# File 'lib/engine2/core.rb', line 594 def name @name end |
Instance Method Details
#divider ⇒ Object
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
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_a ⇒ Object
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 |