Class: Cable::Menu::Base

Inherits:
ActiveRecord::Base
  • Object
show all
Includes:
SimpleNavigationMethods, UrlHelper
Defined in:
lib/cable/menu/base.rb

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from UrlHelper

#direct_link?, #external_link?

Methods included from SimpleNavigationMethods

#items, #key, #name, #options

Class Attribute Details

.non_deletableObject

Returns the value of attribute non_deletable.



4
5
6
# File 'lib/cable/menu/base.rb', line 4

def non_deletable
  @non_deletable
end

Class Method Details

.get_routesObject



118
119
120
# File 'lib/cable/menu/base.rb', line 118

def self.get_routes
  Menu.all.collect( &:url )
end

.prevent_deletion(*args) ⇒ Object



114
115
116
# File 'lib/cable/menu/base.rb', line 114

def self.prevent_deletion( *args )
  Menu.non_deletable = args
end

Instance Method Details

#depth=(v) ⇒ Object



30
31
32
# File 'lib/cable/menu/base.rb', line 30

def depth=(v)

end

#differs?(pid, l, r) ⇒ Boolean

Returns:

  • (Boolean)


103
104
105
106
107
108
109
110
111
112
# File 'lib/cable/menu/base.rb', line 103

def differs?( pid , l , r )
  if self.parent.id != pid || self.lft != l || self.r != r
    # logger.info "DIFFERS"
    # logger.info "Parent ID: #{self.parent.id} - #{pid}" if self.parent.id != pid
    # logger.info "LEFT: #{self.lft} - #{l}" if self.lft != l
    # logger.info "RIGHT: #{self.rgt} - #{r}" if self.rgt != r
    return true 
  end
  return false
end

#generate_marketable_urlObject



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/cable/menu/base.rb', line 71

def generate_marketable_url
  # puts "EXTERNAL LINK " if self.external_link?
  # puts "DIRECT LINK" if self.direct_link?
  
  unless self.external_link? 
    self.marketable_url = ((self.ancestors.sort_by{|anc| anc.level}.collect{ |a| a.title_or_url.parameterize.to_s } << self.title_or_url.parameterize.to_s))[1..-1].join("/") unless self.direct_link?
    puts "Generating marketable url: #{marketable_url}"
    puts "Children? #{self.class}"
    
    
    unless self.children.empty?
      self.children.each{|child| child.generate_marketable_url }
    end
  else
    self.marketable_url = ( self.direct_link? ) ? self[:url][1..-1] : self[:url]
  end

  self.save
end

#item_id=(v) ⇒ Object



34
35
# File 'lib/cable/menu/base.rb', line 34

def item_id=(v)
end

#left=(v) ⇒ Object

Interface for nested_set



21
22
23
# File 'lib/cable/menu/base.rb', line 21

def left=(v)
  lft = v
end

#reorder_children(ordered_ids) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/cable/menu/base.rb', line 51

def reorder_children(ordered_ids)
  ordered_ids = ordered_ids.map(&:to_i)
  current_ids = children.map(&:id)
  unless current_ids - ordered_ids == [] && ordered_ids - current_ids == []
    raise ArgumentError, "Not ordering the same ids that I have as children. My children: #{current_ids.join(", ")}. Your list: #{ordered_ids.join(", ")}. Difference: #{(current_ids - ordered_ids).join(', ')} / #{(ordered_ids - current_ids).join(', ')}" 
  end
  j = 0
  transaction do
    for new_id in ordered_ids
      old_id = current_ids[j]
      if new_id == old_id
        j += 1
      else
        Menu.where(:id => new_id).first.move_to_left_of(old_id)
        current_ids.delete(new_id)
      end
    end
  end
end

#right=(v) ⇒ Object

Interface for nested_set



26
27
28
# File 'lib/cable/menu/base.rb', line 26

def right=(v)
  rgt = v
end

#section_rootObject



99
100
101
# File 'lib/cable/menu/base.rb', line 99

def section_root
  self.ancestors[ self.level - (self.level - 1) ] || self.ancestors[0] || self
end

#show_cbObject



37
38
39
# File 'lib/cable/menu/base.rb', line 37

def show_cb
  Menu.before_save_callback_chain
end

#title_or_urlObject



91
92
93
94
95
96
97
# File 'lib/cable/menu/base.rb', line 91

def title_or_url
  if self[:url].blank?
    self.title
  else
    self[:url]
  end
end

#typeString

Returns The class of the associated resource as defined through cable_menuable polymorphic interface.

Returns:

  • (String)

    The class of the associated resource as defined through cable_menuable polymorphic interface.



47
48
49
# File 'lib/cable/menu/base.rb', line 47

def type
  cable_menuable_type
end

#urlString

Returns The internally generated friendly URL or a custom url defined for this menu.

Returns:

  • (String)

    The internally generated friendly URL or a custom url defined for this menu.



41
42
43
44
# File 'lib/cable/menu/base.rb', line 41

def url
  return self[:url] if self.external_link? || self.direct_link?
  return "/#{self.marketable_url}"
end