class PartialMenu::Menu

Represents a menu with menu items

Attributes

id[R]
items[R]
layout[R]
parent[R]

Public Class Methods

new(props, layout = 'main', parent = nil) click to toggle source

rubocop:disable Metrics/MethodLength

# File lib/partial_menu/menu.rb, line 12
def initialize(props, layout = 'main', parent = nil)
  unless props.is_a? Array
    raise ::ArgumentError, "Expected an Array, got #{props.class}"
  end
  unless layout.is_a? String
    raise ::ArgumentError, "Expected a String, got #{layout.class}"
  end
  unless parent.nil? || (parent.is_a? PartialMenu::MenuItem)
    raise ::ArgumentError, "Expected MenuItem or nil, got #{parent.class}"
  end
  @props = props
  @layout = layout
  @items = []
  @parent = parent
  set_id
  add_items(props)
end

Public Instance Methods

active?(view) click to toggle source

True if current url relates to any child menu item's uri

@params [ActionView] Needs view context to get current request details

@retrun [boolean]

# File lib/partial_menu/menu.rb, line 38
def active?(view)
  @items.each do |item|
    return true if item.active?(view)
  end
  false
end

Private Instance Methods

add_items(items) click to toggle source
# File lib/partial_menu/menu.rb, line 47
def add_items(items)
  items.each do |item|
    @items << PartialMenu::MenuItem.new(item, self)
  end
end
set_id() click to toggle source
# File lib/partial_menu/menu.rb, line 53
def set_id
  @id = if @parent.try(:class) == 'PartialMenu::MenuItem'
          @parent.id + '_submenu'
        else
          @layout + '_menu'
        end
end