48 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
		
		
			
		
	
	
			48 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
|   | require "db/mongo/models/mongo_model" | ||
|  | require "db/exceptions/invalid_record" | ||
|  | require "commands/deploy_env" | ||
|  | 
 | ||
|  | class DeployEnvBase < MongoModel | ||
|  | 
 | ||
|  |   include DeployEnvCommands | ||
|  | 
 | ||
|  |   attr_accessor :identifier, :run_list, :expires, :provider, :users | ||
|  | 
 | ||
|  |   def initialize d={} | ||
|  |     self.identifier = d["identifier"] | ||
|  |     b = d["run_list"] || [] | ||
|  |     self.run_list = (b.is_a?(Array) ? b.uniq : b) | ||
|  |     self.expires = d["expires"] | ||
|  |     self.provider = d["provider"] | ||
|  |     b = d["users"] || [] | ||
|  |     self.users = (b.is_a?(Array) ? b.uniq : b) | ||
|  |   end | ||
|  | 
 | ||
|  |   def validate! | ||
|  |     super | ||
|  |     e = DeployEnvBase.validate_run_list(self.run_list) | ||
|  |     raise InvalidRecord.new "Invalid run list elements: '#{e.join("', '")}'" unless e.empty? | ||
|  | 
 | ||
|  |     unless self.expires.nil? | ||
|  |       check_expires!(self.expires) | ||
|  |     end | ||
|  |     check_users!(self.users) | ||
|  |   end | ||
|  | 
 | ||
|  |   def to_hash | ||
|  |     { | ||
|  |       "identifier" => self.identifier, | ||
|  |       "run_list" => self.run_list, | ||
|  |       "expires" => self.expires, | ||
|  |       "provider" => self.provider, | ||
|  |       "users" => self.users | ||
|  |     } | ||
|  |   end | ||
|  | 
 | ||
|  |   def self.validate_run_list list | ||
|  |     rl = /\Arole|recipe\[[\w-]+(::[\w-]+)?\]\Z/ | ||
|  |     list.select {|l| (rl =~ l).nil?} | ||
|  |   end | ||
|  | 
 | ||
|  | end |