Sha256: 1ad4c6e0edd6e7bc2f31fb8d2f2f912633df1b125bd360d4262cee6c111d2bfe

Contents?: true

Size: 940 Bytes

Versions: 4

Compression:

Stored size: 940 Bytes

Contents

# frozen_string_literal: true

module Alchemy
  class Picture < BaseRecord
    class S3Url
      attr_reader :variant

      # @param [Alchemy::PictureVariant]
      #
      def initialize(variant)
        raise ArgumentError, "Variant missing!" if variant.nil?

        @variant = variant
      end

      def call(*)
        return variant.image.remote_url unless processible_image?

        ::Dragonfly.app(:alchemy_pictures).remote_url_for(uid)
      end

      private

      def processible_image?
        variant.image.is_a?(::Dragonfly::Job)
      end

      def uid
        signature = PictureThumb::Signature.call(variant)
        thumb = variant.picture.thumbs.detect { |t| t.signature == signature }
        if thumb
          uid = thumb.uid
        else
          uid = PictureThumb::Uid.call(signature, variant)
          PictureThumb::Create.call(variant, signature, uid)
        end
        uid
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
alchemy-dragonfly-s3-4.0.5 app/models/alchemy/picture/s3_url.rb
alchemy-dragonfly-s3-5.0.6 app/models/alchemy/picture/s3_url.rb
alchemy-dragonfly-s3-5.0.5 app/models/alchemy/picture/s3_url.rb
alchemy-dragonfly-s3-4.0.4 app/models/alchemy/picture/s3_url.rb