Class: WonderNavigation::MenuItem
- Inherits:
-
Object
- Object
- WonderNavigation::MenuItem
- Defined in:
- lib/wonder_navigation/menu_item.rb
Instance Attribute Summary collapse
-
#deferrables ⇒ Object
Returns the value of attribute deferrables.
-
#icon ⇒ Object
Returns the value of attribute icon.
-
#id ⇒ Object
Returns the value of attribute id.
-
#level ⇒ Object
Returns the value of attribute level.
-
#menu_instance ⇒ Object
Returns the value of attribute menu_instance.
-
#parent_item ⇒ Object
Returns the value of attribute parent_item.
-
#permission ⇒ Object
Returns the value of attribute permission.
-
#subitems ⇒ Object
Returns the value of attribute subitems.
Instance Method Summary collapse
- #breadcrumbs(object = nil) ⇒ Object
- #entry_visible?(max_depth, current_user) ⇒ Boolean
- #has_permission?(current_user) ⇒ Boolean
-
#initialize(menu_instance, level, id, options = {}, &block) ⇒ MenuItem
constructor
A new instance of MenuItem.
- #label(&block) ⇒ Object
- #menu(id, label = nil, options = {}, &block) ⇒ Object
- #parent(&block) ⇒ Object
- #path(&block) ⇒ Object
- #resource(id, options = {}, &block) ⇒ Object
- #tree(current_page, max_depth, current_user) ⇒ Object
- #validate ⇒ Object
- #visible(&block) ⇒ Object
Constructor Details
#initialize(menu_instance, level, id, options = {}, &block) ⇒ MenuItem
Returns a new instance of MenuItem.
6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# File 'lib/wonder_navigation/menu_item.rb', line 6 def initialize(, level, id, = {}, &block) @level = level = @id = id @subitems = [] = [:permission] @icon = [:icon] .items[id] = self initialize_deferrables() self.instance_eval(&block) if block_given? validate if .fetch(:validate, true) end |
Instance Attribute Details
#deferrables ⇒ Object
Returns the value of attribute deferrables.
4 5 6 |
# File 'lib/wonder_navigation/menu_item.rb', line 4 def deferrables @deferrables end |
#icon ⇒ Object
Returns the value of attribute icon.
4 5 6 |
# File 'lib/wonder_navigation/menu_item.rb', line 4 def icon @icon end |
#id ⇒ Object
Returns the value of attribute id.
4 5 6 |
# File 'lib/wonder_navigation/menu_item.rb', line 4 def id @id end |
#level ⇒ Object
Returns the value of attribute level.
4 5 6 |
# File 'lib/wonder_navigation/menu_item.rb', line 4 def level @level end |
#menu_instance ⇒ Object
Returns the value of attribute menu_instance.
4 5 6 |
# File 'lib/wonder_navigation/menu_item.rb', line 4 def end |
#parent_item ⇒ Object
Returns the value of attribute parent_item.
4 5 6 |
# File 'lib/wonder_navigation/menu_item.rb', line 4 def parent_item @parent_item end |
#permission ⇒ Object
Returns the value of attribute permission.
4 5 6 |
# File 'lib/wonder_navigation/menu_item.rb', line 4 def end |
#subitems ⇒ Object
Returns the value of attribute subitems.
4 5 6 |
# File 'lib/wonder_navigation/menu_item.rb', line 4 def subitems @subitems end |
Instance Method Details
#breadcrumbs(object = nil) ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/wonder_navigation/menu_item.rb', line 51 def (object = nil) result = [] if parent_item parent_object = object if parent_deferrable.present? parent_object = parent_deferrable.resolve(object) end result += parent_item.(parent_object) end current = Crumb.new(id) current.label = label_deferrable.resolve(object) current.path = path_deferrable.resolve(object) if path_deferrable.resolvable?(object) result << current end |
#entry_visible?(max_depth, current_user) ⇒ Boolean
67 68 69 70 71 72 73 74 |
# 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) && (current_user) end |
#has_permission?(current_user) ⇒ Boolean
91 92 93 94 95 96 97 98 |
# File 'lib/wonder_navigation/menu_item.rb', line 91 def (current_user) if !! && !!. # debugger instance_exec(, current_user, &.) else true end end |
#label(&block) ⇒ Object
110 111 112 |
# File 'lib/wonder_navigation/menu_item.rb', line 110 def label(&block) deferrables[:label] = DeferrableOption.new(block: block, name: "Label for #{id}") end |
#menu(id, label = nil, options = {}, &block) ⇒ Object
27 28 29 30 31 32 33 34 35 36 |
# File 'lib/wonder_navigation/menu_item.rb', line 27 def (id, label = nil, = {}, &block) if label.is_a?(Hash) = label else [:label] = label end sub_item = MenuItem.new(, level + 1, id.to_sym, , &block) sub_item.parent_item = self sub_item end |
#parent(&block) ⇒ Object
122 123 124 |
# File 'lib/wonder_navigation/menu_item.rb', line 122 def parent(&block) deferrables[:parent] = DeferrableOption.new(block: block, name: "Parent for #{id}") end |
#path(&block) ⇒ Object
114 115 116 |
# 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) ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/wonder_navigation/menu_item.rb', line 38 def resource(id, = {}, &block) new = show = nil index = "#{id}_index", do new = "#{id}_new", .fetch(:new_label, translate_resource_action(:new, "New")), visible: false show = "#{id}_show" do label {|obj| obj.to_s } path {|obj| obj } "#{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) ⇒ Object
76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# 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 ⇒ Object
21 22 23 24 25 |
# 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) ⇒ Object
118 119 120 |
# File 'lib/wonder_navigation/menu_item.rb', line 118 def visible(&block) deferrables[:visible] = DeferrableOption.new(block: block, name: "Visible for #{id}") end |