blob: a3f3e5476353ccbae95b79a14f3d7bfb90020eac (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
class Photo < ApplicationRecord
belongs_to :imageable, polymorphic: true, counter_cache: true, touch: true, optional: true
scope :processed, ->{ where(image_processing: nil) }
def url_for(version_key, asset_host = ENV['ASSET_HOST'])
version(version_key).url_for(asset_host)
end
def is_processed?
!self.image_processing
end
def upload(file, blob_storage)
image = Image.new(file)
self.original_filename = File.basename(file)
self.image = image.filename
self.content_type = image.content_type
self.latitude, self.longitude = image.geolocation
self.image_processing = nil
self.sha256 = image.sha256
versions.each do |version|
version.adjust(image)
blob_storage.upload(version.blob_key, image.path)
end
end
def version(key)
versions.detect { |version| version.for?(key) }
end
private
def versions
@versions ||= [OriginalVersion.new(self), LargeVersion.new(self), ThumbnailVersion.new(self)]
end
end
|