Sha256: e647d903297c8c0a1db60a7f6fce577ad0602e787947ad4f477174f8bdd14e09

Contents?: true

Size: 1.59 KB

Versions: 36

Compression:

Stored size: 1.59 KB

Contents

require 'uri'

module Paperclip
  class UrlGenerator
    def initialize(attachment, attachment_options)
      @attachment = attachment
      @attachment_options = attachment_options
    end

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

    private

    # This method is all over the place.
    def default_url
      if @attachment_options[:default_url].respond_to?(:call)
        @attachment_options[:default_url].call(@attachment)
      elsif @attachment_options[:default_url].is_a?(Symbol)
        @attachment.instance.send(@attachment_options[:default_url])
      else
        @attachment_options[:default_url]
      end
    end

    def most_appropriate_url
      if @attachment.original_filename.nil?
        default_url
      else
        @attachment_options[:url]
      end
    end

    def timestamp_as_needed(url, options)
      if options[:timestamp] && timestamp_possible?
        delimiter_char = url.match(/\?.+=/) ? '&' : '?'
        "#{url}#{delimiter_char}#{@attachment.updated_at.to_s}"
      else
        url
      end
    end

    def timestamp_possible?
      @attachment.respond_to?(:updated_at) && @attachment.updated_at.present?
    end

    def escape_url_as_needed(url, options)
      if options[:escape]
        escape_url(url)
      else
        url
      end
    end

    def escape_url(url)
      (url.respond_to?(:escape) ? url.escape : URI.escape(url)).gsub(/(\/.+)\?(.+\.)/, '\1%3F\2')
    end
  end
end

Version data entries

36 entries across 36 versions & 3 rubygems

Version Path
paperclip-v2_7-patched-ruby-1_8_6-2.7.5 lib/paperclip/url_generator.rb
paperclip-4.2.0 lib/paperclip/url_generator.rb
paperclip-4.1.1 lib/paperclip/url_generator.rb
paperclip-4.1.0 lib/paperclip/url_generator.rb
paperclip-3.5.4 lib/paperclip/url_generator.rb
paperclip-4.0.0 lib/paperclip/url_generator.rb
paperclip-3.5.3 lib/paperclip/url_generator.rb
paperclip-3.5.2 lib/paperclip/url_generator.rb
paperclip-3.5.1 lib/paperclip/url_generator.rb
paperclip-3.5.0 lib/paperclip/url_generator.rb
paperclip-3.4.2 lib/paperclip/url_generator.rb
paperclip-3.4.1 lib/paperclip/url_generator.rb
paperclip-2.7.5 lib/paperclip/url_generator.rb
paperclip-3.4.0 lib/paperclip/url_generator.rb
paperclip-2.7.4 lib/paperclip/url_generator.rb
paperclip-3.3.1 lib/paperclip/url_generator.rb
paperclip-2.7.2 lib/paperclip/url_generator.rb
paperclip-3.2.1 lib/paperclip/url_generator.rb
paperclip-2.8.0 lib/paperclip/url_generator.rb
paperclip-3.3.0 lib/paperclip/url_generator.rb