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