Initial implementation of CLI

This commit is contained in:
Mark Maglana
2013-08-29 15:42:57 -07:00
parent ec20b95fcb
commit 30ddaf5b22
4 changed files with 117 additions and 6 deletions

View File

@@ -161,7 +161,7 @@ $ aviator describe openstack identity
Describe Keystone's create_tenant request
```bash
$ aviator describe openstack identity create_tenant
$ aviator describe openstack identity v2 admin create_tenant
```
## Contributing

View File

@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
spec.add_dependency 'faraday', '~> 0.8.0'
spec.add_dependency 'activesupport', '~> 4.0.0'
spec.add_dependency 'thor', '~> 0.18.1'
spec.add_development_dependency "bundler", "~> 1.3"
spec.add_development_dependency "rake"

110
bin/aviator Executable file
View File

@@ -0,0 +1,110 @@
#!/usr/bin/env ruby
require 'bundler/setup'
require 'thor'
require 'aviator/core'
module Aviator
module CLI
class Main < Thor
desc 'describe [PROVIDER] [SERVICE] [API_VERSION ENDPOINT_TYPE REQUEST_NAME]', 'Describes various parts of Aviator.'
def describe(provider=nil, service=nil, api_version=nil, endpoint_type=nil, request=nil)
if request
describe_request provider, service, api_version, endpoint_type, request
elsif service
describe_service provider, service
elsif provider
describe_provider provider
else
list_providers
end
end
private
def describe_provider(provider)
puts "Available services from #{ provider }"
Dir[Pathname.new(__FILE__).join('..', '..', 'lib', 'aviator', provider, '**')].each do |d|
puts " #{ Pathname.new(d).basename }"
end
end
def describe_request(provider, service, api_version, endpoint_type, request_name)
endpoints = Service.new(provider: provider, service: service).requests[api_version.to_sym]
raise "Invalid API version #{ api_version }" unless endpoints
requests = endpoints[endpoint_type.to_sym]
raise "Invalid endpoint type #{ endpoint_type }" unless requests
request = requests[request_name.to_sym]
raise "Could not find request named #{ request_name }. Try a different api version or endpoint" unless request
puts "Request: #{ request_name }"
params = []
request.optional_params.each do |param|
params << [param, :optional]
end
request.required_params.each do |param|
params << [param, :required]
end
params.sort! { |a,b| a[0] <=> b[0] }
puts "\nParameters:"
params.each do |param_desc|
puts " (#{ param_desc[1] }) #{ param_desc[0] }"
end
puts "\nSample Code:"
print " session.#{ service }_service.request(:#{ request_name }, endpoint_type: #{ endpoint_type })"
if params
puts " do |params|"
params.each do |pair|
puts " params[:#{ pair[0] }] = val"
end
puts " end"
end
puts "\nLinks:"
request.links.each do |link|
puts " #{ link[:rel] }:"
puts " #{ link[:href] }\n"
end
end
def describe_service(provider, service)
puts "Available requests for #{ provider } #{ service }:"
Service.new(provider: provider, service: service).requests.each do |api_version, endpoints|
endpoints.each do |endpoint_type, requests|
puts " API Version: #{ api_version } Endpoint Type: #{ endpoint_type }"
requests.each do |request_name, request_obj|
puts " #{ request_name }"
end
end
end
end
def list_providers
puts "Available providers:"
puts " openstack"
end
end
end
end
Aviator::CLI::Main.start(ARGV)

View File

@@ -108,6 +108,11 @@ module Aviator
end
def requests
@requests
end
private
@@ -193,11 +198,6 @@ module Aviator
@log_file
end
def requests
@requests
end
end
end