Class: CarrierWave::Storage::Fog::File

Inherits:
Object
  • Object
show all
Defined in:
lib/carrierwave/storage/fog.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(uploader, base, path) ⇒ File

Returns a new instance of File.



196
197
198
# File 'lib/carrierwave/storage/fog.rb', line 196

def initialize(uploader, base, path)
  @uploader, @base, @path = uploader, base, path
end

Instance Attribute Details

#pathObject (readonly)

Current local path to file

Returns

[String] a path to file



113
114
115
# File 'lib/carrierwave/storage/fog.rb', line 113

def path
  @path
end

Instance Method Details

#attributesObject

Return all attributes from file

Returns

[Hash] attributes from file



122
123
124
# File 'lib/carrierwave/storage/fog.rb', line 122

def attributes
  file.attributes
end

#authenticated_urlObject

Return a temporary authenticated url to a private file, if available Only supported for AWS and Google providers

Returns

[String] temporary authenticated url or [NilClass] no authenticated url available



136
137
138
139
140
141
142
143
144
145
# File 'lib/carrierwave/storage/fog.rb', line 136

def authenticated_url
  if ['AWS', 'Google'].include?(@uploader.fog_credentials[:provider])
    # avoid a get by using local references
    local_directory = connection.directories.new(:key => @uploader.fog_directory)
    local_file = local_directory.files.new(:key => path)
    local_file.url(::Fog::Time.now + @uploader.fog_authenticated_url_expiration)
  else
    nil
  end
end

#content_typeObject

Lookup value for file content-type header

Returns

[String] value of content-type



154
155
156
# File 'lib/carrierwave/storage/fog.rb', line 154

def content_type
  @content_type || file.content_type
end

#content_type=(new_content_type) ⇒ Object

Set non-default content-type header (default is file.content_type)

Returns

[String] returns new content type value



165
166
167
# File 'lib/carrierwave/storage/fog.rb', line 165

def content_type=(new_content_type)
  @content_type = new_content_type
end

#deleteObject

Remove the file from service

Returns

[Boolean] true for success or raises error



176
177
178
179
# File 'lib/carrierwave/storage/fog.rb', line 176

def delete
  # avoid a get by just using local reference
  directory.files.new(:key => path).destroy
end

#headersObject

deprecated: All attributes from file (includes headers)

Returns

[Hash] attributes from file



188
189
190
191
192
193
194
# File 'lib/carrierwave/storage/fog.rb', line 188

def headers
  location = caller.first
  warning = "[yellow][WARN] headers is deprecated, use attributes instead[/]"
  warning << " [light_black](#{location})[/]"
  Formatador.display_line(warning)
  attributes
end

#public_urlObject

Return a url to a public file, if available

Returns

[String] public url or [NilClass] no public url available



248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
# File 'lib/carrierwave/storage/fog.rb', line 248

def public_url
  if host = @uploader.fog_host
    "#{host}/#{path}"
  else
    # AWS/Google optimized for speed over correctness
    case @uploader.fog_credentials[:provider]
    when 'AWS'
      # if directory is a valid subdomain, use that style for access
      if @uploader.fog_directory.to_s =~ /^(?:[a-z]|\d(?!\d{0,2}(?:\.\d{1,3}){3}$))(?:[a-z0-9]|\.(?![\.\-])|\-(?![\.])){1,61}[a-z0-9]$/
        "https://#{@uploader.fog_directory}.s3.amazonaws.com/#{path}"
      else
        # directory is not a valid subdomain, so use path style for access
        "https://s3.amazonaws.com/#{@uploader.fog_directory}/#{path}"
      end
    when 'Google'
      "https://commondatastorage.googleapis.com/#{@uploader.fog_directory}/#{path}"
    else
      # avoid a get by just using local reference
      directory.files.new(:key => path).public_url
    end
  end
end

#readObject

Read content of file from service

Returns

[String] contents of file



206
207
208
# File 'lib/carrierwave/storage/fog.rb', line 206

def read
  file.body
end

#sizeObject

Return size of file body

Returns

[Integer] size of file body



217
218
219
# File 'lib/carrierwave/storage/fog.rb', line 217

def size
  file.content_length
end

#store(new_file) ⇒ Object

Write file to service

Returns

[Boolean] true on success or raises error



227
228
229
230
231
232
233
234
235
236
237
# File 'lib/carrierwave/storage/fog.rb', line 227

def store(new_file)
  fog_file = new_file.to_file
  @content_type ||= new_file.content_type
  @file = directory.files.create({
    :body         => fog_file ? fog_file : new_file.read,
    :content_type => @content_type,
    :key          => path,
    :public       => @uploader.fog_public
  }.merge(@uploader.fog_attributes))
  true
end

#urlObject

Return url to file, if avaliable

Returns

[String] url or [NilClass] no url available



280
281
282
283
284
285
286
# File 'lib/carrierwave/storage/fog.rb', line 280

def url
  if !@uploader.fog_public
    authenticated_url
  else
    public_url
  end
end