class ActiveAdmin::MenuCollection

A MenuCollection stores multiple menus for any given namespace. Namespaces delegate the addition of menu items to this class.

Constants

NoMenuError

Public Class Methods

new() click to toggle source
# File lib/active_admin/menu_collection.rb, line 11
def initialize
  @menus = {}
  @build_callbacks = []
  @built = false
end

Public Instance Methods

add(menu_name, menu_item_options = {}) click to toggle source

Add a new menu item to a menu in the collection

# File lib/active_admin/menu_collection.rb, line 18
def add(menu_name, menu_item_options = {})
  menu = find_or_create(menu_name)

  menu.add menu_item_options
end
before_build(&block) click to toggle source

Add callbacks that will be run before the menu is built

# File lib/active_admin/menu_collection.rb, line 50
def before_build(&block)
  @build_callbacks.unshift(block)
end
clear!() click to toggle source
# File lib/active_admin/menu_collection.rb, line 24
def clear!
  @menus = {}
  @built = false
end
exists?(menu_name) click to toggle source
# File lib/active_admin/menu_collection.rb, line 29
def exists?(menu_name)
  @menus.keys.include? menu_name
end
fetch(menu_name) click to toggle source
# File lib/active_admin/menu_collection.rb, line 33
def fetch(menu_name)
  build_menus!

  @menus[menu_name] or
    raise NoMenuError, "No menu by the name of #{menu_name.inspect} in availble menus: #{@menus.keys.join(", ")}"
end
menu(menu_name) { |menu| ... } click to toggle source
on_build(&block) click to toggle source

Add callbacks that will be run when the menu is going to be built. This helps use with reloading and allows configurations to add items to menus.

@param [Proc] block A block which will be ran when the menu is built. The

will have the menu collection yielded.
# File lib/active_admin/menu_collection.rb, line 45
def on_build(&block)
  @build_callbacks << block
end

Private Instance Methods

build_default_menu() click to toggle source
# File lib/active_admin/menu_collection.rb, line 83
def build_default_menu
  find_or_create DEFAULT_MENU
end
build_menus!() click to toggle source
# File lib/active_admin/menu_collection.rb, line 68
def build_menus!
  return if built?

  build_default_menu
  run_on_build_callbacks

  @built = true
end
built?() click to toggle source
# File lib/active_admin/menu_collection.rb, line 64
def built?
  @built
end
find_or_create(menu_name) click to toggle source
# File lib/active_admin/menu_collection.rb, line 87
def find_or_create(menu_name)
  menu_name ||= DEFAULT_MENU
  @menus[menu_name] ||= ActiveAdmin::Menu.new
end
run_on_build_callbacks() click to toggle source
# File lib/active_admin/menu_collection.rb, line 77
def run_on_build_callbacks
  @build_callbacks.each do |callback|
    callback.call(self)
  end
end