Class: CarrierWave::Storage::Fog

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

Overview

Stores things using the "fog" gem.

fog supports storing files with AWS, Google, Local and Rackspace

You need to setup some options to configure your usage:

[:fog_credentials] host info and credentials for service [:fog_directory] specifies name of directory to store data in, assumed to already exist

:fog_attributes additional attributes to set on files :fog_public public readability, defaults to true :fog_authenticated_url_expiration time (in seconds) that authenticated urls will be valid, when fog_public is false and provider is AWS or Google, defaults to 600 :fog_use_ssl_for_aws #public_url will use https for the AWS generated URL]

AWS credentials contain the following keys:

[:aws_access_key_id] [:aws_secret_access_key] :region defaults to 'us-east-1' :region should be one of ['eu-west-1', 'us-east-1', 'ap-southeast-1', 'us-west-1', 'ap-northeast-1', 'eu-central-1']

Google credentials contain the following keys: [:google_storage_access_key_id] [:google_storage_secrete_access_key]

Local credentials contain the following keys:

[:local_root] local path to files

Rackspace credentials contain the following keys:

[:rackspace_username] [:rackspace_api_key]

A full example with AWS credentials: CarrierWave.configure do |config| config.fog_credentials = { :aws_access_key_id => 'xxxxxx', :aws_secret_access_key => 'yyyyyy', :provider => 'AWS' } config.fog_directory = 'directoryname' config.fog_public = true end

Defined Under Namespace

Classes: File

Instance Attribute Summary

Attributes inherited from Abstract

#uploader

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Abstract

#identifier, #initialize

Constructor Details

This class inherits a constructor from CarrierWave::Storage::Abstract

Class Method Details

.connection_cacheObject



58
59
60
# File 'vendor/carrierwave/lib/carrierwave/storage/fog.rb', line 58

def connection_cache
  @connection_cache ||= {}
end

Instance Method Details

#cache!(new_file) ⇒ Object

Stores given file to cache directory.

=== Parameters

[new_file (File, IOString, Tempfile)] any kind of file object

=== Returns

[CarrierWave::SanitizedFile] a sanitized file



106
107
108
109
110
# File 'vendor/carrierwave/lib/carrierwave/storage/fog.rb', line 106

def cache!(new_file)
  f = CarrierWave::Storage::Fog::File.new(uploader, self, uploader.cache_path)
  f.store(new_file)
  f
end

#clean_cache!(seconds) ⇒ Object



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

def clean_cache!(seconds)
  connection.directories.new(
    :key    => uploader.fog_directory,
    :public => uploader.fog_public
  ).files.all(:prefix => uploader.cache_dir).each do |file|
    time = file.key.scan(/(\d+)-\d+-\d+/).first.map { |t| t.to_i }
    time = Time.at(*time)
    file.destroy if time < (Time.now.utc - seconds)
  end
end

#connectionObject



145
146
147
148
149
150
# File 'vendor/carrierwave/lib/carrierwave/storage/fog.rb', line 145

def connection
  @connection ||= begin
    options = credentials = uploader.fog_credentials
    self.class.connection_cache[credentials] ||= ::Fog::Storage.new(options)
  end
end

#delete_dir!(path) ⇒ Object

Deletes a cache dir



130
131
132
# File 'vendor/carrierwave/lib/carrierwave/storage/fog.rb', line 130

def delete_dir!(path)
  # do nothing, because there's no such things as 'empty directory'
end

#retrieve!(identifier) ⇒ Object

Retrieve a file

=== Parameters

[identifier (String)] unique identifier for file

=== Returns

[CarrierWave::Storage::Fog::File] the stored file



91
92
93
# File 'vendor/carrierwave/lib/carrierwave/storage/fog.rb', line 91

def retrieve!(identifier)
  CarrierWave::Storage::Fog::File.new(uploader, self, uploader.store_path(identifier))
end

#retrieve_from_cache!(identifier) ⇒ Object

Retrieves the file with the given cache_name from the cache.

=== Parameters

[cache_name (String)] uniquely identifies a cache file

=== Raises

[CarrierWave::InvalidParameter] if the cache_name is incorrectly formatted.



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

def retrieve_from_cache!(identifier)
  CarrierWave::Storage::Fog::File.new(uploader, self, uploader.cache_path(identifier))
end

#store!(file) ⇒ Object

Store a file

=== Parameters

[file (CarrierWave::SanitizedFile)] the file to store

=== Returns

[CarrierWave::Storage::Fog::File] the stored file



74
75
76
77
78
# File 'vendor/carrierwave/lib/carrierwave/storage/fog.rb', line 74

def store!(file)
  f = CarrierWave::Storage::Fog::File.new(uploader, self, uploader.store_path)
  f.store(file)
  f
end