5 class InvalidProviderNameError < StandardError
7 super "Provider '#{ name }' does not exist."
12 def self.describe_aviator
13 str = "Available providers:\n"
15 provider_names.each do |provider_name|
16 str << " #{ provider_name }\n"
23 def self.describe_provider(provider_name)
24 str = "Available services for #{ provider_name }:\n"
26 service_names(provider_name).each do |service_name|
27 str << " #{ service_name }\n"
34 def self.describe_request(provider_name, service_name, api_version, endpoint_type, request_name)
35 service = Aviator::Service.new :provider => provider_name, :service => service_name
36 request_class = "Aviator::#{ provider_name.camelize }::#{ service_name.camelize }::Requests::"\
37 "#{ api_version.camelize }::#{ endpoint_type.camelize }::#{ request_name.camelize }".constantize
39 display = "Request: #{ request_name }\n"
42 # Build the parameters
43 params = request_class.optional_params.map{|p| [p, false]} +
44 request_class.required_params.map{|p| [p, true]}
46 aliases = request_class.param_aliases
51 headings = ['NAME', 'REQUIRED?']
53 headings << 'ALIAS' if aliases.length > 0
56 params.sort{|a,b| a[0].to_s <=> b[0].to_s }.each do |param|
57 row = [ param[0], param[1] ? 'Y' : 'N' ]
60 row << (aliases.find{|a,p| p == param[0] } || [''])[0]
67 rows.map{|row| row[0].to_s.length }.max,
68 rows.map{|row| row[1].to_s.length }.max
71 widths << rows.map{|row| row[2].to_s.length }.max if aliases.length > 0
73 table = Terminal::Table.new(:headings => headings, :rows => rows)
75 table.align_column(1, :center)
77 display << "Parameters:\n"
78 display << " " + table.to_s.split("\n").join("\n ")
83 # Build the sample code
84 display << "\nSample Code:\n"
86 display << " session.request(:#{ service_name }_service, :#{ request_name })"
88 if params && params.length > 0
89 display << " do |params|\n"
91 display << " params.#{ (aliases.find{|a,p| p == pair[0] } || pair)[0] } = value\n"
100 if request_class.links && request_class.links.length > 0
101 display << "\nLinks:\n"
103 request_class.links.each do |link|
104 display << " #{ link[:rel] }:\n"
105 display << " #{ link[:href] }\n"
113 def self.describe_service(provider_name, service_name)
114 requests = request_classes(provider_name, service_name)
117 str = "No requests found for #{ provider_name } #{ service_name }_service."
119 str = "Available requests for #{ provider_name } #{ service_name }_service:\n"
121 requests.each do |klass|
122 str << " #{ klass.api_version } #{ klass.endpoint_type } #{ klass.name.split('::').last.underscore }\n"
134 Pathname.new(__FILE__) \
135 .join('..', '..', '..') \
137 .select{|c| c.directory? && c.basename.to_s != 'core' } \
138 .map{|c| c.basename.to_s }
142 def request_classes(provider_name, service_name)
143 service = Aviator::Service.new(:provider => provider_name, :service => service_name)
144 service.request_classes
148 def service_names(name)
149 provider = Pathname.new(__FILE__).join('..', '..', '..', name)
151 raise InvalidProviderNameError.new(name) unless provider.exist?
154 .select{|c| c.directory? } \
155 .map{|c| c.basename.to_s }