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