From 3b2b3cff04993c7247e953c10aa8c6fb5e8d6ddb Mon Sep 17 00:00:00 2001 From: Marin Jankovski Date: Mon, 26 May 2014 14:53:34 +0200 Subject: [PATCH] Move logic to image_service. --- app/controllers/projects_controller.rb | 14 +++----------- app/services/projects/image_service.rb | 39 +++++++++++++++++++++++++++++++++++++++ spec/controllers/commits_controller_spec.rb | 2 +- 3 files changed, 43 insertions(+), 12 deletions(-) create mode 100644 app/services/projects/image_service.rb 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