riboseinc/ribose-cli

View on GitHub
lib/ribose/cli/commands/file.rb

Summary

Maintainability
A
0 mins
Test Coverage
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