Add mongoid-tree to Item
This commit is contained in:
1 parent
fd52d00187
commit
6a443f0976
13 files changed
+60
-95
No files matched your search
+16
-54
@@ -2,59 +2,31 @@ class Item
|
||||
|
||||
include Mongoid::Document
|
||||
include Mongoid::Timestamps
|
||||
include Mongoid::Tree
|
||||
include Mongoid::Tree::Ordering
|
||||
|
||||
field :name, :index => true
|
||||
field :full_name, :index => true
|
||||
field :position, :type => Integer
|
||||
field :is_published, :type => Boolean, :default => false, :index => true
|
||||
field :enabled_for, :type => Array, :default => nil
|
||||
field :menu_enabled_for, :type => Array, :default => nil
|
||||
field :name
|
||||
field :path
|
||||
field :is_published, :type => Boolean, :default => false
|
||||
field :enabled_for, :type => Array, :default => nil
|
||||
field :menu_enabled_for, :type => Array, :default => nil
|
||||
|
||||
validates_format_of :name, :with => /^[0-9a-zA-Z\-_]+$/
|
||||
validates :name, :exclusion => { :in => LIST[:forbidden_item_names] }
|
||||
validates_uniqueness_of :name, :scope => :parent_id
|
||||
validates_presence_of :name, :full_name, :position
|
||||
validates_presence_of :name
|
||||
|
||||
validates_associated :parent, :children
|
||||
after_rearrange :rebuild_path
|
||||
|
||||
belongs_to :parent, :class_name => "Item"
|
||||
has_one :i18n_variable, :as => :language_value, :autosave => true, :dependent => :destroy
|
||||
has_many :children, :class_name => "Item", :as => 'parent'
|
||||
|
||||
before_validation :setup_default_value
|
||||
|
||||
def self.find_by_name(item_name)
|
||||
Item.first(:conditions => { :name => item_name, :is_published => true })
|
||||
end
|
||||
|
||||
# Get an array of ancestors
|
||||
def ancestors
|
||||
node, nodes = self, []
|
||||
nodes << node = node.parent while !node.parent.blank? rescue nil
|
||||
nodes.reverse
|
||||
end
|
||||
|
||||
# Get an array of ancestor's id
|
||||
def ancestor_ids
|
||||
node, nodes = self, []
|
||||
while !node.parent.blank? do
|
||||
node = node.parent rescue nil
|
||||
nodes << node.id if node
|
||||
end
|
||||
# nodes << node = node.parent while !node.parent.blank? rescue nil
|
||||
nodes.reverse
|
||||
end
|
||||
|
||||
# Build the url from the array of ancestors
|
||||
def url
|
||||
urls = ancestors.map{ |a| a.name } << self.name
|
||||
urls.join("/")
|
||||
end
|
||||
|
||||
def ordered_children
|
||||
self.children.asc(:position)
|
||||
end
|
||||
|
||||
def ordered_and_visible_children
|
||||
objects = ordered_children
|
||||
def visible_children
|
||||
objects = self.children
|
||||
a = []
|
||||
if objects
|
||||
objects.each do |object|
|
||||
@@ -66,20 +38,10 @@ class Item
|
||||
|
||||
protected
|
||||
|
||||
def setup_default_value
|
||||
# Set the position value within the parent scope
|
||||
if self.position.blank?
|
||||
max_page = Item.where(:parent_id => self.parent_id).count
|
||||
self.position = (max_page)? max_page + 1 : 1
|
||||
end
|
||||
|
||||
# Build the full_name from the ancestors array
|
||||
full_node = self.ancestors.map{ |a| a.name }.push( self.name )
|
||||
# Remove root node if not root
|
||||
full_node.shift if full_node.size >= 2
|
||||
self.full_name = full_node.join("/")
|
||||
def rebuild_path
|
||||
self.path = (self.ancestors_and_self - [Item.root]).collect{|x| x.name unless x.root?}.join('/')
|
||||
end
|
||||
|
||||
|
||||
# Enable the validation for parent_id
|
||||
def validates_presence_of_parent_id?
|
||||
true
|
||||
|
||||
@@ -15,10 +15,6 @@ class Page < Item
|
||||
before_save :create_parts, :set_key
|
||||
|
||||
# embeds_many :custom_images, :class_name => 'Image', as: :design_image
|
||||
|
||||
def is_home?
|
||||
self.parent ? false : true
|
||||
end
|
||||
|
||||
def title
|
||||
@title ||= I18nVariable.first(:conditions => {:key => 'title', :language_value_id => self.id, :language_value_type => self.class}) rescue nil
|
||||
|
||||
Reference in new issue
Block a user