Sha256: 1376f8b2f989e604d6f69cad0aa463afcf2f9a5f2fec2a27d77bc880b7ac79c3

Contents?: true

Size: 1.31 KB

Versions: 48

Compression:

Stored size: 1.31 KB

Contents

require 'push_type/menu_builder/dsl/menu'

module PushType
  module MenuBuilder

    class Menu
      attr_reader :items
      attr_accessor :element, :html_options, :active_class

      def initialize
        @items        = []
        @element      = :ul
        @html_options = {}
        @active_class = 'active'
      end

      def build(&block)
        PushType::MenuBuilder::Dsl::Menu.build(self, &block)
      end

      def item(key, &block)
        itm = find_or_create_item(key)
        @items.push itm unless @items.include?(itm)
        itm.build(&block) if block_given?
        itm
      end

      def insert_at(index, key, &block)
        itm = find_or_create_item(key)
        @items.insert index, itm
        itm.build(&block) if block_given?
        itm
      end

      def insert_before(context, key, &block)
        insert_at find_item_index(context), key, &block
      end

      def insert_after(context, key, &block)
        insert_at find_item_index(context, 1), key, &block
      end

      private

      def find_or_create_item(key)
        @items.find { |i| i.key == key.to_sym } || PushType::MenuBuilder::MenuItem.new(key)
      end

      def find_item_index(key, offset = 0)
        idx = @items.find_index { |i| i.key == key.to_sym }
        idx ? idx + offset : @items.length
      end

    end

  end
end

Version data entries

48 entries across 48 versions & 1 rubygems

Version Path
push_type_core-0.12.1 lib/push_type/menu_builder/menu.rb
push_type_core-0.12.0 lib/push_type/menu_builder/menu.rb
push_type_core-0.12.0.beta.1 lib/push_type/menu_builder/menu.rb
push_type_core-0.11.2 lib/push_type/menu_builder/menu.rb
push_type_core-0.11.1 lib/push_type/menu_builder/menu.rb
push_type_core-0.11.0.beta.2 lib/push_type/menu_builder/menu.rb
push_type_core-0.11.0.beta.1 lib/push_type/menu_builder/menu.rb
push_type_core-0.10.4 lib/push_type/menu_builder/menu.rb
push_type_core-0.10.3 lib/push_type/menu_builder/menu.rb
push_type_core-0.10.2 lib/push_type/menu_builder/menu.rb
push_type_core-0.10.1 lib/push_type/menu_builder/menu.rb
push_type_core-0.10.0 lib/push_type/menu_builder/menu.rb
push_type_core-0.10.0.beta.5 lib/push_type/menu_builder/menu.rb
push_type_core-0.10.0.beta.3 lib/push_type/menu_builder/menu.rb
push_type_core-0.9.5 lib/push_type/menu_builder/menu.rb
push_type_core-0.9.3 lib/push_type/menu_builder/menu.rb
push_type_core-0.9.2 lib/push_type/menu_builder/menu.rb
push_type_core-0.9.1 lib/push_type/menu_builder/menu.rb
push_type_core-0.9.0 lib/push_type/menu_builder/menu.rb
push_type_core-0.9.0.beta.4 lib/push_type/menu_builder/menu.rb