Commit 0e26bca0
Changed files (5)
app
services
application
handlers
infrastructure
spec
services
infrastructure
app/services/application/handlers/process_avatar.rb
@@ -9,7 +9,7 @@ class ProcessAvatar
def handle(message)
user = User.find(message[:user_id])
- user.avatar = Photo.create!(image_processing: true)
+ user.avatar = Photo.create!
user.avatar.upload(message[:file_path], @blob_storage)
user.avatar.save!
end
app/services/infrastructure/blob_storage.rb
@@ -12,6 +12,16 @@ class BlobStorage
object.acl = :public_read
end
+ def download(key)
+ object = connection.buckets[bucket_name].objects[key]
+ File.open("#{Dir.tmpdir}/#{key}", "wb") do |tempfile|
+ object.read do |chunk|
+ tempfile.write(chunk)
+ end
+ yield tempfile
+ end
+ end
+
private
def connection
spec/services/infrastructure/blob_storage_spec.rb
@@ -4,9 +4,9 @@ describe BlobStorage do
let(:bucket) { ENV['FOG_DIRECTORY'] }
subject { BlobStorage.new }
- context "when uploading" do
- let(:file) { File.join(Rails.root, 'spec/fixtures/images/gps.jpg') }
+ let(:file) { File.join(Rails.root, 'spec/fixtures/images/gorilla.jpg') }
+ context "when uploading" do
it "uploads to s3" do
key = "test#{SecureRandom.uuid}"
subject.upload(key, file)
@@ -15,4 +15,17 @@ describe BlobStorage do
expect(object.exists?).to be_truthy
end
end
+
+ describe "#download" do
+ let(:key) { "test#{SecureRandom.uuid}" }
+
+ it 'downloads a file from blob storage' do
+ subject.upload(key, file)
+
+ sha = subject.download(key) do |temp_file|
+ Digest::SHA256.file(temp_file.path).hexdigest
+ end
+ expect(sha).to eql(Digest::SHA256.file(file).hexdigest)
+ end
+ end
end
Gemfile
@@ -35,7 +35,7 @@ gem 'gibbon', '~> 1.1.2'
gem 'twitter', '~> 5.9.0'
gem 'spank'
gem 'exifr', '~> 1.1.3'
-gem 'aws-sdk', '~> 1.42.0'
+gem 'aws-sdk'
gem 'mime-types', '~> 1.25.1'
gem 'ejs', '~> 1.1.1'
gem 'js-routes', '~> 0.9.8'
Gemfile.lock
@@ -34,7 +34,9 @@ GEM
asset_sync (1.0.0)
activemodel
fog (>= 1.8.0)
- aws-sdk (1.42.0)
+ aws-sdk (1.53.0)
+ aws-sdk-v1 (= 1.53.0)
+ aws-sdk-v1 (1.53.0)
json (~> 1.4)
nokogiri (>= 1.4.4)
bcrypt (3.1.7)
@@ -342,7 +344,7 @@ PLATFORMS
DEPENDENCIES
acts-as-taggable-on (~> 3.3.0)
asset_sync (~> 1.0.0)
- aws-sdk (~> 1.42.0)
+ aws-sdk
bcrypt-ruby
better_errors
binding_of_caller