module ActiveAdmin::Menu::MenuNode
Attributes
children[RW]
Public Class Methods
new()
click to toggle source
# File lib/active_admin/menu.rb, line 24 def initialize @children = {} end
Public Instance Methods
[](id)
click to toggle source
# File lib/active_admin/menu.rb, line 28 def [](id) @children[normalize_id(id)] end
[]=(id, child)
click to toggle source
# File lib/active_admin/menu.rb, line 32 def []=(id, child) @children[normalize_id(id)] = child end
add(options) { |item| ... }
click to toggle source
Recursively builds any given menu items. There are two syntaxes supported, as shown in the below examples. Both create an identical menu structure.
Example 1:
menu = Menu.new menu.add label: 'Dashboard' do |dash| dash.add label: 'My Child Dashboard' end
Example 2:
menu = Menu.new menu.add label: 'Dashboard' menu.add parent: 'Dashboard', label: 'My Child Dashboard'
# File lib/active_admin/menu.rb, line 50 def add(options) options = options.dup # Make sure parameter is not modified parent_chain = Array.wrap(options.delete(:parent)) item = if parent = parent_chain.shift options[:parent] = parent_chain if parent_chain.any? (self[parent] || add(label: parent)).add options else _add options.merge parent: self end yield(item) if block_given? item end
current?(item)
click to toggle source
Used in the UI to visually distinguish which menu item is selected.
# File lib/active_admin/menu.rb, line 72 def current?(item) self == item || include?(item) end
include?(item)
click to toggle source
Whether any children match the given item.
# File lib/active_admin/menu.rb, line 67 def include?(item) @children.values.include?(item) || @children.values.any? { |child| child.include?(item) } end
items()
click to toggle source
# File lib/active_admin/menu.rb, line 76 def items @children.values end
Private Instance Methods
_add(options)
click to toggle source
The method that actually adds new menu items. Called by the public method. If this ID is already taken, transfer the children of the existing item to the new item.
# File lib/active_admin/menu.rb, line 86 def _add(options) item = ActiveAdmin::MenuItem.new(options) item.send :children=, self[item.id].children if self[item.id] self[item.id] = item end
normalize_id(id)
click to toggle source
# File lib/active_admin/menu.rb, line 92 def normalize_id(id) case id when String, Symbol, ActiveModel::Name id.to_s.downcase.tr " ", "_" when ActiveAdmin::Resource::Name id.param_key else raise TypeError, "#{id.class} isn't supported as a Menu ID" end end