Contains the methods that handle wrapper code generation.
Methods
Constants
ARRAY_CLASSNAME | = | 'SOAP::SOAPArray' |
Class Public methods
Generate the wrapper class for a given service. These classes make it
easier to invoke the API methods, by removing the
need to instance a
class SampleServiceWrapper attr_reader :api def initialize(driver, api) @driver = driver @api = api end def getSomething(par1, par2) begin AdWords::Service.validate_param('par1', par1, SOAP::SOAPArray) AdWords::Service.validate_param('par2', par2, SOAP::SOAPInt) # Construct request object and make API call obj = AdWords::V13::GetSomething.new(par1, par2) return @driver.getSomething(obj) rescue SOAP::FaultError => fault raise(AdWords::Error::create_specific_api_error(fault), "getSomething Call Failed: " + fault.faultstring.to_s, caller) end end def doSomethingElseExtension(par1, par2) return AdWords::Extensions.doSomethingElseExtension(self, par1, par2) end end
Args:
version: the API version (as an integer)
service: the service name (as a string)
Returns: The Ruby code for the class, as a string.
Source: show
# File lib/adwords4r/generator.rb, line 71 71: def self.generate_wrapper_class(version, service) 72: wrapper = service + "ServiceWrapper" 73: module_name = AdWords::Service.get_module_name(version, service) 74: driver = AdWords::Service.get_interface_name(version, service) 75: driver_class = eval(driver) 76: 77: registry = eval("#{module_name}::DefaultMappingRegistry::LiteralRegistry") 78: 79: class_def = # This file was automatically generated during the "rake generate" step of# library setup.require 'adwords4r/v#{version}/#{service}ServiceDriver.rb'module AdWords module V#{version} module #{service}Service # Wrapper class for the v#{version.to_s} #{service} service. # This class is automatically generated. class #{wrapper} # Holds the AdWords::API object to which the wrapper belongs. attr_reader :api # Holds a shortcut to the parent module. # Use this to avoid typing the full class name when creating classes # belonging to this service, e.g. # service_object.module::ClassName # instead of # AdWords::V#{version.to_s}::#{service}Service::ClassName # This will make it easier to migrate your code between API versions. attr_reader :module public # Constructor for #{wrapper}. # # Args: # - driver: SOAP::RPC::Driver object with the remote SOAP methods for # this service # - api: the AdWords::API object to which the wrapper belongs # def initialize(driver, api) @driver = driver @api = api @module = AdWords::V#{version.to_s}::#{service}Service end 80: 81: # Add service methods 82: methods = driver_class::Methods 83: module_name = AdWords::Service.get_module_name(version, service) 84: methods.each do |method| 85: name = method[1] 86: doc_link = get_doc_link(version, service, name) 87: method_def = # Calls the {#{name}}[#{doc_link}] method of the #{service} service. # Check {the online documentation for this method}[#{doc_link}]. 88: 89: method_class = eval("#{module_name}::#{fix_case_up(name)}") 90: arguments = registry.schema_definition_from_class(method_class).elements 91: 92: if arguments.size > 0 93: method_def += # # Args: 94: end 95: 96: # Add list of arguments to the RDoc comment 97: arguments.each_with_index do |elem, index| 98: if get_type(elem) == ARRAY_CLASSNAME 99: method_def += # - #{elem.varname}: #{get_type(elem)} of #{elem.mapped_class} 100: else 101: method_def += # - #{elem.varname}: #{get_type(elem)} 102: end 103: end 104: 105: response_class = eval("#{module_name}::#{fix_case_up(name)}Response") 106: returns = registry.schema_definition_from_class(response_class).elements 107: 108: if returns.size > 0 109: method_def += # # Returns: 110: end 111: 112: # Add list of returns to the RDoc comment 113: returns.each_with_index do |elem, index| 114: if get_type(elem) == ARRAY_CLASSNAME 115: method_def += # - #{elem.varname}: #{get_type(elem)} of #{elem.mapped_class} 116: else 117: method_def += # - #{elem.varname}: #{get_type(elem)} 118: end 119: end 120: 121: arg_names = [] 122: arguments.each do |elem| 123: arg_names << elem.varname 124: end 125: arg_list = arg_names.join(', ') 126: 127: method_def += # # Raises: # Error::ApiError (or a subclass thereof) if a SOAP fault occurs. # def #{name}(#{arg_list}) begin 128: 129: # Add validation for every argument 130: arguments.each_with_index do |elem, index| 131: method_def += AdWords::Service.validate_param('#{elem.varname}', #{arg_names[index]}, #{get_type(elem)}) 132: end 133: 134: method_def += # Construct request object and make API call obj = #{module_name}::#{fix_case_up(name)}.new(#{arg_list}) return @driver.#{name}(obj) rescue SOAP::FaultError => fault raise(AdWords::Error::create_specific_api_error(fault), "#{name} Call Failed: " + fault.faultstring.to_s, caller) end end 135: class_def += method_def 136: end 137: 138: # Add extension methods, if any 139: extensions = AdWords::Extensions::extensions[[version, service]] 140: unless extensions.nil? 141: extensions.each do |ext| 142: params = AdWords::Extensions::methods[ext].join(', ') 143: arglist = 'self' 144: arglist += ", #{params}" if params != '' 145: method_def = # <i>Extension method</i> -- Calls the AdWords::Extensions.#{ext} method # with +self+ as the first parameter. def #{ext}(#{params}) return AdWords::Extensions.#{ext}(#{arglist}) end 146: class_def += method_def 147: end 148: end 149: 150: class_def += end end endend 151: return class_def 152: end