mirror of
https://github.com/indentlabs/notebook.git
synced 2025-10-26 11:19:22 +00:00
43 lines
1.4 KiB
Ruby
43 lines
1.4 KiB
Ruby
require 'active_support/concern'
|
|
|
|
module HasImageUploads
|
|
extend ActiveSupport::Concern
|
|
|
|
included do
|
|
has_many :image_uploads, as: :content
|
|
# todo: dependent: :destroy_async
|
|
# todo: destroy from s3 on destroy
|
|
|
|
def public_image_uploads
|
|
self.image_uploads.where(privacy: 'public').presence || [header_asset_for(self.class.name)]
|
|
end
|
|
|
|
def private_image_uploads
|
|
self.image.uploads.where(privacy: 'private').presence || [header_asset_for(self.class.name)]
|
|
end
|
|
|
|
def random_image_including_private(format: :medium)
|
|
@random_image_including_private_cache ||= {}
|
|
key = self.class.name + self.id.to_s
|
|
return @random_image_including_private_cache[key] if @random_image_including_private_cache.key?(key)
|
|
|
|
result = image_uploads.sample.try(:src, format).presence || header_asset_for(self.class.name)
|
|
@random_image_including_private_cache[key] = result
|
|
|
|
result
|
|
end
|
|
|
|
def first_public_image(format: :medium)
|
|
public_image_uploads.first.try(:src, format).presence || header_asset_for(self.class.name)
|
|
end
|
|
|
|
def random_public_image(format: :medium)
|
|
public_image_uploads.sample.try(:src, format).presence || header_asset_for(self.class.name)
|
|
end
|
|
|
|
def header_asset_for(class_name)
|
|
ActionController::Base.helpers.asset_path("card-headers/#{class_name.downcase.pluralize}.jpg")
|
|
end
|
|
end
|
|
end
|