46 lines
1.1 KiB
Ruby
46 lines
1.1 KiB
Ruby
require 'singleton'
|
|
require 'carto/storage_options/s3'
|
|
require 'carto/storage_options/local'
|
|
|
|
module Carto
|
|
class Storage
|
|
include Singleton
|
|
|
|
def initialize
|
|
@storages = Hash.new
|
|
end
|
|
|
|
def for(location, preferred_type: nil)
|
|
proposed_location = get_or_set_location(location)
|
|
proposed_type = proposed_location.class.name.demodulize.downcase
|
|
|
|
if (preferred_type || proposed_type) == 'local'
|
|
Carto::StorageOptions::Local.new(location)
|
|
elsif proposed_type == (preferred_type || proposed_type)
|
|
proposed_location
|
|
else
|
|
available_storage_option.new(location)
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def get_or_set_location(location)
|
|
existing_location = @storages[location]
|
|
if existing_location
|
|
existing_location
|
|
else
|
|
@storages[location] = available_storage_option.new(location)
|
|
end
|
|
end
|
|
|
|
def available_storage_option
|
|
s3_enabled? ? Carto::StorageOptions::S3 : Carto::StorageOptions::Local
|
|
end
|
|
|
|
def s3_enabled?
|
|
@s3_enabled ||= Carto::StorageOptions::S3.enabled?
|
|
end
|
|
end
|
|
end
|