Sha256: 7307fb104d03e8678f5a6fa2a8297f4c6008125d8d413b8e7bb414a6f6871587

Contents?: true

Size: 1.72 KB

Versions: 9

Compression:

Stored size: 1.72 KB

Contents

module ExpressAdmin
  # Provide menus for Express Admin addon engines.
  #
  # To use:
  #
  # 1) include ExpressAdmin::Menu::Loader in your engine.rb
  # 2) add a config/menu.yml defining the menu structure
  #
  # Example:
  #
  #     title: 'Blog'
  #     path: 'express_blog.admin_blog_posts_path'
  #     items:
  #       -
  #         title: 'Posts'
  #         path: 'express_blog.admin_blog_posts_path'
  #       -
  #         title: 'Categories'
  #         path: 'express_blog.admin_blog_categories_path'
  module Menu

    # Return the top level MenuItem for the addon or defined in the supplied path.
    #
    # Accepts an addon_name such as :express_admin or a path to a yaml file
    # containing a menu definition.
    def self.[](addon_name)
      @menus ||= {}
      @menus[addon_name.to_sym] ||= begin
        menu_yml_path =
          if addon = Gem.loaded_specs[addon_name]
            File.join(addon.full_gem_path, 'config', 'menu.yml')
          else
            File.join(Rails.root, 'config', 'menu.yml')
          end
        from(menu_yml_path)
      end
    end

    def self.from(yaml_path)
      raise "unable to locate #{yaml_path}" unless File.exists?(yaml_path)
      MenuItem.new YAML.load_file(yaml_path).with_indifferent_access
    end


    class MenuItem
      attr :title, :path, :position, :items
      def initialize(hash)
        @title = hash[:title]
        @path = hash[:path]
        @position = hash[:position] || 99
        @items = (hash[:items]||[]).map {|item| MenuItem.new(item)}
      end
    end

    module Loader
      def self.included(base)
        class << base
          def addon_name
            self.to_s.split('::')[-2].underscore.to_sym
          end
        end
      end
    end

  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
express_admin-2.0.0.b lib/express_admin/menu.rb
express_admin-2.0.0.a lib/express_admin/menu.rb
express_admin-1.8.1 lib/express_admin/menu.rb
express_admin-1.8.0 lib/express_admin/menu.rb
express_admin-1.7.32 lib/express_admin/menu.rb
express_admin-1.7.31 lib/express_admin/menu.rb
express_admin-1.7.30 lib/express_admin/menu.rb
express_admin-1.7.29 lib/express_admin/menu.rb
express_admin-1.7.28 lib/express_admin/menu.rb