lib/ribose/cli/commands/file.rb
module Ribose
module CLI
module Commands
class File < Commands::Base
desc "list", "Listing the files for a space"
option :format, aliases: "-f", desc: "Output format, eg: json"
option :space_id, required: true, aliases: "-s", desc: "The Space UUID"
def list
say(build_output(list_files(options), options))
end
desc "show", "Details for a space file"
option :file_id, required: true, desc: "The space file ID"
option :format, aliases: "-f", desc: "Output format, eg: json"
option :space_id, required: true, aliases: "-s", desc: "The Space UUID"
def show
file = Ribose::SpaceFile.fetch(options[:space_id], options[:file_id])
say(build_resource_output(file, options))
end
desc "add", "Adding a new fille to a space"
option :space_id, required: true, aliases: "-s", desc: "The Space UUID"
option :description, aliases: "-d", desc: "The file upload description"
option :tag_list, aliases: "-t", desc: "File tags, separated by commas"
def add(file)
file_upload = create_upload(file, options)
if file_upload.id
say("#{file_upload.name} added to your space!")
end
end
desc "update", "Update a space file"
option :file_name, aliases: "-n", desc: "New name for the file"
option :description, aliases: "-d", desc: "New description for file"
option :tags, aliases: "-t", desc: "File tags, separated by commas"
option :file_id, required: true, aliases: "-f", desc: "Space file ID"
option :space_id, required: true, aliases: "-s", desc: "The Space UUID"
def update
update_file(symbolize_keys(options))
say("The file has been updated with new attributes")
rescue Ribose::UnprocessableEntity
say("Something went wrong! Please check required attributes")
end
desc "remove", "Remove a space file"
option :file_id, required: true, aliases: "-f", desc: "Space file ID"
option :space_id, required: true, aliases: "-s", desc: "The Space UUID"
def remove
Ribose::SpaceFile.delete(options[:space_id], options[:file_id])
say("The file has been removed from your space!")
end
private
def list_files(attributes)
@files ||= Ribose::SpaceFile.all(attributes[:space_id])
end
def create_upload(file, attributes = {})
Ribose::SpaceFile.create(
attributes[:space_id],
file: file,
tag_list: attributes[:tag_list],
description: attributes[:description],
)
end
def update_file(attributes)
Ribose::SpaceFile.update(
attributes.delete(:space_id),
attributes.delete(:file_id),
attributes,
)
end
def table_headers
["ID", "Name", "Versions"]
end
def table_field_names
%w(id name author content_type content_size version)
end
def table_rows(files)
files.map { |file| [file.id, file.name, file.version] }
end
end
end
end
end