module Noah class Ephemeral < Model include EphemeralValidations include Taggable include Linkable attribute :path attribute :data attribute :lifetime index :path def validate super assert_present :path assert_unique :path assert_not_reserved end def name @name = path end def to_hash h = {:path => path, :data => data, :created_at => created_at, :updated_at => updated_at} super.merge(h) end class << self def find_or_create(opts = {}) begin path, data = opts[:path], opts[:data] find(:path => path).first.nil? ? (obj = new(:path => path)) : (obj = find(:path => path).first) obj.data = data if obj.valid? obj.save end obj rescue Exception => e e.message end end end protected def save_hook # called after any create,update,delete # logic needed to expire any orphaned ephemerals end private def path_protected?(path_part) # Check for protected paths in ephemeral nodes end end end