Class: Jets::CLI
- Inherits:
-
Object
- Object
- Jets::CLI
- Defined in:
- lib/jets/cli.rb
Constant Summary collapse
- ALIASES =
{ "g" => "generate", "c" => "console", "s" => "server", "db" => "dbconsole", }
Class Method Summary collapse
Instance Method Summary collapse
-
#boot_jets ⇒ Object
The commands new and help do not call Jets.boot.
- #full_command ⇒ Object
-
#help_flags ⇒ Object
[“-h”, “-?”, “–help”, “-D”, “help”].
-
#initialize(given_args = ARGV, **config) ⇒ CLI
constructor
A new instance of CLI.
- #jets_project? ⇒ Boolean
-
#lookup(full_command) ⇒ Object
1.
- #main_help ⇒ Object
- #main_help_body ⇒ Object
- #meth ⇒ Object
- #namespace ⇒ Object
- #rake_list ⇒ Object
-
#set_jets_env_from_cli_arg! ⇒ Object
Adjust JETS_ENV before boot_jets is called for the ‘jets deploy` command.
- #show_all_tasks ⇒ Object
- #start ⇒ Object
-
#thor_args ⇒ Object
thor_args normalized the args Array to work with our Thor command subclasses.
- #thor_list ⇒ Object
- #version_requested? ⇒ Boolean
Constructor Details
#initialize(given_args = ARGV, **config) ⇒ CLI
Returns a new instance of CLI.
12 13 14 15 |
# File 'lib/jets/cli.rb', line 12 def initialize(given_args=ARGV, **config) @given_args = given_args.dup @config = config end |
Class Method Details
.start(given_args = ARGV) ⇒ Object
4 5 6 |
# File 'lib/jets/cli.rb', line 4 def self.start(given_args=ARGV) new(given_args).start end |
.thor_tasks ⇒ Object
8 9 10 |
# File 'lib/jets/cli.rb', line 8 def self.thor_tasks Jets::Commands::Base.namespaced_commands end |
Instance Method Details
#boot_jets ⇒ Object
The commands new and help do not call Jets.boot. Main reason is that Jets.boot should be run in a Jets project.
* jets new - need to generate a project outside a project folder.
* jets help - don't need to be in a project folder general help.
When you are inside a project folder though, more help commands are available and displayed.
41 42 43 44 45 46 47 48 |
# File 'lib/jets/cli.rb', line 41 def boot_jets set_jets_env_from_cli_arg! command = thor_args.first unless %w[new help].include?(command) Jets::Turbo.new.charge # handles Afterburner mode Jets.boot end end |
#full_command ⇒ Object
120 121 122 123 124 125 126 127 |
# File 'lib/jets/cli.rb', line 120 def full_command # Removes any args that starts with -, those are option args. # Also remove "help" flag. args = @given_args.reject {|o| o =~ /^-/ } - help_flags command = args[0] # first argument should always be the command command = ALIASES[command] || command Jets::Commands::Base.autocomplete(command) end |
#help_flags ⇒ Object
- “-h”, “-?”, “–help”, “-D”, “help”
150 151 152 |
# File 'lib/jets/cli.rb', line 150 def help_flags Thor::HELP_MAPPINGS + ["help"] end |
#jets_project? ⇒ Boolean
145 146 147 |
# File 'lib/jets/cli.rb', line 145 def jets_project? File.exist?("config/application.rb") end |
#lookup(full_command) ⇒ Object
-
look up Thor tasks
-
look up Rake tasks
-
help menu with all commands when both Thor and Rake tasks are not found
132 133 134 135 136 137 138 139 140 141 142 143 |
# File 'lib/jets/cli.rb', line 132 def lookup(full_command) thor_task_found = Jets::Commands::Base.namespaced_commands.include?(full_command) if thor_task_found return Jets::Commands::Base.klass_from_namespace(namespace) end return unless jets_project? rake_task_found = Jets::Commands::RakeCommand.namespaced_commands.include?(full_command) if rake_task_found return Jets::Commands::RakeCommand end end |
#main_help ⇒ Object
164 165 166 167 168 169 170 171 172 173 174 175 176 |
# File 'lib/jets/cli.rb', line 164 def main_help shell = Thor::Shell::Basic.new shell.say "Commands:" shell.print_table(thor_list, :indent => 2, :truncate => true) if jets_project? && !rake_list.empty? shell.say "\nCommands via rake:" shell.print_table(rake_list, :indent => 2, :truncate => true) end shell.say "\n" shell.say main_help_body end |
#main_help_body ⇒ Object
194 195 196 197 198 199 200 201 202 203 204 205 206 |
# File 'lib/jets/cli.rb', line 194 def main_help_body <<-EOL Add -h to any of the commands for more help. Examples: jets call -h jets routes -h jets deploy -h jets status -h jets dynamodb:create -h jets db:create -h EOL end |
#meth ⇒ Object
104 105 106 107 108 109 110 111 112 |
# File 'lib/jets/cli.rb', line 104 def meth return nil unless full_command if full_command.include?(':') full_command.split(':').pop else full_command end end |
#namespace ⇒ Object
154 155 156 157 158 159 160 161 162 |
# File 'lib/jets/cli.rb', line 154 def namespace return nil unless full_command if full_command.include?(':') words = full_command.split(':') words.pop words.join(':') end end |
#rake_list ⇒ Object
182 183 184 185 186 187 188 |
# File 'lib/jets/cli.rb', line 182 def rake_list list = Jets::Commands::RakeCommand.formatted_rake_tasks(show_all_tasks) list.map do |array| array[0] = "jets #{array[0]}" array end end |
#set_jets_env_from_cli_arg! ⇒ Object
Adjust JETS_ENV before boot_jets is called for the ‘jets deploy` command. Must do this early in the process before Jets.boot because because `bundler_require` is called as part of the bootup process. It sets the Jets.env to whatever the JETS_ENV is at the time to require the right bundler group.
Defaults to development when not set.
62 63 64 65 66 67 68 69 70 |
# File 'lib/jets/cli.rb', line 62 def set_jets_env_from_cli_arg! # Pretty tricky, we need to use the raw @given_args as thor_args eventually calls Commands::Base#eager_load! # which uses Jets.env before we get a chance to override ENV['JETS_ENV'] command, env = @given_args[0..1] return unless %w[deploy delete].include?(command) env = nil if env&.starts_with?('-') return unless env ENV['JETS_ENV'] = env ? env : 'development' end |
#show_all_tasks ⇒ Object
190 191 192 |
# File 'lib/jets/cli.rb', line 190 def show_all_tasks @given_args.include?("--all") || @given_args.include?("-A") end |
#start ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/jets/cli.rb', line 17 def start # Needs to be at the beginning to avoid boot_jets which causes some load errors if version_requested? puts Jets.version return end # Need to boot jets at this point for commands like: jets routes, deploy, console, etc to work boot_jets command_class = lookup(full_command) if command_class command_class.perform(full_command, thor_args) else main_help end end |
#thor_args ⇒ Object
thor_args normalized the args Array to work with our Thor command subclasses.
-
The namespace is stripe
-
Help is shifted in front if a help flag is detected
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/jets/cli.rb', line 76 def thor_args args = @given_args.clone # jets generate is a special command requires doesn't puts out the help menu automatically when # `jets generate` is called without additional args. We'll take it over early and fix it here. generate = full_command == "generate" if generate && ((args.size == 1 || help_flags.include?(args.last)) || args.size == 2) puts Jets::Generator.help exit end help_args = args & help_flags unless help_args.empty? # Allow using help flags at the end of the command to trigger help menu args -= help_flags # remove "help" and help flags from args args[0] = meth # first command will always be the meth now since # we removed the help flags args.unshift("help") args.compact! return args end # reassigns the command without the namespace if reached here args[0] = meth args.compact end |
#thor_list ⇒ Object
178 179 180 |
# File 'lib/jets/cli.rb', line 178 def thor_list Jets::Commands::Base.help_list(show_all_tasks) end |
#version_requested? ⇒ Boolean
50 51 52 53 54 55 |
# File 'lib/jets/cli.rb', line 50 def version_requested? # jets --version # jets -v version_flags = ["--version", "-v"] @given_args.length == 1 && !(@given_args & version_flags).empty? end |