2015-02-12 13:01:05 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								module  Connectors  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  class  Project  <  Base 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    include  Helpers :: InsertCommand , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      Helpers :: ShowCommand , 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-15 13:06:25 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      Helpers :: DeleteCommand 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-12 13:01:05 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  initialize ( db ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-21 15:54:33 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      super ( db ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  collection_name 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'projects' 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-12 13:01:05 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    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-10-23 21:17:04 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      fields  <<  '_id' 
							 
						 
					
						
							
								
									
										
										
										
											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 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-20 18:31:54 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      r 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-12 13:01:05 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    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 ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-27 14:00:28 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      raise  InvalidPrivileges . new ( " User ' #{ user_id } ' is unauthorized to work with project ' #{ project_id } ' and environment ' #{ env } ' " )  unless  project . check_authorization ( user_id ,  env ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-12 13:01:05 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								      project 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-11-20 18:31:54 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # {find all projects with deploy_envs with field=value}, {return deploy_envs with field=value} 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-24 15:37:11 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  projects_and_deploy_envs_by_field  field ,  value 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-20 18:31:54 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      q  =  { field  = >  value } 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-24 16:41:56 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      list (  { 'deploy_envs'  = >  { '$elemMatch'  = >  q } } ,  { :fields  = >  { 'deploy_envs'  = >  { '$elemMatch'  = >  q } } }  ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-24 15:37:11 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-10-06 13:50:26 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  set_project_deploy_env_field ( project_id ,  env ,  field_value_hash ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      set  =  { } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      field_value_hash . each  do  | field ,  value | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        set [ " deploy_envs.$. #{ field } " ]  =  value 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      @collection . update ( { " _id "  = >  project_id ,  " deploy_envs.identifier "  = >  env } ,  { " $set "  = >  set } ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-22 12:49:27 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-08-04 12:36:10 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  set_project_env_run_list ( project_id ,  env ,  run_list ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-20 18:31:54 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      :: Validators :: Helpers :: RunList . new ( run_list ) . validate! 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-06 13:50:26 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      set_project_deploy_env_field ( project_id ,  env ,  { " run_list "  = >  run_list } ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-04 12:36:10 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-11-20 18:31:54 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  set_project_run_list ( project_id ,  run_list ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      :: Validators :: Helpers :: RunList . new ( run_list ) . validate! 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-04 12:36:10 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      @collection . update ( { " _id "  = >  project_id } ,  { " $set "  = >  { run_list :  run_list } } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-08-14 17:47:18 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  add_deploy_env_to_project  id ,  env 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      @collection . update ( { " _id "  = >  id } ,  { '$push'  = >  { deploy_envs :  env . to_hash }  } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-09-11 16:18:20 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  remove_deploy_env_from_project  id ,  env 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-20 18:31:54 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      raise  ArgumentError  unless  env . is_a? ( String ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-11 16:18:20 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      @collection . update ( { " _id "  = >  id } ,  { '$pull'  = >  { deploy_envs :  { identifier :  env } }  } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-09-14 18:43:03 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  project_update_field  id ,  field ,  value 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-20 18:31:54 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      obj  =  { field  = >  value } 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-14 17:47:11 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      @collection . update ( { " _id "  = >  id } ,  { '$set'  = >  obj  } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-09-15 13:06:25 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  project_update  id ,  params 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      keys  =  %w( run_list description ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      params . delete_if { | k , v |  ! keys . include? ( k ) } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      @collection . update ( { " _id "  = >  id } ,  { '$set'  = >  params  } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-02-12 13:01:05 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    private 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-07-10 10:30:14 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  list ( query = { } ,  query_options = { } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      @collection . find ( query ,  query_options ) . to_a . map  { | bson |  model_from_bson ( bson ) } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-02-12 13:01:05 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    def  model_from_bson ( bson ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-06 12:20:30 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      Devops :: Model :: Project . build_from_bson ( bson ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-12 13:01:05 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								end