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) ⇒ Object
- #properties(props = nil) ⇒ Object
- #to_a ⇒ Object
Constructor Details
#initialize(name, properties = {}) ⇒ MenuBuilder
495 496 497 498 499 |
# File 'lib/engine2/core.rb', line 495 def initialize name, properties = {} @name = name @properties = properties @entries = [] end |
Instance Attribute Details
#entries ⇒ Object (readonly)
Returns the value of attribute entries.
493 494 495 |
# File 'lib/engine2/core.rb', line 493 def entries @entries end |
#name ⇒ Object
Returns the value of attribute name.
492 493 494 |
# File 'lib/engine2/core.rb', line 492 def name @name end |
Instance Method Details
#divider ⇒ Object
540 541 542 |
# File 'lib/engine2/core.rb', line 540 def divider @entries << {divider: true} end |
#each(&blk) ⇒ Object
556 557 558 559 560 561 562 563 564 |
# File 'lib/engine2/core.rb', line 556 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
533 534 535 536 537 538 |
# File 'lib/engine2/core.rb', line 533 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
505 506 507 508 509 510 511 512 513 |
# File 'lib/engine2/core.rb', line 505 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
519 520 521 |
# File 'lib/engine2/core.rb', line 519 def option_after iname, name, properties = {}, &blk option name, properties, option_index(iname) + 1, &blk end |
#option_at(index, name, properties = {}, &blk) ⇒ Object
523 524 525 |
# File 'lib/engine2/core.rb', line 523 def option_at index, name, properties = {}, &blk option name, properties, index, &blk end |
#option_before(iname, name, properties = {}, &blk) ⇒ Object
515 516 517 |
# File 'lib/engine2/core.rb', line 515 def option_before iname, name, properties = {}, &blk option name, properties, option_index(iname), &blk end |
#option_index(iname) ⇒ Object
527 528 529 530 531 |
# File 'lib/engine2/core.rb', line 527 def option_index iname index = @entries.index{|e| (e.is_a?(MenuBuilder) ? e.name : e[:name]) == iname} raise E2Error.new("No menu option #{iname} found") unless index index end |
#properties(props = nil) ⇒ Object
501 502 503 |
# File 'lib/engine2/core.rb', line 501 def properties props = nil props ? @properties.merge!(props) : @properties end |
#to_a ⇒ Object
544 545 546 547 548 549 550 551 552 553 554 |
# File 'lib/engine2/core.rb', line 544 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 |