Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJarka Kadlecova <jarka@gitlab.com>2017-05-03 18:26:49 +0300
committerJarka Kadlecova <jarka@gitlab.com>2017-05-31 08:17:03 +0300
commit4464c22d6d23d893494682d309aec3fb31c11ae3 (patch)
treecb7490034185f79c88db472650b87afdcdbafa3f /app/uploaders/file_mover.rb
parent8039b9c3c6caedc19e0e44d086a007e8975134b7 (diff)
Support descriptions for snippets
Diffstat (limited to 'app/uploaders/file_mover.rb')
-rw-r--r--app/uploaders/file_mover.rb48
1 files changed, 48 insertions, 0 deletions
diff --git a/app/uploaders/file_mover.rb b/app/uploaders/file_mover.rb
new file mode 100644
index 00000000000..21e37a08a82
--- /dev/null
+++ b/app/uploaders/file_mover.rb
@@ -0,0 +1,48 @@
+class FileMover
+ attr_reader :secret, :file_name, :model
+
+ def initialize(file_path, model, update_field = :description)
+ @secret = File.split(File.dirname(file_path)).last
+ @file_name = File.basename(file_path)
+ @model = model
+ end
+
+ def execute
+ move
+ update_markdown
+ end
+
+ private
+
+ def move
+ FileUtils.mkdir_p(file_path)
+ FileUtils.move(temp_file_path, file_path)
+ end
+
+ def update_markdown(field = :description)
+ updated_text = model.send(field).sub(temp_file_uploader.to_markdown, uploader.to_markdown)
+ model.update_attribute(field, updated_text)
+ end
+
+ def temp_file_path
+ temp_file_uploader.retrieve_from_store!(file_name)
+
+ temp_file_uploader.file.path
+ end
+
+ def file_path
+ return @file_path if @file_path
+
+ uploader.retrieve_from_store!(file_name)
+
+ @file_path = uploader.file.path
+ end
+
+ def uploader
+ @uploader ||= PersonalFileUploader.new(model, secret)
+ end
+
+ def temp_file_uploader
+ @temp_file_uploader ||= PersonalFileUploader.new(nil, secret)
+ end
+end