Sha256: 26111048ecffe6210ed3234c4ca7437761a528376d78b31e939589422fab453e

Contents?: true

Size: 1.46 KB

Versions: 1

Compression:

Stored size: 1.46 KB

Contents

# frozen_string_literal: true

module Gistribute
  class CLI
    def upload
      files_json = process_files(@files)

      if files_json.empty?
        panic! "No files found, aborting."
      end

      if @subcommand_options.yes || confirm?("\nUpload these files? [Yn] ")
        gist = @client.create_gist({
          description: "[gistribution] #{@subcommand_options.description}".strip,
          public: !@subcommand_options.private,
          files: files_json
        })

        puts if @subcommand_options.yes
        print "Gistribution uploaded to: ".green
        puts gist.html_url
      else
        puts "Aborted.".red
      end
    end

    def process_files(files)
      files.each_with_object({}) do |file, hash|
        hash.merge!(process_file file)
      end
    end

    def process_file(file)
      file = @subcommand_options.relative ? file : File.expand_path(file)

      if File.directory?(file)
        # Recursively process every file in the directory
        process_files(
          Dir.glob("#{file}/**/*", File::FNM_DOTMATCH).reject { |f| File.directory? f }
        )
      else
        unless (content = File.read(file))
          panic! "Files cannot be empty."
        end

        puts "File: #{file}"
        desc = get_input("Enter pretty file name (leave blank to use raw file name): ")

        # Return a hash directly for single files
        { "#{"#{desc} || " unless desc.empty?}#{Gistribute.encode file}" => { content: } }
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
gistribute-0.3.1 lib/cli/upload.rb