Sha256: f3f5659bfc763fcf1a93eafccd8698ca0c5e827095abe91c03e743ec0fb14d5b

Contents?: true

Size: 1.3 KB

Versions: 1

Compression:

Stored size: 1.3 KB

Contents

require 'fog'

module Ariranha
  class Directory
    ADAPTER_KEYS = {
      'AWS' => [:aws_access_key_id, :aws_secret_access_key],
      'Google' => [:google_storage_access_key_id,
                   :google_storage_secret_access_key]
    }

    def initialize(adapter, config, keep_backups = 3)
      @fog_storage = Fog::Storage.new(
        ADAPTER_KEYS[adapter][0] => config['access_key'],
        ADAPTER_KEYS[adapter][1] => config['secret_key'],
        provider: adapter)
      @adapter = adapter
      @fog_directory = configure_fog_directory(config['directory'])
      @keep_backups = keep_backups
    end

    def upload(filename, parent_dir)
      puts "uploading #{filename} to #{adapter}..."
      fog_directory.files.create(
        key: "#{parent_dir}/#{filename}",
        body: File.open("/tmp/#{filename}")
      )
      sorted_files = fog_directory.files.all(prefix: parent_dir + '/')
                     .reload.sort do |x, y|
        x.last_modified <=> y.last_modified
      end
      sorted_files[0..(-keep_backups - 1)].each(&:destroy)
    end

    private

    attr_reader :adapter, :fog_storage, :fog_directory, :keep_backups

    def configure_fog_directory(directory_name)
      fog_storage.directories.get(directory_name) ||
        fog_storage.directories.create(key: directory_name)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ariranha-0.0.3 lib/ariranha/directory.rb