From 65276f391645b6f7c786cb7a4b1161b3560a0d6d Mon Sep 17 00:00:00 2001 From: hukl Date: Thu, 10 Feb 2011 14:19:19 +0100 Subject: added body to the index and removed spaces --- app/models/node.rb | 89 +++++++++++++++++++++++++++--------------------------- 1 file changed, 45 insertions(+), 44 deletions(-) (limited to 'app/models/node.rb') diff --git a/app/models/node.rb b/app/models/node.rb index db44b71..6c11fed 100644 --- a/app/models/node.rb +++ b/app/models/node.rb @@ -1,7 +1,7 @@ class Node < ActiveRecord::Base # Mixins and Plugins acts_as_nested_set - + # Associations has_many :pages, :order => "revision ASC" belongs_to :head, :class_name => "Page", :foreign_key => :head_id @@ -9,55 +9,56 @@ class Node < ActiveRecord::Base has_many :permissions has_one :event belongs_to :lock_owner, :class_name => "User", :foreign_key => :locking_user_id - + # Callbacks after_create :initialize_empty_page before_save :check_for_changed_slug after_save :update_unique_names_of_children - + # Validations validates_length_of :slug, :within => 1..255, :unless => "parent_id.nil?" validates_presence_of :slug, :unless => "parent_id.nil?" validates_uniqueness_of :slug, :scope => :parent_id, :unless => "parent_id.nil?" validates_presence_of :parent_id, :unless => "Node.root.nil?" - + validate :borders # This should never ever happen. - + # Index for Fulltext Search define_index do indexes head.translations.title indexes slug indexes unique_name + indexes head.translations.body end - + # Class methods - + # Returns a page for a given node. If no revision is supplied, it returns - # the last / current one. If a specific revision number is supplied, the - # corresponding revision of that page is returned. Get the current / latest - # revision with -1. It raises an Argument error if the revision is not a + # the last / current one. If a specific revision number is supplied, the + # corresponding revision of that page is returned. Get the current / latest + # revision with -1. It raises an Argument error if the revision is not a # Fixnum def self.find_page path, revision = -1 unless revision.class == Fixnum - raise ArgumentError, "revision must be a Fixnum" + raise ArgumentError, "revision must be a Fixnum" end node = Node.find_by_unique_name(path) - + if node case revision - when -1 + when -1 return node.head else return node.pages.find_by_revision( revision ) end end - + nil end - + # Instance Methods - + def find_or_create_draft current_user if draft && self.lock_owner == current_user draft @@ -69,7 +70,7 @@ class Node < ActiveRecord::Base draft elsif draft && self.lock_owner != current_user raise( - LockedByAnotherUser, + LockedByAnotherUser, "Page is locked by another user who is working on it! " \ "Last modification: #{draft.updated_at.to_s(:db)}" ) @@ -78,42 +79,42 @@ class Node < ActiveRecord::Base create_new_draft current_user end end - + def create_new_draft user empty_page = self.pages.create! empty_page.user = (self.head ? self.head.user : user) empty_page.editor = user empty_page.save - + empty_page.clone_attributes_from self.head - + self.draft = empty_page self.save self.draft.reload end - + def publish_draft! if self.draft self.head = self.draft self.head.published_at ||= Time.now self.head.save! - + self.draft = nil - + if staged_slug && (staged_slug != slug) self.slug = staged_slug end - + if staged_parent_id && (staged_parent_id != parent_id) self.parent_id = staged_parent_id end - + self.save! self.unlock! self end end - + def restore_revision! revision if page = self.pages.find_by_revision(revision) self.head = page @@ -122,31 +123,31 @@ class Node < ActiveRecord::Base nil end end - + # returns an array with all parts of a unique_name rather than a string def unique_path unique_name.split("/") rescue [unique_name] end - + # returns array with pages up to root excluding root def path_to_root parent.nil? ? [slug] : parent.path_to_root.push(slug) end - + def current_unique_name path = path_to_root[1..-1] # excluding root self.unique_name = path.join("/") end - - def update_unique_name + + def update_unique_name current_unique_name self.save end - + def locked? !self.lock_owner.nil? end - + def unlock! if self.lock_owner self.lock_owner = nil @@ -154,23 +155,23 @@ class Node < ActiveRecord::Base self end end - + def title head ? head.title : draft.title end - + def update_unique_names? !children.empty? && !children.first.path_to_root.include?(self.slug) end - + def head? head_id end - + def update? unique_path.length == 3 && unique_path[0] == "updates" end - + # Returns immutable node id for all new nodes so that the atom feed entry ids # stay the same eventhough the slug or positions changes. # Can be removed after a year or so ;) @@ -178,13 +179,13 @@ class Node < ActiveRecord::Base new_id_format_date = "2009-11-14".to_time self.created_at < new_id_format_date ? unique_path : id end - + protected def lock_for! current_user self.lock_owner = current_user self.save end - + # Creates an empty page and associates it to the given node. This means # freshly created node has an empty draft. A user can create nodes as he # wants to which will not appear on the public page until the author edits @@ -195,14 +196,14 @@ class Node < ActiveRecord::Base self.save end end - + def check_for_changed_slug if parent and changed.include? "slug" self.unique_name = current_unique_name end end - - # Watch out recursion ahead! update_unique_name itself triggers this + + # Watch out recursion ahead! update_unique_name itself triggers this # after_save callback which invokes update_unique_name on its children. # Hopefully until no childrens occur def update_unique_names_of_children @@ -212,7 +213,7 @@ class Node < ActiveRecord::Base end end end - + def borders if lft && rgt && (lft > rgt) errors.add("Fuck!. lft should never be smaller than rgt") -- cgit v1.3