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



120
121
122
# File 'lib/cable/menu/base.rb', line 120

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

.prevent_deletion(*args) ⇒ Object



116
117
118
# File 'lib/cable/menu/base.rb', line 116

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

Instance Method Details

#depth=(v) ⇒ Object



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

def depth=(v)

end

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

Returns:

  • (Boolean)


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

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



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

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



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

def item_id=(v)
end

#left=(v) ⇒ Object

Interface for nested_set



23
24
25
# File 'lib/cable/menu/base.rb', line 23

def left=(v)
  lft = v
end

#reorder_children(ordered_ids) ⇒ Object



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

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



28
29
30
# File 'lib/cable/menu/base.rb', line 28

def right=(v)
  rgt = v
end

#section_rootObject



101
102
103
# File 'lib/cable/menu/base.rb', line 101

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

#show_cbObject



39
40
41
# File 'lib/cable/menu/base.rb', line 39

def show_cb
  Menu.before_save_callback_chain
end

#title_or_urlObject



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

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.



49
50
51
# File 'lib/cable/menu/base.rb', line 49

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.



43
44
45
46
# File 'lib/cable/menu/base.rb', line 43

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