jrgifford/delayed_paperclip

View on GitHub
lib/delayed_paperclip/url_generator.rb

Summary

Maintainability
A
1 hr
Test Coverage
require 'uri'
require 'paperclip/url_generator'

module DelayedPaperclip
  class UrlGenerator < ::Paperclip::UrlGenerator
    def initialize(attachment, _compatibility = nil)
      @attachment = attachment
      @attachment_options = attachment.options
    end

    def for(style_name, options)
      most_appropriate_url = @attachment.processing_style?(style_name) ? most_appropriate_url(style_name) : most_appropriate_url()
      timestamp_as_needed(
        escape_url_as_needed(
          @attachment_options[:interpolator].interpolate(most_appropriate_url, @attachment, style_name),
          options
        ),
      options)
    end

    # This method is a mess
    def most_appropriate_url(style = nil)
      if @attachment.processing_style?(style)
        if @attachment.original_filename.nil? || delayed_default_url?(style)

          if @attachment.delayed_options.nil? ||
            @attachment.processing_image_url.nil? ||
            !@attachment.processing?
            default_url
          else
            @attachment.processing_image_url
          end

        else
          @attachment_options[:url]
        end
      else
        super()
      end
    end

    def timestamp_possible?
      delayed_default_url? ? false : super
    end

    def delayed_default_url?(style = nil)
      return false if @attachment.job_is_processing
      return false if @attachment.dirty?
      return false if not @attachment.delayed_options.try(:[], :url_with_processing)
      return false if not processing?(style)
      true
    end

    private

    def processing?(style)
      return true if @attachment.processing?
      return @attachment.processing_style?(style) if style
    end
  end
end