Class: FlatKit::Cli

Inherits:
Object
  • Object
show all
Defined in:
lib/flat_kit/cli.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeCli

Returns a new instance of Cli.



8
9
10
# File 'lib/flat_kit/cli.rb', line 8

def initialize
  @parser = nil
end

Instance Attribute Details

#optionsObject (readonly)

Returns the value of attribute options.



6
7
8
# File 'lib/flat_kit/cli.rb', line 6

def options
  @options
end

Class Method Details

.commands_bannerObject



42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/flat_kit/cli.rb', line 42

def self.commands_banner
  sorted_commands = FlatKit::Command.children.sort_by{ |c| c.name }
  left_width = sorted_commands.map { |c| c.name.length }.sort.last
  banner = StringIO.new
  banner.puts
  banner.puts "Commands:"
  banner.puts

  sorted_commands.each do |command|
    banner.puts "  #{command.name.ljust(left_width)}    #{command.description}"
  end
  banner.string
end

Instance Method Details

#parserObject



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/flat_kit/cli.rb', line 12

def parser
  @parser ||= ::Optimist::Parser.new do
    version ::FlatKit::VERSION

    banner "fk v#{self.version}"

    banner "\n    Usage:\n      fk <command> [<args>...]\n      fk [options]\n    USAGE\n\n    banner <<~OPTIONS\n\n    Options:\n\n    OPTIONS\n\n    opt :verbose, \"Force debug. Output lots of informtion to standard error\", default: false\n    opt :list, \"List all the commands\", default: false, short: :none\n    opt :log, \"Set the logger output location\", default: \"<stderr>\", short: :none\n    opt :help, \"Show help message\", short: :h\n    opt :version, \"Print version and exit\", short: :none\n\n    stop_on FlatKit::Command.names\n    banner Cli.commands_banner\n  end\nend\n"

#run(argv: ARGV, env: ENV) ⇒ Object



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/flat_kit/cli.rb', line 56

def run(argv: ARGV, env: ENV)
  opts = ::Optimist::with_standard_exception_handling(parser) do
    parser.parse(argv)
  end

  if opts[:log_given] then
    ::FlatKit.log_to(opts[:log])
  end

  if opts[:verbose] then
    ::FlatKit.logger.level = :debug
  else
    ::FlatKit.logger.level = :info
  end

  ::FlatKit.logger.debug opts
  ::FlatKit.logger.debug argv

  command_name  = argv.shift
  command_klass = FlatKit::Command.for(command_name)
  command       = command_klass.new(argv: argv, logger: ::FlatKit.logger, env: env)
  command.call
end