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.
517 518 519 520 521 |
# File 'lib/engine2/core.rb', line 517 def initialize name, properties = {} @name = name @properties = properties @entries = [] end |
Instance Attribute Details
#entries ⇒ Object (readonly)
Returns the value of attribute entries.
515 516 517 |
# File 'lib/engine2/core.rb', line 515 def entries @entries end |
#name ⇒ Object
Returns the value of attribute name.
514 515 516 |
# File 'lib/engine2/core.rb', line 514 def name @name end |
Instance Method Details
#divider ⇒ Object
562 563 564 |
# File 'lib/engine2/core.rb', line 562 def divider @entries << {divider: true} end |
#each(&blk) ⇒ Object
578 579 580 581 582 583 584 585 586 |
# File 'lib/engine2/core.rb', line 578 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
555 556 557 558 559 560 |
# File 'lib/engine2/core.rb', line 555 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
527 528 529 530 531 532 533 534 535 |
# File 'lib/engine2/core.rb', line 527 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
541 542 543 |
# File 'lib/engine2/core.rb', line 541 def option_after iname, name, properties = {}, &blk option name, properties, option_index(iname) + 1, &blk end |
#option_at(index, name, properties = {}, &blk) ⇒ Object
545 546 547 |
# File 'lib/engine2/core.rb', line 545 def option_at index, name, properties = {}, &blk option name, properties, index, &blk end |
#option_before(iname, name, properties = {}, &blk) ⇒ Object
537 538 539 |
# File 'lib/engine2/core.rb', line 537 def option_before iname, name, properties = {}, &blk option name, properties, option_index(iname), &blk end |
#option_index(iname, raise = true) ⇒ Object
549 550 551 552 553 |
# File 'lib/engine2/core.rb', line 549 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
523 524 525 |
# File 'lib/engine2/core.rb', line 523 def properties props = nil props ? @properties.merge!(props) : @properties end |
#to_a ⇒ Object
566 567 568 569 570 571 572 573 574 575 576 |
# File 'lib/engine2/core.rb', line 566 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 |