docbrown/app/view_objects/articles/social_image.rb

65 lines
2 KiB
Ruby

module Articles
class SocialImage
include Rails.application.routes.url_helpers
include CloudinaryHelper
SOCIAL_PREVIEW_MIGRATION_DATETIME = Time.zone.parse("2019-04-22T00:00:00Z")
def initialize(article, **options)
@article = article
@height = options[:height] || 500
@width = options[:width] || 1000
end
def url
image = user_defined_image
if image.present?
return cl_image_path(image,
type: "fetch",
width: width,
height: height,
crop: "imagga_scale",
quality: "auto",
flags: "progressive",
fetch_format: "auto",
sign_url: true)
end
return legacy_article_social_image unless use_new_social_url?
article_social_preview_url(article, format: :png)
end
private
attr_reader :article, :height, :width
def legacy_article_social_image
cache_key = "article-social-img-#{article}-#{article.updated_at.rfc3339}-#{article.comments_count}"
Rails.cache.fetch(cache_key, expires_in: 1.hour) do
src = GeneratedImage.new(article).social_image
return src if src.start_with? "https://res.cloudinary.com/"
cl_image_path(src,
type: "fetch",
width: "1000",
height: "500",
crop: "imagga_scale",
quality: "auto",
flags: "progressive",
fetch_format: "auto",
sign_url: true)
end
end
def use_new_social_url?
article.updated_at > SOCIAL_PREVIEW_MIGRATION_DATETIME
end
def user_defined_image
return article.social_image if article.social_image.present?
return article.main_image if article.main_image.present?
return article.video_thumbnail_url if article.video_thumbnail_url.present?
end
end
end