summaryrefslogtreecommitdiff
path: root/app/models/photo.rb
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