class Refinery::MenuItem
Attributes
attributes[RW]
depth[RW]
lft[RW]
original_id[RW]
original_type[RW]
parent_id[RW]
rgt[RW]
title[RW]
url[RW]
Public Class Methods
new(menu, options = {})
click to toggle source
# File lib/refinery/menu_item.rb, line 7 def initialize(menu, options = {}) @menu = menu remap!(options).each do |key, value| send "#{key}=", value end self.attributes = options end
Public Instance Methods
ancestors()
click to toggle source
# File lib/refinery/menu_item.rb, line 21 def ancestors @ancestors ||= generate_ancestors end
children()
click to toggle source
# File lib/refinery/menu_item.rb, line 25 def children @children ||= generate_children end
descendants()
click to toggle source
# File lib/refinery/menu_item.rb, line 29 def descendants @descendants ||= generate_descendants end
has_children?()
click to toggle source
# File lib/refinery/menu_item.rb, line 33 def has_children? !leaf? end
Also aliased as: has_descendants?
has_parent?()
click to toggle source
# File lib/refinery/menu_item.rb, line 38 def has_parent? !orphan? end
leaf?()
click to toggle source
# File lib/refinery/menu_item.rb, line 46 def leaf? @leaf ||= rgt.to_i - lft.to_i == 1 end
orphan?()
click to toggle source
# File lib/refinery/menu_item.rb, line 42 def orphan? parent_id.nil? || menu.detect{ |item| compatible_with?(item) && item.original_id == parent_id}.nil? end
parent()
click to toggle source
# File lib/refinery/menu_item.rb, line 50 def parent @parent ||= ancestors.detect { |item| item.original_id == parent_id } end
remap!(options)
click to toggle source
# File lib/refinery/menu_item.rb, line 15 def remap!(options) options[:original_id] = options.delete(:id) options[:original_type] = options.delete(:type) options end
siblings()
click to toggle source
# File lib/refinery/menu_item.rb, line 54 def siblings @siblings ||= ((has_parent? ? parent.children : menu.roots) - [self]) end
Also aliased as: shown_siblings
Private Instance Methods
compatible_with?(item)
click to toggle source
At present a MenuItem
can only have children of the same type to avoid id conflicts like a Blog::Post and a Page both having an id of 42
# File lib/refinery/menu_item.rb, line 67 def compatible_with?(item) original_type == item.original_type end
generate_ancestors()
click to toggle source
# File lib/refinery/menu_item.rb, line 71 def generate_ancestors if has_parent? menu.select { |item| compatible_with?(item) && item.lft < lft && item.rgt > rgt } else [] end end
generate_children()
click to toggle source
# File lib/refinery/menu_item.rb, line 79 def generate_children descendants.select { |item| item.parent_id == original_id } end
generate_descendants()
click to toggle source
# File lib/refinery/menu_item.rb, line 83 def generate_descendants if has_descendants? menu.select { |item| compatible_with?(item) && item.lft > lft && item.rgt < rgt } else [] end end