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