fluke/devops-service/db/mongo/connectors/project.rb

158 lines
4.2 KiB
Ruby
Raw Normal View History

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
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!
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
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
2016-03-01 22:05:25 +03:00
params.keep_if {|k,v| permitted_project_fields.include?(k)}
2015-09-15 13:06:25 +03:00
@collection.update({"_id" => id}, {'$set' => params })
end
2015-02-12 13:01:05 +03:00
private
2016-03-01 22:05:25 +03:00
def permitted_project_fields
%w(run_list description named_tasks)
end
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