Sha256: 53f63b5ffabb26e2f93134084236477739bc64685b3b370f1104eee06c272015
Contents?: true
Size: 1.9 KB
Versions: 3
Compression:
Stored size: 1.9 KB
Contents
require "optparse" require "lapidarius/cutter" module Lapidarius class CLI HELP_FLAGS = %w[-h --help] attr_reader :name, :version, :remote def initialize(args: [], io: STDOUT, command: Command, cutter: Cutter, tree: Tree, spinner: Spinner.new) @args = args @io = io @command = command @cutter = cutter @tree = tree @spinner = spinner @name = @args.shift unless help? parser.parse!(@args) end def call @spinner.call do @output = cut end @io.puts @output end private def cutter @cutter.new(name: @name, cmd_klass: @command, version: @version, remote: @remote) end private def cut return unless @name gem = cutter.call @tree::new(gem).to_s rescue Gem::NotInstalledError => e e.message end private def parser OptionParser.new do |opts| opts.banner = %q{Usage: lapidarius sinatra --version=1.4.7 --remote} opts.on("-vVERSION", "--version=VERSION", "Specify the gem version to cut") do |version| @version = version end opts.on("-r", "--remote", "Fetch gem remotely") do |remote| @remote = true end opts.on(*HELP_FLAGS, "Prints this help") do @io.puts opts exit end end end private def help? HELP_FLAGS.any? { |h| @args.first == h } end end class Spinner CHARS = %w[| / - \\] def initialize(io = STDOUT, fps = 15, delay = 1.0) @io = io @fps = fps.to_i @delay = delay.to_f / @fps @iter = 0 end def call spinner = Thread.new do while @iter do @io.print CHARS[(@iter+=1) % CHARS.length] sleep @delay @io.print "\b" @io.flush end end ensure yield.tap do @iter = false spinner.join end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
lapidarius-4.2.1 | lib/lapidarius/cli.rb |
lapidarius-4.2.0 | lib/lapidarius/cli.rb |
lapidarius-4.1.1 | lib/lapidarius/cli.rb |