64 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
		
		
			
		
	
	
			64 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
|   | require "commands/image" | ||
|  | require "db/mongo/models/image" | ||
|  | require "app/api3/parsers/image" | ||
|  | require_relative "request_handler" | ||
|  | 
 | ||
|  | module Devops | ||
|  |   module API3 | ||
|  |     module Handler | ||
|  |       class Image < RequestHandler | ||
|  | 
 | ||
|  |         set_parser Devops::API3::Parser::ImageParser | ||
|  | 
 | ||
|  |         def images | ||
|  |           provider = parser.images | ||
|  |           if provider | ||
|  |             Devops::Model::Image.where(provider: provider) | ||
|  |           else | ||
|  |             Devops::Model::Image.all | ||
|  |           end | ||
|  |         end | ||
|  | 
 | ||
|  |         def image id | ||
|  |           Devops::Model::Image.find(id) | ||
|  |         rescue Mongoid::Errors::DocumentNotFound | ||
|  |           raise Devops::Exception::RecordNotFound.new("Image with id '#{id}' not found") | ||
|  |         end | ||
|  | 
 | ||
|  |         def create_image | ||
|  |           image = parser.image | ||
|  |           image.save! | ||
|  |           DevopsLogger.logger.info "Image '#{image.id}' has been created" | ||
|  |           image | ||
|  |         rescue Mongoid::Errors::Validations => e | ||
|  |           raise Devops::Exception::ValidationError.create_from_db_exception(e) | ||
|  |         end | ||
|  | 
 | ||
|  |         def update_image id | ||
|  |           image = image(id) | ||
|  |           obj = parser.image | ||
|  |           image.update_attributes! obj.to_hash_update | ||
|  |           DevopsLogger.logger.info "Image '#{image.id}' has been updated" | ||
|  |           image | ||
|  |         rescue Mongoid::Errors::Validations => e | ||
|  |           raise Devops::Exception::ValidationError.create_from_db_exception(e) | ||
|  |         end | ||
|  | 
 | ||
|  |         def delete_image id | ||
|  |           projects = Devops::Model::Project.find_by('environments.image' => id) | ||
|  |           ar = [] | ||
|  |           projects.each do |p| | ||
|  |             ar += p.environments.select{|e| e.respond_to?(:image)}.select{|e| e.image == id}.map{|e| "#{p.id}.#{e.id}"} | ||
|  |           end | ||
|  |           raise DependencyError.new "Deleting is forbidden: Image is used in #{ar.join(", ")}" | ||
|  |         rescue Mongoid::Errors::DocumentNotFound | ||
|  |           image(id).delete | ||
|  |           DevopsLogger.logger.info "Image '#{id}' has been deleted" | ||
|  |         end | ||
|  | 
 | ||
|  |       end | ||
|  |     end | ||
|  |   end | ||
|  | end | ||
|  | 
 |