| 
									
										
										
										
											2015-02-12 13:01:05 +03:00
										 |  |  | module Connectors | 
					
						
							|  |  |  |   class Project < Base | 
					
						
							|  |  |  |     include Helpers::InsertCommand, | 
					
						
							|  |  |  |       Helpers::ShowCommand, | 
					
						
							|  |  |  |       Helpers::ListCommand, | 
					
						
							|  |  |  |       Helpers::DeleteCommand, | 
					
						
							|  |  |  |       Helpers::UpdateCommand | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def initialize(db) | 
					
						
							|  |  |  |       @collection = db.collection('projects') | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def is_project_exists?(project) | 
					
						
							|  |  |  |       self.project(project.id) | 
					
						
							|  |  |  |       return true | 
					
						
							|  |  |  |     rescue RecordNotFound => e | 
					
						
							|  |  |  |       return false | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def projects_all | 
					
						
							|  |  |  |       list | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-03 12:46:35 +03:00
										 |  |  |     def projects ids=nil, type=nil, fields=[], archived=false | 
					
						
							| 
									
										
										
										
											2015-02-12 13:01:05 +03:00
										 |  |  |       query = {} | 
					
						
							|  |  |  |       query['_id'] = {'$in' => ids} if ids | 
					
						
							|  |  |  |       query['type'] = 'multi' if type == :multi | 
					
						
							| 
									
										
										
										
											2015-03-03 12:46:35 +03:00
										 |  |  |       if archived | 
					
						
							|  |  |  |         query["archived"] = true | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  |         query["archived"] = {"$exists" => false} | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2015-02-12 13:01:05 +03:00
										 |  |  |       list(query, fields: fields) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # names - array of project names | 
					
						
							|  |  |  |     def project_names_with_envs(names=nil) | 
					
						
							|  |  |  |       # db.projects.aggregate({$unwind:"$deploy_envs"}, {$project:{"deploy_envs.identifier":1}}, {$group:{_id:"$_id", envs: {$addToSet: "$deploy_envs.identifier"}}}) | 
					
						
							|  |  |  |       q = [] | 
					
						
							|  |  |  |       unless names.nil? | 
					
						
							|  |  |  |         q.push({ | 
					
						
							|  |  |  |           '$match' => { | 
					
						
							|  |  |  |             '_id' => { | 
					
						
							|  |  |  |               '$in' => names | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |         }) | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |       q.push({ | 
					
						
							|  |  |  |         '$unwind' => '$deploy_envs' | 
					
						
							|  |  |  |       }) | 
					
						
							|  |  |  |       q.push({ | 
					
						
							|  |  |  |         '$project' => { | 
					
						
							|  |  |  |           'deploy_envs.identifier' => 1
 | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       }) | 
					
						
							|  |  |  |       q.push({ | 
					
						
							|  |  |  |         '$group' => { | 
					
						
							|  |  |  |           '_id' => '$_id', | 
					
						
							|  |  |  |           'envs' => { | 
					
						
							|  |  |  |             '$addToSet' => '$deploy_envs.identifier' | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       }) | 
					
						
							|  |  |  |       res = @collection.aggregate(q) | 
					
						
							|  |  |  |       r = {} | 
					
						
							|  |  |  |       res.each do |ar| | 
					
						
							|  |  |  |         r[ar['_id']] = ar['envs'] | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |       return r | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def projects_by_image(image) | 
					
						
							|  |  |  |       list('deploy_envs.image' => image) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def projects_by_user(user) | 
					
						
							|  |  |  |       list('deploy_envs.users' => user) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-03 12:46:35 +03:00
										 |  |  |     def archive_project id | 
					
						
							|  |  |  |       @collection.update({"_id" => id}, {"$set" => {"archived" => true}}) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def unarchive_project id | 
					
						
							|  |  |  |       @collection.update({"_id" => id}, {"$unset" => {"archived" => ""}}) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-12 13:01:05 +03:00
										 |  |  |     def check_project_auth(project_id, env, user_id) | 
					
						
							|  |  |  |       project = show(project_id) | 
					
						
							|  |  |  |       raise InvalidPrivileges.new("User '#{user_id}' unauthorized to work with project '#{project_id}'") unless project.check_authorization(user_id, env) | 
					
						
							|  |  |  |       project | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     private | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def model_from_bson(bson) | 
					
						
							| 
									
										
										
										
											2015-02-18 11:00:24 +03:00
										 |  |  |       ::Project.build_from_bson(bson) | 
					
						
							| 
									
										
										
										
											2015-02-12 13:01:05 +03:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | end |