Class: Compass::Menu::Item

Inherits:
Object
  • Object
show all
Includes:
LazyAttribute
Defined in:
lib/compass/menu/item.rb

Overview

It is an item builder class. It leverages Compass::LazyAttribute to be able to build its attributes based on a menu context, allowing shared methods to live in the Menu class.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(menu, &block) ⇒ Item

Returns a new instance of Item.



11
12
13
14
15
16
# File 'lib/compass/menu/item.rb', line 11

def initialize(menu, &block)
  @menu = menu
  @items = Menu::ItemList.new

  instance_exec(menu, &block)
end

Instance Attribute Details

#itemsObject (readonly)

Returns the value of attribute items.



7
8
9
# File 'lib/compass/menu/item.rb', line 7

def items
  @items
end

Returns the value of attribute menu.



7
8
9
# File 'lib/compass/menu/item.rb', line 7

def menu
  @menu
end

Instance Method Details

#as_json(options = {}) ⇒ Object



79
80
81
82
83
84
85
86
87
88
89
# File 'lib/compass/menu/item.rb', line 79

def as_json(options = {})
  {
    label: label,
    icon: icon,
    url: url,
    items: items,
    badge: badge_count.nonzero?,
    meta: meta,
    gravity: gravity
  }.as_json(options).compact_blank
end

#each(&block) ⇒ Object



73
74
75
76
77
# File 'lib/compass/menu/item.rb', line 73

def each(&block)
  return yield self unless shallow

  items.each(&block)
end

#item(&block) ⇒ Object

Nest items under the current item.

I.e.:

item do
  label "Users"
  item do
    label "Profile"
    url :profile_url
  end
end


66
67
68
69
70
# File 'lib/compass/menu/item.rb', line 66

def item(&block)
  Menu::Item.new(@menu, &block).tap do |item|
    self.items.push(item)
  end
end