Sha256: cbdf42e9e0f638cc0136370e901ef9531c3ca9ce307b8d3f2a5c63adb9439438

Contents?: true

Size: 1.32 KB

Versions: 2

Compression:

Stored size: 1.32 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, backups_to_keep = 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'])
      @backups_to_keep = backups_to_keep
    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..(-backups_to_keep - 1)].each(&:destroy)
    end

    private

    attr_reader :adapter, :fog_storage, :fog_directory, :backups_to_keep

    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

2 entries across 2 versions & 1 rubygems

Version Path
ariranha-0.0.2 lib/ariranha/directory.rb
ariranha-0.0.1 lib/ariranha/directory.rb