Class: ActiveAdmin::MenuCollection

Inherits:
Object
  • Object
show all
Defined in:
lib/active_admin/menu_collection.rb

Overview

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

Constant Summary collapse

NoMenuError =
Class.new(KeyError)

Instance Method Summary collapse

Constructor Details

#initializeMenuCollection



11
12
13
14
15
# File 'lib/active_admin/menu_collection.rb', line 11

def initialize
  @menus = {}
  @build_callbacks = []
  @built = false
end

Instance Method Details

#add(menu_name, menu_item_options = {}) ⇒ Object

Add a new menu item to a menu in the collection



18
19
20
21
22
# 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) ⇒ Object

Add callbacks that will be run before the menu is built



50
51
52
# File 'lib/active_admin/menu_collection.rb', line 50

def before_build(&block)
  @build_callbacks.unshift(block)
end

#clear!Object



24
25
26
27
# File 'lib/active_admin/menu_collection.rb', line 24

def clear!
  @menus = {}
  @built = false
end

#exists?(menu_name) ⇒ Boolean



29
30
31
# File 'lib/active_admin/menu_collection.rb', line 29

def exists?(menu_name)
  @menus.keys.include? menu_name
end

#fetch(menu_name) ⇒ Object



33
34
35
36
37
38
# 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

Yields:



54
55
56
57
58
59
60
# File 'lib/active_admin/menu_collection.rb', line 54

def menu(menu_name)
  menu = find_or_create(menu_name)

  yield(menu) if block_given?

  menu
end

#on_build(&block) ⇒ Object

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.



45
46
47
# File 'lib/active_admin/menu_collection.rb', line 45

def on_build(&block)
  @build_callbacks << block
end