2015-02-12 13:01:05 +03:00
module Connectors
class Project < Base
include Helpers :: InsertCommand ,
Helpers :: ShowCommand ,
2015-07-10 10:30:14 +03:00
# Helpers::ListCommand,
2015-09-15 13:06:25 +03:00
Helpers :: DeleteCommand
# Helpers::UpdateCommand
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
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 )
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-09-24 15:37:11 +03:00
def projects_and_deploy_envs_by_field field , value
q = { }
q [ field ] = value
# {find all projects with deploy_envs with field=value}, {return deploy_envs with 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 )
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
def set_project_run_list ( project_id , env , run_list )
Helpers :: RunList . new ( run_list ) . validate!
@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
@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-09-14 17:47:11 +03:00
obj = { }
obj [ field ] = value
@collection . update ( { " _id " = > id } , { '$set' = > obj } )
end
2015-09-15 13:06:25 +03:00
def project_update id , params
2015-09-21 15:54:33 +03:00
#raise InvalidRecord.new("You can not change project name for '#{id}'.") if params["name"]
2015-09-15 13:06:25 +03:00
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