module ActiveAdmin::Menu::MenuNode
Attributes
Public Class Methods
Public Instance Methods
Source
# File lib/active_admin/menu.rb, line 32 def []=(id, child) @children[normalize_id(id)] = child end
Source
# 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
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'
Source
# File lib/active_admin/menu.rb, line 72 def current?(item) self == item || include?(item) end
Used in the UI to visually distinguish which menu item is selected.
Source
# File lib/active_admin/menu.rb, line 67 def include?(item) @children.values.include?(item) || @children.values.any? { |child| child.include?(item) } end
Whether any children match the given item.
Private Instance Methods
Source
# 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
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.
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