class Glacier::CLI

Constants

CHUNK_SIZE
LOCAL_STORE
VERSION

Public Class Methods

new(args) click to toggle source
# File lib/glacier/cli.rb, line 16
def initialize(args)
  @files = []
  @directories = []
  parse_options args
end

Public Instance Methods

run() click to toggle source
# File lib/glacier/cli.rb, line 22
def run
  @directories.each do |directory|
    Find.find(directory == '.' ? Dir.pwd : directory) do |path|
      dot = File.basename(path).start_with? '.'
      if FileTest.directory? path
        # completely skip 'dot' directories
        Find.prune if dot
      else
        # ignore dotfiles
        @files << path unless dot
      end
    end
  end

  @files.each do |file|
    basename = File.basename(file)
    if uploaded_files.include? basename
      puts "Skipping #{file} (already uploaded)"
    else
      vault.archives.create body: File.new(file), multipart_chunk_size: CHUNK_SIZE, description: basename
      File.write LOCAL_STORE, "#{basename}\n", mode: 'a'
      puts "Uploaded #{file}"
    end
  end
end

Private Instance Methods

backend() click to toggle source
# File lib/glacier/cli.rb, line 54
def backend
  @backend ||= Fog::AWS::Glacier.new(
    region: ENV['AWS_REGION'],
    aws_access_key_id: ENV['AWS_ACCESS_KEY'],
    aws_secret_access_key: ENV['AWS_SECRET_ACCESS_KEY']
  )
end
parse_options(args) click to toggle source
# File lib/glacier/cli.rb, line 66
def parse_options(args)
  parser = OptionParser.new do |o|
    o.banner = 'glacier [options]'

    o.on '-v', '--vault VAULT_NAME', 'Name of vault to store archives in' do |arg|
      @vault_name = arg
    end

    o.on '-f', '--file [FILE_NAME]', 'Name of file to store' do |arg|
      @files << arg
    end

    o.on '-d', '--directory [DIRECTORY_NAME]', 'Name of file to store' do |arg|
      @directories << arg
    end

    o.on_tail '-h', '--help', 'Show help' do
      puts o
      exit
    end

    o.on_tail '-v', '--version', 'Show version' do
      puts "Glacier::CLI #{Glacier::CLI::VERSION}"
      exit
    end
  end
  parser.parse! args

  unless @vault_name && (@files || @directories)
    puts 'Must specify vault via -v argument' unless @vault_name && vault
    puts 'Must specify file or directory via -f or -d argument' unless @files || @directories
    exit false
  end
end
uploaded_files() click to toggle source
# File lib/glacier/cli.rb, line 62
def uploaded_files
  FileTest.exist?(LOCAL_STORE) ? File.read(LOCAL_STORE).split("\n").to_set : []
end
vault() click to toggle source
# File lib/glacier/cli.rb, line 50
def vault
  @vault ||= backend.vaults.get @vault_name
end