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.
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
#entries ⇒ Object (readonly)
Returns the value of attribute entries.
604 605 606 |
# File 'lib/engine2/core.rb', line 604 def entries @entries end |
#name ⇒ Object
Returns the value of attribute name.
603 604 605 |
# File 'lib/engine2/core.rb', line 603 def name @name end |
Instance Method Details
#divider ⇒ Object
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
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_a ⇒ Object
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 |