Module: Paperclip::Interpolations

Extended by:
Interpolations
Included in:
Interpolations
Defined in:
lib/dm-paperclip/interpolations.rb

Overview

This module contains all the methods that are available for interpolation in paths and urls. To add your own (or override an existing one), you can either open this module and define it, or call the Paperclip.interpolates method.

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.[](name) ⇒ Object

Hash access of interpolations. Included only for compatability, and is not intended for normal use.



17
18
19
# File 'lib/dm-paperclip/interpolations.rb', line 17

def self.[] name
  method(name)
end

.[]=(name, block) ⇒ Object

Hash assignment of interpolations. Included only for compatability, and is not intended for normal use.



11
12
13
# File 'lib/dm-paperclip/interpolations.rb', line 11

def self.[]= name, block
  define_method(name, &block)
end

.allObject

Returns a sorted list of all interpolations.



22
23
24
# File 'lib/dm-paperclip/interpolations.rb', line 22

def self.all
  self.instance_methods(false).sort
end

.interpolate(pattern, *args) ⇒ Object

Perform the actual interpolation. Takes the pattern to interpolate and the arguments to pass, which are the attachment and style name.



28
29
30
31
32
33
34
# File 'lib/dm-paperclip/interpolations.rb', line 28

def self.interpolate pattern, *args
  all.reverse.inject( pattern.dup ) do |result, tag|
    result.gsub(/:#{tag}/) do |match|
      send( tag, *args )
    end
  end
end

Instance Method Details

#attachment(attachment, style) ⇒ Object

Returns the pluralized form of the attachment name. e.g. “avatars” for an attachment of :avatar



114
115
116
# File 'lib/dm-paperclip/interpolations.rb', line 114

def attachment attachment, style
  attachment.name.to_s.downcase.pluralize
end

#basename(attachment, style) ⇒ Object

Returns the basename of the file. e.g. “file” for “file.jpg”



89
90
91
# File 'lib/dm-paperclip/interpolations.rb', line 89

def basename attachment, style
  attachment.original_filename.gsub(/#{File.extname(attachment.original_filename)}$/, "")
end

#class(attachment, style) ⇒ Object

Returns the snake cased, pluralized version of the class name. e.g. “users” for the User class.



84
85
86
# File 'lib/dm-paperclip/interpolations.rb', line 84

def class attachment, style
  attachment.instance.class.to_s.underscore.pluralize
end

#extension(attachment, style) ⇒ Object

Returns the extension of the file. e.g. “jpg” for “file.jpg” If the style has a format defined, it will return the format instead of the actual extension.



96
97
98
99
# File 'lib/dm-paperclip/interpolations.rb', line 96

def extension attachment, style
  ((style = attachment.styles[style]) && style[:format]) ||
    File.extname(attachment.original_filename).gsub(/^\.+/, "")
end

#filename(attachment, style) ⇒ Object

Returns the filename, the same way as “:basename.:extension” would.



37
38
39
# File 'lib/dm-paperclip/interpolations.rb', line 37

def filename attachment, style
  "#{basename(attachment, style)}.#{extension(attachment, style)}"
end

#id(attachment, style) ⇒ Object

Returns the id of the instance.



102
103
104
# File 'lib/dm-paperclip/interpolations.rb', line 102

def id attachment, style
  attachment.instance.id
end

#id_partition(attachment, style) ⇒ Object

Returns the id of the instance in a split path form. e.g. returns 000/001/234 for an id of 1234.



108
109
110
# File 'lib/dm-paperclip/interpolations.rb', line 108

def id_partition attachment, style
  ("%09d" % attachment.instance.id).scan(/\d{3}/).join("/")
end

#merb_env(attachment, style) ⇒ Object



78
79
80
# File 'lib/dm-paperclip/interpolations.rb', line 78

def merb_env attachment, style
  Object.const_defined?('Merb') ? Merb.env : nil
end

#merb_root(attachment, style) ⇒ Object



74
75
76
# File 'lib/dm-paperclip/interpolations.rb', line 74

def merb_root attachment, style
  Object.const_defined?('Merb') ? Merb.root : nil
end

#rails_env(attachment, style) ⇒ Object

Returns the Rails.env constant.



70
71
72
# File 'lib/dm-paperclip/interpolations.rb', line 70

def rails_env attachment, style
  Object.const_defined?('Rails') ? Rails.env : nil
end

#rails_root(attachment, style) ⇒ Object

Returns the Rails.root constant.



65
66
67
# File 'lib/dm-paperclip/interpolations.rb', line 65

def rails_root attachment, style
  Object.const_defined?('Rails') ? Rails.root : nil
end

#style(attachment, style) ⇒ Object

Returns the style, or the default style if nil is supplied.



119
120
121
# File 'lib/dm-paperclip/interpolations.rb', line 119

def style attachment, style
  style || attachment.default_style
end

#timestamp(attachment, style) ⇒ Object

Returns the timestamp as defined by the <attachment>_updated_at field



50
51
52
# File 'lib/dm-paperclip/interpolations.rb', line 50

def timestamp attachment, style
  attachment.instance_read(:updated_at).to_s
end

#url(attachment, style) ⇒ Object

Returns the interpolated URL. Will raise an error if the url itself contains “:url” to prevent infinite recursion. This interpolation is used in the default :path to ease default specifications.



44
45
46
47
# File 'lib/dm-paperclip/interpolations.rb', line 44

def url attachment, style
  raise InfiniteInterpolationError if attachment.options[:url].include?(":url")
  attachment.url(style, false)
end

#web_root(attachment, style) ⇒ Object



54
55
56
57
58
59
60
61
62
# File 'lib/dm-paperclip/interpolations.rb', line 54

def web_root attachment, style
  if Object.const_defined?('Merb')
    merb_root(attachment, style)
  elsif Object.const_defined("Rails")
    rails_root(attachment, style)
  else
    ""
  end
end