class Vman::Menu
Public Class Methods
new(config)
click to toggle source
# File lib/vman/menu.rb, line 10 def initialize(config) @prompt = TTY::Prompt.new @s3 = S3.new(config['bucket_uri']) end
Public Instance Methods
delete()
click to toggle source
# File lib/vman/menu.rb, line 79 def delete obj_versions = get_versions @prompt.select("Select a version to delete") do |prompt| obj_versions.each do |v| prompt.choice "#{v.id} (#{v.get.last_modified})", -> { prompt_delete(v) } end end end
list()
click to toggle source
# File lib/vman/menu.rb, line 70 def list objects = @s3.list @prompt.ok("All current objects in bucket:") objects.each_with_index do |obj, i| @prompt.say("#{i+1}. #{obj.key}") end end
retrieve()
click to toggle source
# File lib/vman/menu.rb, line 26 def retrieve obj_versions = get_versions @prompt.select("Select a version to retrieve") do |prompt| obj_versions.each do |v| prompt.choice "#{v.id} (#{v.get.last_modified})", -> { name = v.object_key + '_' + v.id download(v, name) @prompt.ok("#{name} downloaded to working directory") } end end end
show()
click to toggle source
# File lib/vman/menu.rb, line 15 def show @prompt.select('Select an action') do |p| p.choice "Retrieve an object", -> { retrieve } p.choice "Store an object", -> { store } p.choice "List all versions of an object", -> { versions } p.choice "Show current version of an object", -> { version } p.choice "List all objects", -> { list } p.choice "Delete a version of an object", -> { delete } end end
store()
click to toggle source
# File lib/vman/menu.rb, line 40 def store file = prompt_file key = File.basename(file) stored_file = @s3.store(file, key) if stored_file && stored_file.class == Aws::S3::Object @prompt.ok("Successfully uploaded \"#{key}\" to S3") else @prompt.error("Error uploading \"#{key}\" to S3") end end
version()
click to toggle source
# File lib/vman/menu.rb, line 63 def version obj_version = get_version @prompt.ok("Current version for #{obj_version.object_key}:") @prompt.say("#{obj_version.get.version_id} (#{obj_version.get.last_modified})") end
versions()
click to toggle source
# File lib/vman/menu.rb, line 52 def versions obj_versions = get_versions @prompt.ok("Total number of versions: #{obj_versions.count}") obj_versions.each do |v| msg = " " + v.id + " (#{v.last_modified})" msg[0] = "•" if v.is_latest @prompt.say("#{msg}") end end
Private Instance Methods
download(object, name)
click to toggle source
# File lib/vman/menu.rb, line 104 def download(object, name) object.get({ response_target: File.open(name, 'w') }) end
get!()
click to toggle source
# File lib/vman/menu.rb, line 134 def get! key = @prompt.ask("Enter object key to retrieve: ") objs = @s3.find(key) if objs.count == 0 @prompt.warn("No object found under key '#{key}'. Did you mispell it?") return get! elsif objs.count == 1 objs.first else @prompt.warn("Found multiple objects") selection = @prompt.select("Which one do you want") do |prompt| objs.each { |obj| prompt.choice "#{obj.key}", -> { obj } } end end end
get_version()
click to toggle source
# File lib/vman/menu.rb, line 93 def get_version obj = get! v_id = obj.get.version_id obj.version(v_id) end
get_versions()
click to toggle source
# File lib/vman/menu.rb, line 99 def get_versions obj = get! _versions = @s3.versions(obj.key) end
prompt_delete(v)
click to toggle source
# File lib/vman/menu.rb, line 120 def prompt_delete(v) @prompt.warn("WARNING: This will remove the selected version from the S3 bucket!") @prompt.warn("Ensure you are deleting the correct version of this object:\n\n #{v.object_key} - #{v.id} - #{v.get.last_modified}\n") if @prompt.yes?("Are you sure you want to delete this version?") v.delete({ version_id: v.id }) @prompt.ok("Version id \"#{v.id}\" for object \"#{v.object_key}\" successfully deleted") return true end @prompt.warn("No version deleted. Exiting.") false end
prompt_file()
click to toggle source
# File lib/vman/menu.rb, line 108 def prompt_file path = Readline.readline('Enter path to local file for upload: ') abs_path = File.expand_path(path).strip if !File.exist?(abs_path) @prompt.warn("Could not find \"#{abs_path}\". Did you mispell it?") return store end abs_path end