From 0614793b38db4711053cbcb4fa80d9c8cc492eec Mon Sep 17 00:00:00 2001
From: Douwe Maan <douwe@gitlab.com>
Date: Fri, 8 Jan 2016 17:38:53 +0100
Subject: [PATCH] DRY up upload and download services

---
 app/services/projects/download_service.rb     | 13 +---------
 app/services/projects/upload_service.rb       | 13 +---------
 app/uploaders/file_uploader.rb                | 15 ++++++++++++
 lib/gitlab/fogbugz_import/importer.rb         |  2 +-
 .../projects/download_service_spec.rb         | 24 +++++++++----------
 5 files changed, 30 insertions(+), 37 deletions(-)

diff --git a/app/services/projects/download_service.rb b/app/services/projects/download_service.rb
index b846a59ed9..6386f57fb0 100644
--- a/app/services/projects/download_service.rb
+++ b/app/services/projects/download_service.rb
@@ -16,18 +16,7 @@ module Projects
       uploader.download!(@url)
       uploader.store!
 
-      filename = uploader.image? ? uploader.file.basename : uploader.file.filename
-
-      escaped_filename = filename.gsub("]", "\\]")
-      markdown = "[#{escaped_filename}](#{uploader.secure_url})"
-      markdown.prepend("!") if uploader.image?
-
-      {
-        'alt'       => filename,
-        'url'       => uploader.secure_url,
-        'is_image'  => uploader.image?,
-        'markdown'  => markdown
-      }
+      uploader.to_h
     end
 
     private
diff --git a/app/services/projects/upload_service.rb b/app/services/projects/upload_service.rb
index 36ccf1cda1..012e82a770 100644
--- a/app/services/projects/upload_service.rb
+++ b/app/services/projects/upload_service.rb
@@ -10,18 +10,7 @@ module Projects
       uploader = FileUploader.new(@project)
       uploader.store!(@file)
 
-      filename = uploader.image? ? uploader.file.basename : uploader.file.filename
-
-      escaped_filename = filename.gsub("]", "\\]")
-      markdown = "[#{escaped_filename}](#{uploader.secure_url})"
-      markdown.prepend("!") if uploader.image?
-
-      {
-        alt:      filename,
-        url:      uploader.secure_url,
-        is_image: uploader.image?,
-        markdown: markdown
-      }
+      uploader.to_h
     end
 
     private
diff --git a/app/uploaders/file_uploader.rb b/app/uploaders/file_uploader.rb
index ac920119a8..86d24469e0 100644
--- a/app/uploaders/file_uploader.rb
+++ b/app/uploaders/file_uploader.rb
@@ -30,4 +30,19 @@ class FileUploader < CarrierWave::Uploader::Base
   def secure_url
     File.join("/uploads", @secret, file.filename)
   end
+
+  def to_h
+    filename = image? ? self.file.basename : self.file.filename
+    escaped_filename = filename.gsub("]", "\\]")
+
+    markdown = "[#{escaped_filename}](#{self.secure_url})"
+    markdown.prepend("!") if image?
+
+    {
+      alt:      filename,
+      url:      self.secure_url,
+      is_image: image?,
+      markdown: markdown
+    }
+  end
 end
diff --git a/lib/gitlab/fogbugz_import/importer.rb b/lib/gitlab/fogbugz_import/importer.rb
index 0e6bee732f..db580b5e57 100644
--- a/lib/gitlab/fogbugz_import/importer.rb
+++ b/lib/gitlab/fogbugz_import/importer.rb
@@ -232,7 +232,7 @@ module Gitlab
 
         return nil if res.nil?
 
-        res['markdown']
+        res[:markdown]
       end
 
       def build_attachment_url(rel_url)
diff --git a/spec/services/projects/download_service_spec.rb b/spec/services/projects/download_service_spec.rb
index 5ceed5af9a..f252e2c590 100644
--- a/spec/services/projects/download_service_spec.rb
+++ b/spec/services/projects/download_service_spec.rb
@@ -33,12 +33,12 @@ describe Projects::DownloadService, services: true do
           @link_to_file = download_file(@project, url)
         end
 
-        it { expect(@link_to_file).to have_key('alt') }
-        it { expect(@link_to_file).to have_key('url') }
-        it { expect(@link_to_file).to have_key('is_image') }
-        it { expect(@link_to_file['is_image']).to be true }
-        it { expect(@link_to_file['url']).to match('rails_sample.jpg') }
-        it { expect(@link_to_file['alt']).to eq('rails_sample') }
+        it { expect(@link_to_file).to have_key(:alt) }
+        it { expect(@link_to_file).to have_key(:url) }
+        it { expect(@link_to_file).to have_key(:is_image) }
+        it { expect(@link_to_file[:is_image]).to be true }
+        it { expect(@link_to_file[:url]).to match('rails_sample.jpg') }
+        it { expect(@link_to_file[:alt]).to eq('rails_sample') }
       end
 
       context 'a txt file' do
@@ -47,12 +47,12 @@ describe Projects::DownloadService, services: true do
           @link_to_file = download_file(@project, url)
         end
 
-        it { expect(@link_to_file).to have_key('alt') }
-        it { expect(@link_to_file).to have_key('url') }
-        it { expect(@link_to_file).to have_key('is_image') }
-        it { expect(@link_to_file['is_image']).to be false }
-        it { expect(@link_to_file['url']).to match('doc_sample.txt') }
-        it { expect(@link_to_file['alt']).to eq('doc_sample.txt') }
+        it { expect(@link_to_file).to have_key(:alt) }
+        it { expect(@link_to_file).to have_key(:url) }
+        it { expect(@link_to_file).to have_key(:is_image) }
+        it { expect(@link_to_file[:is_image]).to be false }
+        it { expect(@link_to_file[:url]).to match('doc_sample.txt') }
+        it { expect(@link_to_file[:alt]).to eq('doc_sample.txt') }
       end
     end
   end
-- 
2.30.9