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
- #rake_task_found ⇒ 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
121 122 123 124 125 126 127 128 |
# File 'lib/jets/cli.rb', line 121 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”
157 158 159 |
# File 'lib/jets/cli.rb', line 157 def help_flags Thor::HELP_MAPPINGS + ["help"] end |
#jets_project? ⇒ Boolean
152 153 154 |
# File 'lib/jets/cli.rb', line 152 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
133 134 135 136 137 138 139 140 141 142 |
# File 'lib/jets/cli.rb', line 133 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? Jets::Commands::RakeCommand if rake_task_found end |
#main_help ⇒ Object
171 172 173 174 175 176 177 178 179 180 181 182 183 |
# File 'lib/jets/cli.rb', line 171 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
201 202 203 204 205 206 207 208 209 210 211 212 213 |
# File 'lib/jets/cli.rb', line 201 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
105 106 107 108 109 110 111 112 113 |
# File 'lib/jets/cli.rb', line 105 def meth return nil unless full_command if full_command.include?(':') full_command.split(':').pop else full_command end end |
#namespace ⇒ Object
161 162 163 164 165 166 167 168 169 |
# File 'lib/jets/cli.rb', line 161 def namespace return nil unless full_command if full_command.include?(':') words = full_command.split(':') words.pop words.join(':') end end |
#rake_list ⇒ Object
189 190 191 192 193 194 195 |
# File 'lib/jets/cli.rb', line 189 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 |
#rake_task_found ⇒ Object
144 145 146 147 148 149 150 |
# File 'lib/jets/cli.rb', line 144 def rake_task_found return false unless full_command # can be nil for subcommands and would break jets help without this check bracket_regex = /\[.*/ # matches everything after the first [ command = full_command.sub(bracket_regex, '') # remove everything after the first [ namespaced_commands = Jets::Commands::RakeCommand.namespaced_commands.map {|x| x.sub(bracket_regex, '') } namespaced_commands.include?(command) 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 71 |
# 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 console c].include?(command) env = nil if env&.starts_with?('-') return unless env ENV['JETS_ENV'] = env ? env : 'development' end |
#show_all_tasks ⇒ Object
197 198 199 |
# File 'lib/jets/cli.rb', line 197 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
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 103 |
# File 'lib/jets/cli.rb', line 77 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
185 186 187 |
# File 'lib/jets/cli.rb', line 185 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 |