jonahoffline/filepreviews-ruby

View on GitHub
lib/filepreviews/cli.rb

Summary

Maintainability
A
0 mins
Test Coverage
require 'optparse'

module Filepreviews
  # @author Jonah Ruiz <jonah@pixelhipsters.com>
  # A Simple class for the executable version of the gem
  class CLI
    BANNER = <<MSG
Usage: filepreviews [OPTION] [URL]
Description:
Filepreviews.io - Thumbnails and metadata for almost any kind of file

Options:
MSG
    # Passes arguments from ARGV and sets metadata flag
    # @param args [Array<String>] The command-line arguments
    def initialize(args)
      @args, @metadata = args, false
    end

    # Configures the arguments for the command
    # @param opts [OptionParser]
    def options(opts)
      opts.version = Filepreviews::VERSION
      opts.banner  = BANNER
      opts.set_program_name 'Filepreviews.io'

      opts.on('-k', '--api_key [key]', String,
              'use API key from Filepreviews.io') do |api_key|
        Filepreviews.api_key = api_key
      end

      opts.on('-s', '--secret_key [key]', String,
              'use Secret key from Filepreviews.io') do |secret_key|
        Filepreviews.secret_key = secret_key
      end

      opts.on('-m', '--metadata', 'load metadata response') do
        @metadata = true
      end

      opts.on_tail('-v', '--version', 'display the version of Filepreviews') do
        puts opts.version
        exit
      end

      opts.on_tail('-h', '--help', 'print this help') do
        puts opts.help
        exit
      end
    end

    # Parses options sent from command-line
    def parse
      opts = OptionParser.new(&method(:options))
      opts.parse!(@args)
      return opts.help if @args.last.nil?

      file_preview = Filepreviews.generate(@args.last)
      @metadata ? file_preview.metadata(js: true) : file_preview
    end
  end
end