diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 3144ece..07ccbd5 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -163,19 +163,11 @@ class ProjectsController < ApplicationController end def upload_image - uploader = FileUploader.new('uploads', upload_path, accepted_images) - image = params['markdown_img'] - - if image && accepted_images.map{ |format| image.content_type.include? format }.any? - alt = image.original_filename - uploader.store!(image) - link = { 'alt' => File.basename(alt, '.*'), - 'url' => File.join(root_url, uploader.url) } - end + link_to_image = ::Projects::ImageService.new(repository, params, root_url).execute respond_to do |format| - if link - format.json { render json: { link: link } } + if link_to_image + format.json { render json: { link: link_to_image } } else format.json { render json: "Invalid file.", status: :unprocessable_entity } end diff --git a/app/services/projects/image_service.rb b/app/services/projects/image_service.rb new file mode 100644 index 0000000..c79dddd --- /dev/null +++ b/app/services/projects/image_service.rb @@ -0,0 +1,39 @@ +module Projects + class ImageService < BaseService + include Rails.application.routes.url_helpers + def initialize(repository, params, root_url) + @repository, @params, @root_url = repository, params.dup, root_url + end + + def execute + uploader = FileUploader.new('uploads', upload_path, accepted_images) + image = @params['markdown_img'] + + if image && correct_mime_type?(image) + alt = image.original_filename + uploader.store!(image) + link = { + 'alt' => File.basename(alt, '.*'), + 'url' => File.join(@root_url, uploader.url) + } + else + link = nil + end + end + + protected + + def upload_path + base_dir = FileUploader.generate_dir + File.join(@repository.path_with_namespace, base_dir) + end + + def accepted_images + %w(png jpg jpeg gif) + end + + def correct_mime_type?(image) + accepted_images.map{ |format| image.content_type.include? format }.any? + end + end +end diff --git a/spec/controllers/commits_controller_spec.rb b/spec/controllers/commits_controller_spec.rb index 308cfa6..0c19d75 100644 --- a/spec/controllers/commits_controller_spec.rb +++ b/spec/controllers/commits_controller_spec.rb @@ -6,7 +6,7 @@ describe Projects::CommitsController do before do sign_in(user) - project.creator = user + project.team << [user, :master] end describe "GET show" do -- libgit2 0.21.2