orbit-basic/app/models/snippet.rb

38 lines
982 B
Ruby

class Snippet
include MongoMapper::Document
key :name, String, :required => true, :index => true
key :full_name, String, :required => true, :index => true
key :parent_id, ObjectId, :required => true, :index => true
key_i18n :content, String
before_validation :setup_default_value
validates_uniqueness_of :name, :scope => :parent_id
belongs_to :parent, :class_name => "Item", :foreign_key => :parent_id
attr_accessor :parent_name
def parent_name
@parent_name || self.parent.name
end
protected
def ancestors
node, nodes = self, []
nodes << node = node.parent while !node.parent.blank?
nodes.reverse
end
def setup_default_value
self.parent_id = Item.find_by_name( self.parent_name || 'root' ).id
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("/")
end
end