orbit-basic/app/models/snippet.rb

38 lines
982 B
Ruby
Raw Normal View History

2010-01-04 07:52:30 +00:00
class Snippet
2010-01-04 07:52:30 +00:00
include MongoMapper::Document
2010-01-11 09:09:50 +00:00
key :name, String, :required => true, :index => true
2010-02-05 09:18:57 +00:00
key :full_name, String, :required => true, :index => true
key :parent_id, ObjectId, :required => true, :index => true
2010-01-18 08:23:33 +00:00
2010-01-08 07:32:44 +00:00
key_i18n :content, String
2010-01-18 08:23:33 +00:00
before_validation :setup_default_value
validates_uniqueness_of :name, :scope => :parent_id
2010-01-18 08:23:33 +00:00
2010-02-22 09:09:39 +00:00
belongs_to :parent, :class_name => "Item", :foreign_key => :parent_id
2010-02-11 08:46:20 +00:00
2010-02-22 09:09:39 +00:00
attr_accessor :parent_name
2010-02-22 07:27:11 +00:00
def parent_name
2010-02-22 09:09:39 +00:00
@parent_name || self.parent.name
2010-02-22 07:27:11 +00:00
end
2010-01-18 08:23:33 +00:00
protected
2010-02-11 08:46:20 +00:00
def ancestors
node, nodes = self, []
nodes << node = node.parent while !node.parent.blank?
nodes.reverse
end
2010-01-18 08:23:33 +00:00
def setup_default_value
2010-02-22 09:09:39 +00:00
self.parent_id = Item.find_by_name( self.parent_name || 'root' ).id
2010-02-11 08:46:20 +00:00
full_node = self.ancestors.map{ |a| a.name }.push( self.name )
full_node.shift if full_node.size >= 2
self.full_name = full_node.join("/")
2010-01-18 08:23:33 +00:00
end
end