51 lines
		
	
	
		
			1011 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
		
		
			
		
	
	
			51 lines
		
	
	
		
			1011 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
|   | require "db/exceptions/invalid_record" | ||
|  | require "db/mongo/models/mongo_model" | ||
|  | require "json" | ||
|  | 
 | ||
|  | class Key < MongoModel | ||
|  | 
 | ||
|  |   SYSTEM = "system" | ||
|  |   USER = "user" | ||
|  | 
 | ||
|  |   attr_accessor :id, :path, :scope | ||
|  |   types :id => {:type => String, :empty => false}, | ||
|  |         :path => {:type => String, :empty => false}, | ||
|  |         :scope => {:type => String, :empty => false} | ||
|  | 
 | ||
|  |   def initialize p={} | ||
|  |     self.id = p["id"] | ||
|  |     self.path = p["path"] | ||
|  |     self.scope = p["scope"] || USER | ||
|  |   end | ||
|  | 
 | ||
|  |   def self.create_from_bson s | ||
|  |     key = Key.new s | ||
|  |     key.id = s["_id"] | ||
|  |     key | ||
|  |   end | ||
|  | 
 | ||
|  |   def self.create_from_json json | ||
|  |     Key.new( JSON.parse(json) ) | ||
|  |   end | ||
|  | 
 | ||
|  |   def filename | ||
|  |     File.basename(self.path) | ||
|  |   end | ||
|  | 
 | ||
|  |   def to_hash_without_id | ||
|  |     o = { | ||
|  |       "path" => self.path, | ||
|  |       "scope" => self.scope | ||
|  |     } | ||
|  |     o | ||
|  |   end | ||
|  | 
 | ||
|  |   def validate! | ||
|  |     super | ||
|  |     raise InvalidRecord.new "File does not exist" unless File.exist?(self.path) | ||
|  |     raise InvalidRecord.new "Key parameter 'scope' is invalid" unless [SYSTEM, USER].include?(self.scope) | ||
|  |     true | ||
|  |   end | ||
|  | 
 | ||
|  | end |