Module: Paperclip::Interpolations
- Extended by:
- Interpolations
- Included in:
- Interpolations
- Defined in:
- lib/paperclip/interpolations.rb,
lib/paperclip/interpolations/plural_cache.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.
Defined Under Namespace
Classes: PluralCache
Constant Summary
- RIGHT_HERE =
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.
"#{__FILE__.gsub(%r{^\./}, "")}:#{__LINE__ + 3}"
Class Method Summary (collapse)
-
+ (Object) [](name)
Hash access of interpolations.
-
+ (Object) []=(name, block)
Hash assignment of interpolations.
-
+ (Object) all
Returns a sorted list of all interpolations.
-
+ (Object) interpolate(pattern, *args)
Perform the actual interpolation.
- + (Object) plural_cache
Instance Method Summary (collapse)
-
- (Object) attachment(attachment, style_name)
Returns the pluralized form of the attachment name.
-
- (Object) basename(attachment, style_name)
Returns the basename of the file.
-
- (Object) class(attachment = nil, style_name = nil)
Returns the underscored, pluralized version of the class name.
-
- (Object) content_type_extension(attachment, style_name)
Returns an extension based on the content type.
-
- (Object) extension(attachment, style_name)
Returns the extension of the file.
-
- (Object) filename(attachment, style_name)
Returns the filename, the same way as “:basename.:extension” would.
-
- (Object) fingerprint(attachment, style_name)
Returns the fingerprint of the instance.
-
- (Object) hash(attachment = nil, style_name = nil)
Returns a the attachment hash.
-
- (Object) id(attachment, style_name)
Returns the id of the instance.
-
- (Object) id_partition(attachment, style_name)
Returns the id of the instance in a split path form.
-
- (Object) param(attachment, style_name)
Returns the #to_param of the instance.
-
- (Object) rails_env(attachment, style_name)
Returns the Rails.env constant.
-
- (Object) rails_root(attachment, style_name)
Returns the Rails.root constant.
-
- (Object) style(attachment, style_name)
Returns the style, or the default style if nil is supplied.
-
- (Object) timestamp(attachment, style_name)
Returns the timestamp as defined by the _updated_at field in the server default time zone unless :use_global_time_zone is set to false.
-
- (Object) updated_at(attachment, style_name)
Returns an integer timestamp that is time zone-neutral, so that paths remain valid even if a server's time zone changes.
- - (Object) url(attachment, style_name)
Class Method Details
+ (Object) [](name)
Hash access of interpolations. Included only for compatibility, and is not intended for normal use.
17 18 19 |
# File 'lib/paperclip/interpolations.rb', line 17 def self.[] name method(name) end |
+ (Object) []=(name, block)
Hash assignment of interpolations. Included only for compatibility, and is not intended for normal use.
11 12 13 |
# File 'lib/paperclip/interpolations.rb', line 11 def self.[]= name, block define_method(name, &block) end |
+ (Object) all
Returns a sorted list of all interpolations.
22 23 24 |
# File 'lib/paperclip/interpolations.rb', line 22 def self.all self.instance_methods(false).sort end |
+ (Object) interpolate(pattern, *args)
Perform the actual interpolation. Takes the pattern to interpolate and the arguments to pass, which are the attachment and style name. You can pass a method name on your record as a symbol, which should turn an interpolation pattern for Paperclip to use.
30 31 32 33 34 35 36 37 |
# File 'lib/paperclip/interpolations.rb', line 30 def self.interpolate pattern, *args pattern = args.first.instance.send(pattern) if pattern.kind_of? Symbol all.reverse.inject(pattern) do |result, tag| result.gsub(/:#{tag}/) do |match| send( tag, *args ) end end end |
+ (Object) plural_cache
39 40 41 |
# File 'lib/paperclip/interpolations.rb', line 39 def self.plural_cache @plural_cache ||= PluralCache.new end |
Instance Method Details
- (Object) attachment(attachment, style_name)
Returns the pluralized form of the attachment name. e.g. “avatars” for an attachment of :avatar
175 176 177 |
# File 'lib/paperclip/interpolations.rb', line 175 def , style_name plural_cache.pluralize(.name.to_s.downcase) end |
- (Object) basename(attachment, style_name)
Returns the basename of the file. e.g. “file” for “file.jpg”
92 93 94 |
# File 'lib/paperclip/interpolations.rb', line 92 def basename , style_name .original_filename.gsub(/#{Regexp.escape(File.extname(.original_filename))}$/, "") end |
- (Object) class(attachment = nil, style_name = nil)
Returns the underscored, pluralized version of the class name. e.g. “users” for the User class. NOTE: The arguments need to be optional, because some tools fetch all class names. Calling #class will return the expected class.
86 87 88 89 |
# File 'lib/paperclip/interpolations.rb', line 86 def class = nil, style_name = nil return super() if .nil? && style_name.nil? plural_cache.underscore_and_pluralize(.instance.class.to_s) end |
- (Object) content_type_extension(attachment, style_name)
Returns an extension based on the content type. e.g. “jpeg” for “image/jpeg”. If the style has a specified format, it will override the content-type detection.
Each mime type generally has multiple extensions associated with it, so if the extension from the original filename is one of these extensions, that extension is used, otherwise, the first in the list is used.
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
# File 'lib/paperclip/interpolations.rb', line 111 def content_type_extension , style_name mime_type = MIME::Types[.content_type] extensions_for_mime_type = unless mime_type.empty? mime_type.first.extensions else [] end original_extension = extension(, style_name) style = .styles[style_name.to_s.to_sym] if style && style[:format] style[:format].to_s elsif extensions_for_mime_type.include? original_extension original_extension elsif !extensions_for_mime_type.empty? extensions_for_mime_type.first else # It's possible, though unlikely, that the mime type is not in the # database, so just use the part after the '/' in the mime type as the # extension. %r{/([^/]*)$}.match(.content_type)[1] end end |
- (Object) extension(attachment, style_name)
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.
99 100 101 102 |
# File 'lib/paperclip/interpolations.rb', line 99 def extension , style_name ((style = .styles[style_name.to_s.to_sym]) && style[:format]) || File.extname(.original_filename).gsub(/^\.+/, "") end |
- (Object) filename(attachment, style_name)
Returns the filename, the same way as “:basename.:extension” would.
44 45 46 |
# File 'lib/paperclip/interpolations.rb', line 44 def filename , style_name [ basename(, style_name), extension(, style_name) ].reject(&:blank?).join(".") end |
- (Object) fingerprint(attachment, style_name)
Returns the fingerprint of the instance.
146 147 148 |
# File 'lib/paperclip/interpolations.rb', line 146 def fingerprint , style_name .fingerprint end |
- (Object) hash(attachment = nil, style_name = nil)
Returns a the attachment hash. See Paperclip::Attachment#hash_key for more details.
152 153 154 155 156 157 158 |
# File 'lib/paperclip/interpolations.rb', line 152 def hash =nil, style_name=nil if && style_name .hash_key(style_name) else super() end end |
- (Object) id(attachment, style_name)
Returns the id of the instance.
136 137 138 |
# File 'lib/paperclip/interpolations.rb', line 136 def id , style_name .instance.id end |
- (Object) id_partition(attachment, style_name)
Returns the id of the instance in a split path form. e.g. returns 000/001/234 for an id of 1234.
162 163 164 165 166 167 168 169 170 171 |
# File 'lib/paperclip/interpolations.rb', line 162 def id_partition , style_name case id = .instance.id when Integer ("%09d" % id).scan(/\d{3}/).join("/") when String id.scan(/.{3}/).first(3).join("/") else nil end end |
- (Object) param(attachment, style_name)
Returns the #to_param of the instance.
141 142 143 |
# File 'lib/paperclip/interpolations.rb', line 141 def param , style_name .instance.to_param end |
- (Object) rails_env(attachment, style_name)
Returns the Rails.env constant.
78 79 80 |
# File 'lib/paperclip/interpolations.rb', line 78 def rails_env , style_name Rails.env end |
- (Object) rails_root(attachment, style_name)
Returns the Rails.root constant.
73 74 75 |
# File 'lib/paperclip/interpolations.rb', line 73 def rails_root , style_name Rails.root end |
- (Object) style(attachment, style_name)
Returns the style, or the default style if nil is supplied.
180 181 182 |
# File 'lib/paperclip/interpolations.rb', line 180 def style , style_name style_name || .default_style end |
- (Object) timestamp(attachment, style_name)
Returns the timestamp as defined by the <attachment>_updated_at field in the server default time zone unless :use_global_time_zone is set to false. Note that a Rails.config.time_zone change will still invalidate any path or URL that uses :timestamp. For a time_zone-agnostic timestamp, use #updated_at.
62 63 64 |
# File 'lib/paperclip/interpolations.rb', line 62 def , style_name .instance_read(:updated_at).in_time_zone(.time_zone).to_s end |
- (Object) updated_at(attachment, style_name)
Returns an integer timestamp that is time zone-neutral, so that paths remain valid even if a server's time zone changes.
68 69 70 |
# File 'lib/paperclip/interpolations.rb', line 68 def updated_at , style_name .updated_at end |
- (Object) url(attachment, style_name)
52 53 54 55 |
# File 'lib/paperclip/interpolations.rb', line 52 def url , style_name raise Errors::InfiniteInterpolationError if caller.any?{|b| b.index(RIGHT_HERE) } .url(style_name, :timestamp => false, :escape => false) end |