Module: S3DirectMultipartUpload::Dev::Storage
- Defined in:
- app/services/s3_direct_multipart_upload/dev/storage.rb
Class Method Summary collapse
- .combine_disk_parts(upload_session) ⇒ Object
- .combine_parts(upload_session) ⇒ Object
- .combined_file_exist?(upload_session) ⇒ Boolean
- .combined_path(upload_session) ⇒ Object
- .dev_environment? ⇒ Boolean
- .disk_service?(upload_session) ⇒ Boolean
- .download_s3_object(upload_session) ⇒ Object
- .ensure_directories(upload_session) ⇒ Object
- .parts_dir(upload_session) ⇒ Object
- .root ⇒ Object
Class Method Details
.combine_disk_parts(upload_session) ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'app/services/s3_direct_multipart_upload/dev/storage.rb', line 49 def combine_disk_parts(upload_session) expected = upload_session.expected_parts raise "upload is not completed" unless upload_session.completed? if expected <= 1 single_part_path = parts_dir(upload_session).join("1") source = single_part_path.exist? ? single_part_path : combined_path(upload_session) raise "part is missing" unless source.exist? FileUtils.cp(source, combined_path(upload_session)) return combined_path(upload_session) end io = StringIO.new (1..expected).each do |part_number| part_path = parts_dir(upload_session).join(part_number.to_s) raise "missing part #{part_number}" unless part_path.exist? io.write(File.binread(part_path)) end File.binwrite(combined_path(upload_session), io.string) combined_path(upload_session) end |
.combine_parts(upload_session) ⇒ Object
21 22 23 24 25 26 27 28 29 30 |
# File 'app/services/s3_direct_multipart_upload/dev/storage.rb', line 21 def combine_parts(upload_session) raise "download is available only in development/test" unless dev_environment? ensure_directories(upload_session) if disk_service?(upload_session) combine_disk_parts(upload_session) else download_s3_object(upload_session) end end |
.combined_file_exist?(upload_session) ⇒ Boolean
32 33 34 |
# File 'app/services/s3_direct_multipart_upload/dev/storage.rb', line 32 def combined_file_exist?(upload_session) combined_path(upload_session).exist? end |
.combined_path(upload_session) ⇒ Object
13 14 15 |
# File 'app/services/s3_direct_multipart_upload/dev/storage.rb', line 13 def combined_path(upload_session) root.join(upload_session.object_key.to_s.sub(/\A\//, "")) end |
.dev_environment? ⇒ Boolean
36 37 38 |
# File 'app/services/s3_direct_multipart_upload/dev/storage.rb', line 36 def dev_environment? Rails.env.development? || Rails.env.test? end |
.disk_service?(upload_session) ⇒ Boolean
40 41 42 |
# File 'app/services/s3_direct_multipart_upload/dev/storage.rb', line 40 def disk_service?(upload_session) upload_session.class.send(:disk_service?) end |
.download_s3_object(upload_session) ⇒ Object
74 75 76 77 78 79 80 81 82 |
# File 'app/services/s3_direct_multipart_upload/dev/storage.rb', line 74 def download_s3_object(upload_session) client = upload_session.class.s3_client client.get_object( bucket: upload_session.bucket, key: upload_session.object_key, response_target: combined_path(upload_session) ) combined_path(upload_session) end |
.ensure_directories(upload_session) ⇒ Object
44 45 46 47 |
# File 'app/services/s3_direct_multipart_upload/dev/storage.rb', line 44 def ensure_directories(upload_session) FileUtils.mkdir_p(combined_path(upload_session).dirname) FileUtils.mkdir_p(parts_dir(upload_session)) end |
.parts_dir(upload_session) ⇒ Object
17 18 19 |
# File 'app/services/s3_direct_multipart_upload/dev/storage.rb', line 17 def parts_dir(upload_session) combined_path(upload_session).dirname.join("#{combined_path(upload_session).basename}.parts") end |
.root ⇒ Object
9 10 11 |
# File 'app/services/s3_direct_multipart_upload/dev/storage.rb', line 9 def root Rails.root.join("tmp/s3_direct_multipart_upload") end |