Class: Kaiser::Cli
Overview
The commandline
Direct Known Subclasses
Kaiser::Cmds::Attach, Kaiser::Cmds::DbLoad, Kaiser::Cmds::DbReset, Kaiser::Cmds::DbResetHard, Kaiser::Cmds::DbSave, Kaiser::Cmds::Deinit, Kaiser::Cmds::Down, Kaiser::Cmds::Init, Kaiser::Cmds::Login, Kaiser::Cmds::Logs, Kaiser::Cmds::Root, Kaiser::Cmds::Set, Kaiser::Cmds::Show, Kaiser::Cmds::Shutdown, Kaiser::Cmds::Up
Instance Attribute Summary collapse
-
#use_kaiserfile ⇒ Object
readonly
Returns the value of attribute use_kaiserfile.
Class Method Summary collapse
- .all_subcommands_usage ⇒ Object
- .register(name, klass) ⇒ Object
- .run_command(name, global_opts) ⇒ Object
Instance Method Summary collapse
-
#define_options(global_opts = []) ⇒ Object
At first I did this in the constructor but the problem with that is Optimist will parse the entire commandline for the first Cli command registered.
-
#initialize ⇒ Cli
constructor
A new instance of Cli.
- #set_config ⇒ Object
- #start_services ⇒ Object
- #stop_app ⇒ Object
- #stop_services ⇒ Object
Methods included from CliOptions
Constructor Details
#initialize ⇒ Cli
Returns a new instance of Cli.
13 14 15 |
# File 'lib/kaiser/cli.rb', line 13 def initialize @use_kaiserfile = true end |
Instance Attribute Details
#use_kaiserfile ⇒ Object (readonly)
Returns the value of attribute use_kaiserfile.
11 12 13 |
# File 'lib/kaiser/cli.rb', line 11 def use_kaiserfile @use_kaiserfile end |
Class Method Details
.all_subcommands_usage ⇒ Object
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/kaiser/cli.rb', line 87 def self.all_subcommands_usage output = '' @subcommands.each do |name, klass| name_s = name.to_s output += "#{name_s}\n" output += name_s.gsub(/./, '-') output += "\n" output += klass.usage output += "\n\n" end output end |
.register(name, klass) ⇒ Object
50 51 52 53 |
# File 'lib/kaiser/cli.rb', line 50 def self.register(name, klass) @subcommands ||= {} @subcommands[name] = klass.new end |
.run_command(name, global_opts) ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/kaiser/cli.rb', line 55 def self.run_command(name, global_opts) cmd = @subcommands[name] opts = cmd.(global_opts + cmd.class.) # The define_options method has stripped all arguments from the cli so now # all that we're left with in ARGV are the subcommand to be run and possibly # its own subcommands. We remove the subcommand here so each subcommand can # easily use ARGV.shift to access its own subcommands. ARGV.shift Kaiser::Config.load(Dir.pwd, use_kaiserfile: cmd.use_kaiserfile) # We do all this work in here instead of the exe/kaiser file because we # want -h options to output before we check if a Kaiserfile exists. # If we do it in exe/kaiser, people won't be able to check help messages # unless they create a Kaiserfile first. if opts[:quiet] Config.out = File.open(File::NULL, 'w') Config.info_out = File.open(File::NULL, 'w') elsif opts[:verbose] || Config.always_verbose? Config.out = $stderr Config.info_out = Kaiser::AfterDotter.new(dotter: Kaiser::Dotter.new) else Config.out = Kaiser::Dotter.new Config.info_out = Kaiser::AfterDotter.new(dotter: Config.out) end cmd.set_config cmd.execute(opts) end |
Instance Method Details
#define_options(global_opts = []) ⇒ Object
At first I did this in the constructor but the problem with that is Optimist will parse the entire commandline for the first Cli command registered. That means no matter what you call -h or –help on, it will always return the help for the first subcommand. Fixed this by only running define_options when a command is run. We can’t just run the constructor at that point because we need each Cli class to be constructed in the beginning so we can add their usage text to the output of ‘kaiser -h`.
38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/kaiser/cli.rb', line 38 def (global_opts = []) # We can't just call usage within the options block because that actually shifts # the scope to Optimist::Parser. We can still reference variables but we can't # call instance methods of a Kaiser::Cli class. u = usage Optimist. do u global_opts.each { |o| opt(*o) } end end |
#set_config ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/kaiser/cli.rb', line 17 def set_config # This is here for backwards compatibility since it can be used in Kaiserfiles. # It would be a good idea to deprecate this and make it more abstract. @work_dir = Config.work_dir @config_dir = Config.work_dir @config_file = Config.config_file @kaiserfile = Config.kaiserfile @config = Config.config @out = Config.out @info_out = Config.info_out @kaiserfile.validate! if @use_kaiserfile end |
#start_services ⇒ Object
109 110 111 112 113 114 115 116 |
# File 'lib/kaiser/cli.rb', line 109 def start_services services.each do |service| Config.info_out.puts "Starting service: #{service.name}" run_if_dead( service.shared_name, service.start_docker_command ) end end |