module Aviator module Describer def self.describe_aviator provider_names = Pathname.new(__FILE__) .join('..', '..', '..') .children .select{|c| c.directory? && c.basename.to_s != 'core' } .map{|c| c.basename.to_s } str = "Available providers:\n" provider_names.each do |provider_name| str << " #{ provider_name }\n" end str end def self.describe_provider(provider_name) service_names = Pathname.new(__FILE__) .join('..', '..', '..', provider_name) .children .select{|c| c.directory? } .map{|c| c.basename.to_s } str = "Available services for #{ provider_name }:\n" service_names.each do |service_name| str << " #{ service_name }\n" end str end def self.describe_request(provider_name, service_name, api_version, endpoint_type, request_name) service = Aviator::Service.new provider: provider_name, service: service_name request_class = "Aviator::#{ provider_name.camelize }::#{ service_name.camelize }::"\ "#{ api_version.camelize }::#{ endpoint_type.camelize }::#{ request_name.camelize }".constantize str = "Request: #{ request_name }\n\n" str << "Parameters:\n" params = request_class.optional_params.map{|p| [p, :optional]} + request_class.required_params.map{|p| [p, :required]} params.sort{|a,b| a[0].to_s <=> b[0].to_s }.each do |param| str << " (#{ param[1].to_s }) #{ param[0] }\n" end str << "\nSample Code:\n" str << " session.#{ service_name }_service.request(:#{ request_name }, endpoint_type: '#{ request_class.endpoint_type }')" if params str << " do |params|\n" params.each do |pair| str << " params['#{ pair[0] }'] = value\n" end str << " end\n" end if request_class.links str << "\nLinks:\n" request_class.links.each do |link| str << " #{ link[:rel] }:\n" str << " #{ link[:href] }\n" end end str end def self.describe_service(provider_name, service_name) service = Aviator::Service.new(provider: provider_name, service: service_name) klasses = service.request_classes str = "Available requests for #{ provider_name } #{ service_name }_service:\n" klasses.each do |klass| str << " #{ klass.api_version } #{ klass.endpoint_type } #{ klass.name.split('::').last.underscore }\n" end str end end end