Class: Razor::CLI::Parse
- Inherits:
-
Object
- Object
- Razor::CLI::Parse
- Extended by:
- Forwardable
- Defined in:
- lib/razor/cli/parse.rb
Constant Summary collapse
- DEFAULT_RAZOR_API =
"http://localhost:8080/api"
Instance Attribute Summary collapse
-
#api_url ⇒ Object
readonly
Returns the value of attribute api_url.
-
#args ⇒ Object
readonly
Returns the value of attribute args.
-
#format ⇒ Object
The format can be determined from later segments.
-
#ssl_ca_file ⇒ Object
The format can be determined from later segments.
-
#stripped_args ⇒ Object
The format can be determined from later segments.
Instance Method Summary collapse
- #dump_response? ⇒ Boolean
- #get_optparse ⇒ Object
- #help ⇒ Object
-
#initialize(args) ⇒ Parse
constructor
A new instance of Parse.
- #list_things(name, items) ⇒ Object
- #navigate ⇒ Object
-
#set_help_vars(rest) ⇒ Object
This method sets the appropriate help flags ‘@command_help` and `@option_help`, then returns a new set of arguments.
- #show_api_help? ⇒ Boolean
- #show_command_help? ⇒ Boolean
- #show_help? ⇒ Boolean
- #show_version? ⇒ Boolean
- #verify_ssl? ⇒ Boolean
- #version ⇒ Object
Constructor Details
#initialize(args) ⇒ Parse
Returns a new instance of Parse.
136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 |
# File 'lib/razor/cli/parse.rb', line 136 def initialize(args) parse_and_set_api_url(ENV["RAZOR_API"] || DEFAULT_RAZOR_API, :env) @args = args.dup # To be populated externally. @stripped_args = [] @format = 'short' # If this is set, it should actually exist. if ENV['RAZOR_CA_FILE'] && !File.exists?(ENV['RAZOR_CA_FILE']) raise Razor::CLI::InvalidCAFileError.new(ENV['RAZOR_CA_FILE']) end ca_file = ENV["RAZOR_CA_FILE"] @ssl_ca_file = ca_file if ca_file && File.exists?(ca_file) @args = get_optparse.order(@args) # Localhost won't match the server's certificate; no verification required. # This needs to happen after get_optparse so `-k` and `-u` can take effect. @verify_ssl ||= (@api_url.hostname != 'localhost') @args = set_help_vars(@args) if @args == ['version'] or @show_version @show_version = true elsif @args.any? @navigation = @args.dup else # Called with no remaining arguments to parse. @option_help = true end end |
Instance Attribute Details
#api_url ⇒ Object (readonly)
Returns the value of attribute api_url.
132 133 134 |
# File 'lib/razor/cli/parse.rb', line 132 def api_url @api_url end |
#args ⇒ Object (readonly)
Returns the value of attribute args.
132 133 134 |
# File 'lib/razor/cli/parse.rb', line 132 def args @args end |
#format ⇒ Object
The format can be determined from later segments.
134 135 136 |
# File 'lib/razor/cli/parse.rb', line 134 def format @format end |
#ssl_ca_file ⇒ Object
The format can be determined from later segments.
134 135 136 |
# File 'lib/razor/cli/parse.rb', line 134 def ssl_ca_file @ssl_ca_file end |
#stripped_args ⇒ Object
The format can be determined from later segments.
134 135 136 |
# File 'lib/razor/cli/parse.rb', line 134 def stripped_args @stripped_args end |
Instance Method Details
#dump_response? ⇒ Boolean
124 125 126 |
# File 'lib/razor/cli/parse.rb', line 124 def dump_response? !!@dump end |
#get_optparse ⇒ Object
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 41 42 43 44 45 46 |
# File 'lib/razor/cli/parse.rb', line 13 def get_optparse @optparse ||= OptionParser.new do |opts| opts. = "Usage: razor [FLAGS] NAVIGATION\n" opts.on "-d", "--dump", "Dumps API output to the screen" do @dump = true end opts.on "-a", "--api", "Show API help for a command" do @api_help = true end opts.on "-k", "--insecure", "Allow SSL connections without verified certificates" do @verify_ssl = false end opts.on "-u", "--url URL", "The full Razor API URL, can also be set\n" + " "*37 + "with the RAZOR_API environment variable\n" + " "*37 + "(default #{DEFAULT_RAZOR_API})" do |url| parse_and_set_api_url(url, :opts) end opts.on "-v", "--version", "Show the version of Razor" do @show_version = true end opts.on "-h", "--help", "Show this screen" do # If searching for a command's help, leave the argument for navigation. @option_help = true end end end |
#help ⇒ Object
75 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 103 104 105 106 |
# File 'lib/razor/cli/parse.rb', line 75 def help output = get_optparse.to_s exit = 0 begin output << <<-HELP #{list_things("Collections", navigate.collections)} Navigate to entries of a collection using COLLECTION NAME, for example, 'nodes node15' for the details of a node or 'nodes node15 log' to see the log for node15 #{list_things("Commands", navigate.commands)} Pass arguments to commands either directly by name ('--name=NAME') or save the JSON body for the command in a file and pass it with '--json FILE'. Using --json is the only way to pass arguments in nested structures such as the configuration for a broker. HELP rescue RestClient::Unauthorized output << <<-UNAUTH Error: Credentials are required to connect to the server at #{@api_url}" UNAUTH exit = 1 rescue output << <<-ERR Error: Could not connect to the server at #{@api_url}. More help is available after pointing the client to a Razor server ERR exit = 1 end [output, exit] end |
#list_things(name, items) ⇒ Object
48 49 50 51 52 53 |
# File 'lib/razor/cli/parse.rb', line 48 def list_things(name, items) "\n #{name}:\n" + items.map {|x| x["name"]}.compact.sort.map do |name| " #{name}" end.join("\n") end |
#navigate ⇒ Object
185 186 187 |
# File 'lib/razor/cli/parse.rb', line 185 def navigate @navigate ||=Navigate.new(self, @navigation) end |
#set_help_vars(rest) ⇒ Object
This method sets the appropriate help flags ‘@command_help` and `@option_help`, then returns a new set of arguments.
167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 |
# File 'lib/razor/cli/parse.rb', line 167 def set_help_vars(rest) # Find and remove 'help' variations anywhere in the command. if rest.any? { |arg| ['-h', '--help'].include? arg } or rest.first == 'help' or rest.drop(1).first == 'help' rest = rest.reject { |arg| ['-h', '--help', 'help'].include? arg } # If anything is left, assume it is a command. if rest.any? @command_help = true else @option_help = true end end if @option_help && rest.any? @command_help = true end rest end |
#show_api_help? ⇒ Boolean
112 113 114 |
# File 'lib/razor/cli/parse.rb', line 112 def show_api_help? !!@api_help end |
#show_command_help? ⇒ Boolean
120 121 122 |
# File 'lib/razor/cli/parse.rb', line 120 def show_command_help? !!@command_help end |
#show_help? ⇒ Boolean
116 117 118 |
# File 'lib/razor/cli/parse.rb', line 116 def show_help? !!@option_help end |
#show_version? ⇒ Boolean
108 109 110 |
# File 'lib/razor/cli/parse.rb', line 108 def show_version? !!@show_version end |
#verify_ssl? ⇒ Boolean
128 129 130 |
# File 'lib/razor/cli/parse.rb', line 128 def verify_ssl? !!@verify_ssl end |
#version ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/razor/cli/parse.rb', line 55 def version begin <<-VERSION Razor Server version: #{navigate.server_version} Razor Client version: #{Razor::CLI::VERSION} VERSION rescue RestClient::Unauthorized puts <<-UNAUTH Error: Credentials are required to connect to the server at #{@api_url}" UNAUTH exit 1 rescue puts <<-ERR Error: Could not connect to the server at #{@api_url}. More help is available after pointing the client to a Razor server ERR exit 1 end end |