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