class Trove::CLI

Private Class Methods

exit_on_failure?() click to toggle source
# File lib/trove/cli.rb, line 109
def self.exit_on_failure?
  true
end

Public Instance Methods

delete(filename = nil) click to toggle source
# File lib/trove/cli.rb, line 42
def delete(filename = nil)
  Trove.delete(filename)
end
init() click to toggle source
# File lib/trove/cli.rb, line 8
    def init
      create_file "trove/.keep", ""

      if File.exist?(".gitignore")
        contents = <<~EOS

          # Ignore Trove storage
          /trove/*
          !/trove/.keep
        EOS
        unless File.read(".gitignore").include?(contents)
          append_to_file(".gitignore", contents)
        end
      else
        say "Check in trove/.keep and ignore trove/*"
      end

      create_file ".trove.yml", <<~EOS
        storage: s3://my-bucket/trove
      EOS
    end
list() click to toggle source
# File lib/trove/cli.rb, line 47
def list
  say table(
    Trove.list,
    [:filename, :size, :updated_at]
  )
end
pull(filename = nil) click to toggle source
# File lib/trove/cli.rb, line 37
def pull(filename = nil)
  Trove.pull(filename, version: options[:version])
end
push(filename) click to toggle source
# File lib/trove/cli.rb, line 31
def push(filename)
  Trove.push(filename)
end
version() click to toggle source
# File lib/trove/cli.rb, line 55
def version
  say Trove::VERSION
end
versions(filename) click to toggle source
# File lib/trove/cli.rb, line 60
def versions(filename)
  say table(
    Trove.versions(filename),
    [:version, :size, :updated_at]
  )
end

Private Instance Methods

pluralize(value, str) click to toggle source
# File lib/trove/cli.rb, line 105
def pluralize(value, str)
  "#{value} #{value == 1 ? str : "#{str}s"}"
end
table(data, columns) click to toggle source
# File lib/trove/cli.rb, line 69
def table(data, columns)
  columns.each do |c|
    if c == :size
      data.each { |r| r[c] = Utils.human_size(r[c]) }
    elsif c == :updated_at
      data.each { |r| r[c] = "#{time_ago(r[c])} ago" }
    elsif c == :version
      data.each { |r| r[c] ||= "<none>" }
    end
  end
  column_names = columns.map { |c| c.to_s.sub(/_at\z/, "").upcase }
  widths = columns.map.with_index { |c, i| [column_names[i].size, data.map { |r| r[c].to_s.size }.max].max }

  output = String.new("")
  str = widths.map { |w| "%-#{w}s" }.join("     ") + "\n"
  output << str % column_names
  data.each do |row|
    output << str % columns.map { |c| row[c] }
  end
  output
end
time_ago(time) click to toggle source
# File lib/trove/cli.rb, line 91
def time_ago(time)
  diff = (Time.now - time).round

  if diff < 60
    pluralize(diff, "second")
  elsif diff < 60 * 60
    pluralize((diff / 60.0).floor, "minute")
  elsif diff < 60 * 60 * 24
    pluralize((diff / (60.0 * 60)).floor, "hour")
  else
    pluralize((diff / (60.0 * 60 * 24)).floor, "day")
  end
end