class WonderNavigation::MenuItem
Attributes
deferrables[RW]
icon[RW]
id[RW]
level[RW]
parent_item[RW]
permission[RW]
subitems[RW]
Public Class Methods
new(menu_instance, level, id, options = {}, &block)
click to toggle source
# File lib/wonder_navigation/menu_item.rb, line 6 def initialize(menu_instance, level, id, options = {}, &block) @level = level @menu_instance = menu_instance @id = id @subitems = [] @permission = options[:permission] @icon = options[:icon] @menu_instance.items[id] = self initialize_deferrables(options) self.instance_eval(&block) if block_given? validate if options.fetch(:validate, true) end
Public Instance Methods
entry_visible?(max_depth, current_user)
click to toggle source
# File lib/wonder_navigation/menu_item.rb, line 67 def entry_visible?(max_depth, current_user) # require "byebug"; debugger level < max_depth && visible_deferrable.resolve(current_user) && label_deferrable.resolvable?(nil) && has_permission?(current_user) end
has_permission?(current_user)
click to toggle source
# File lib/wonder_navigation/menu_item.rb, line 91 def has_permission?(current_user) if !!permission && !!menu_instance.permission_checker # debugger instance_exec(permission, current_user, &menu_instance.permission_checker) else true end end
label(&block)
click to toggle source
# File lib/wonder_navigation/menu_item.rb, line 110 def label(&block) deferrables[:label] = DeferrableOption.new(block: block, name: "Label for #{id}") end
parent(&block)
click to toggle source
# File lib/wonder_navigation/menu_item.rb, line 122 def parent(&block) deferrables[:parent] = DeferrableOption.new(block: block, name: "Parent for #{id}") end
parent_item=(parent_item)
click to toggle source
# File lib/wonder_navigation/menu_item.rb, line 100 def parent_item=(parent_item) if parent_item @parent_item = parent_item parent_item.subitems << self elsif @parent_item @parent_item.subitems.delete(self) @parent_item = nil end end
path(&block)
click to toggle source
# File lib/wonder_navigation/menu_item.rb, line 114 def path(&block) deferrables[:path] = DeferrableOption.new(block: block, name: "Path for #{id}") end
resource(id, options = {}, &block)
click to toggle source
# File lib/wonder_navigation/menu_item.rb, line 38 def resource(id, options = {}, &block) new = show = nil index = menu "#{id}_index", options do new = menu "#{id}_new", options.fetch(:new_label, translate_resource_action(:new, "New")), visible: false show = menu "#{id}_show" do label {|obj| obj.to_s } path {|obj| obj } menu "#{id}_edit", translate_resource_action(:edit, "Edit") end end index.instance_exec(index, new, show, &block) if block_given? end
tree(current_page, max_depth, current_user)
click to toggle source
# File lib/wonder_navigation/menu_item.rb, line 76 def tree(current_page, max_depth, current_user) MenuEntry.new(id, level).tap do |entry| entry.active = id == current_page entry.visible = entry_visible?(max_depth, current_user) entry.icon = icon if entry.visible entry.label = label_deferrable.resolve(nil) entry.path = path_deferrable.try_resolve(nil) end entry.children = subtree(current_page, max_depth, current_user) entry.promote_active_state end end
validate()
click to toggle source
# File lib/wonder_navigation/menu_item.rb, line 21 def validate unless label_deferrable.present? raise ELabelNotDefined.new("MenuItem #{id} was called without define a label text or proc") end end
visible(&block)
click to toggle source
# File lib/wonder_navigation/menu_item.rb, line 118 def visible(&block) deferrables[:visible] = DeferrableOption.new(block: block, name: "Visible for #{id}") end
Private Instance Methods
initialize_deferrables(options)
click to toggle source
# File lib/wonder_navigation/menu_item.rb, line 128 def initialize_deferrables(options) @deferrables = {} visible = options.fetch(:visible, true) deferrables[:visible] = DeferrableOption.new(fixed: visible, name: "Visible for #{id}") deferrables[:label] = DeferrableOption.new(fixed: options[:label], name: "Label for #{id}") deferrables[:path] = DeferrableOption.new(fixed: options[:path], name: "Path for #{id}") deferrables[:parent] = DeferrableOption.new(name: "Parent for #{id}") end
label_deferrable()
click to toggle source
# File lib/wonder_navigation/menu_item.rb, line 137 def label_deferrable deferrables[:label] end
parent_deferrable()
click to toggle source
# File lib/wonder_navigation/menu_item.rb, line 149 def parent_deferrable deferrables[:parent] end
path_deferrable()
click to toggle source
# File lib/wonder_navigation/menu_item.rb, line 141 def path_deferrable deferrables[:path] end
subtree(current_page, max_depth, current_user)
click to toggle source
# File lib/wonder_navigation/menu_item.rb, line 153 def subtree(current_page, max_depth, current_user) subitems.collect do |sub_item| sub_item.tree(current_page, max_depth, current_user) end end
translate_resource_action(action, default)
click to toggle source
# File lib/wonder_navigation/menu_item.rb, line 159 def translate_resource_action(action, default) if defined?(I18n) I18n.t("wonder_navigation.resource.#{action}", default: default) else default end end
visible_deferrable()
click to toggle source
# File lib/wonder_navigation/menu_item.rb, line 145 def visible_deferrable deferrables[:visible] end