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