Module: CarrierWave::Uploader::Versions

Extended by:
ActiveSupport::Concern
Includes:
Callbacks
Included in:
Base
Defined in:
lib/carrierwave/uploader/versions.rb

Defined Under Namespace

Modules: ClassMethods

Instance Method Summary collapse

Methods included from Callbacks

#with_callbacks

Instance Method Details

#recreate_versions!(*versions) ⇒ Object

Recreate versions and reprocess them. This can be used to recreate versions if their parameters somehow have changed.



215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
# File 'lib/carrierwave/uploader/versions.rb', line 215

def recreate_versions!(*versions)
  # Some files could possibly not be stored on the local disk. This
  # doesn't play nicely with processing. Make sure that we're only
  # processing a cached file
  #
  # The call to store! will trigger the necessary callbacks to both
  # process this version and all sub-versions
  if versions.any?
    file = sanitized_file if !cached?
    store_versions!(file, versions)
  else
    cache! if !cached?
    store!
  end
end

#url(*args) ⇒ Object

When given a version name as a parameter, will return the url for that version This also works with nested versions. When given a query hash as a parameter, will return the url with signature that contains query params Query hash only works with AWS (S3 storage).

Example

my_uploader.url                 # => /path/to/my/uploader.gif
my_uploader.url(:thumb)         # => /path/to/my/thumb_uploader.gif
my_uploader.url(:thumb, :small) # => /path/to/my/thumb_small_uploader.gif
my_uploader.url(:query => {"response-content-disposition" => "attachment"})
my_uploader.url(:version, :sub_version, :query => {"response-content-disposition" => "attachment"})

Parameters

*args (Symbol)

any number of versions

OR/AND

Hash

query params

Returns

String

the location where this file is accessible via a url



199
200
201
202
203
204
205
206
207
208
209
# File 'lib/carrierwave/uploader/versions.rb', line 199

def url(*args)
  if (version = args.first) && version.respond_to?(:to_sym)
    raise ArgumentError, "Version #{version} doesn't exist!" if versions[version.to_sym].nil?
    # recursively proxy to version
    versions[version.to_sym].url(*args[1..-1])
  elsif args.first
    super(args.first)
  else
    super
  end
end

#version_exists?(name) ⇒ Boolean

Parameters

name (#to_sym)

name of the version

Returns

Boolean

True when the version exists according to its :if condition

Returns:

  • (Boolean)


158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
# File 'lib/carrierwave/uploader/versions.rb', line 158

def version_exists?(name)
  name = name.to_sym

  return false unless self.class.versions.has_key?(name)

  condition = self.class.versions[name][:options][:if]
  if(condition)
    if(condition.respond_to?(:call))
      condition.call(self, :version => name, :file => file)
    else
      send(condition, file)
    end
  else
    true
  end
end

#version_nameObject

Returns

String

the name of this version of the uploader



144
145
146
# File 'lib/carrierwave/uploader/versions.rb', line 144

def version_name
  self.class.version_names.join('_').to_sym unless self.class.version_names.blank?
end

#versionsObject

Returns a hash mapping the name of each version of the uploader to an instance of it

Returns

Hash=> CarrierWave::Uploader

a list of uploader instances



130
131
132
133
134
135
136
137
# File 'lib/carrierwave/uploader/versions.rb', line 130

def versions
  return @versions if @versions
  @versions = {}
  self.class.versions.each do |name, version|
    @versions[name] = version[:uploader].new(model, mounted_as)
  end
  @versions
end