Sha256: e9ef1fe5f6da593137d602fe9f01954377f3f59452cbec517fa73cc67582ce5b

Contents?: true

Size: 1.14 KB

Versions: 3

Compression:

Stored size: 1.14 KB

Contents

module ActiveAdmin

  DEFAULT_MENU = :default

  # A MenuCollection stores multiple menus for any given namespace. Namespaces delegate
  # the addition of menu items to this class.
  class MenuCollection
    def initialize
      @menus = {}
    end

    # Add a new menu item to a menu in the collection
    def add(menu_name, menu_item_options = {})
      find_or_create(menu_name).add(menu_item_options)
    end

    def clear!
      @menus = {}
    end

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

    def fetch(menu_name)
      build_default_menu unless built?

      @menus[menu_name] or
        raise NoMenuError, "No menu by the name of #{menu_name.inspect} in available menus: #{@menus.keys.join(", ")}"
    end

    def menu(menu_name, &block)
      find_or_create(menu_name).tap do |menu|
        yield(menu) if block_given?
      end
    end

    def built?
      @menus.present?
    end

    def build_default_menu
      find_or_create DEFAULT_MENU
    end

    private

    # @return [ActiveAdmin::Menu]
    def find_or_create(menu_name)
      @menus[menu_name || DEFAULT_MENU] ||= ActiveAdmin::Menu.new
    end

  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
activeadmin-rails-1.7.2 lib/active_admin/menu_collection.rb
activeadmin-rails-1.7.1 lib/active_admin/menu_collection.rb
activeadmin-rails-1.7.0 lib/active_admin/menu_collection.rb