class AdsCommon::Build::SavonGenerator

Contains the methods that handle wrapper code generation.

Public Class Methods

new(wsdl_url, code_path, api_name, version, service_name) click to toggle source

Create a new generator for given WSDL.

Args:

  • wsdl_url local or remote URL to pull WSDL data

  • code_path local path to store generated files

  • api_name an API name to generate for

  • version a version of the service

  • service_name a service name to generate stubs for

# File lib/ads_common/build/savon_generator.rb, line 43
def initialize(wsdl_url, code_path, api_name, version, service_name)
  @wsdl_url = wsdl_url
  @code_path = code_path
  @generator_args = {
      :api_name => api_name,
      :version => version,
      :service_name => service_name,
      :require_path => @code_path.sub(/^lib\//, '')
  }
  @logger = Logger.new(STDOUT)
  @logger.level = Logger::INFO
  GoogleAdsSavon.configure do |config|
    config.logger = @logger
    config.log_level = :debug
  end
  HTTPI.logger = @logger
  HTTPI.log_level = :debug
end

Public Instance Methods

process_wsdl() click to toggle source

Pull, parse and generate wrapper for WSDL on given URL.

Args:

  • none, instance variables are used

Returns:

  • none

# File lib/ads_common/build/savon_generator.rb, line 70
def process_wsdl()
  proxy_path = get_proxy_path()
  client = GoogleAdsSavon::Client.new(@wsdl_url) do |_, httpi|
    httpi.proxy = proxy_path unless proxy_path.nil? || proxy_path.empty?
  end
  begin
    @generator_args[:namespace] = client.wsdl.namespace
    do_process_wsdl_client(client)
  rescue AdsCommon::Errors::Error => e
    error_msg = "An unrecoverable error occured during code generation"
    error_msg += " for service [%s]: %s" % [@wsdl_url, e]
    raise AdsCommon::Errors::BuildError, error_msg
  end
end

Private Instance Methods

check_service(wsdl) click to toggle source
# File lib/ads_common/build/savon_generator.rb, line 101
def check_service(wsdl)
  if wsdl.endpoint.nil? || wsdl.namespace.nil?
    raise AdsCommon::Errors::BuildError,
        'WSDL could not be retrieved or parsed.'
  end
end
create_new_file(file_name) click to toggle source

Creates a new file on specified path, overwriting existing one if it exists.

# File lib/ads_common/build/savon_generator.rb, line 132
def create_new_file(file_name)
  @logger.info("Creating %s..." % [file_name])
  make_dir_for_path(file_name)
  new_file = File.new(file_name, File::WRONLY|File::TRUNC|File::CREAT)
end
do_process_wsdl_client(client) click to toggle source

Generate code for given Savon client.

# File lib/ads_common/build/savon_generator.rb, line 88
def do_process_wsdl_client(client)
  wsdl = client.wsdl
  check_service(wsdl)

  service_file_name = @generator_args[:service_name].to_s.snakecase
  wrapper_file_name = "%s/%s.rb" % [@code_path, service_file_name]
  write_wrapper(wsdl, wrapper_file_name)

  registry_file_name = "%s/%s_registry.rb" %
      [@code_path, service_file_name]
  write_registry(wsdl, registry_file_name)
end
get_proxy_path() click to toggle source
# File lib/ads_common/build/savon_generator.rb, line 144
def get_proxy_path()
  return ENV['ADSAPI_PROXY']
end
make_dir_for_path(path) click to toggle source

Creates a directory for the file path specified if not exists.

# File lib/ads_common/build/savon_generator.rb, line 139
def make_dir_for_path(path)
  dir_name = File.dirname(path)
  Dir.mkdir(dir_name) if !File.directory?(dir_name)
end
write_registry(wsdl, file_name) click to toggle source

Generates registry file.

# File lib/ads_common/build/savon_generator.rb, line 118
def write_registry(wsdl, file_name)
  registry_file = create_new_file(file_name)
  generator = SavonRegistryGenerator.new(@generator_args)
  registry = SavonRegistry.new(wsdl, @generator_args)
  generator.add_exceptions(registry.soap_exceptions)
  generator.add_methods(registry.soap_methods)
  generator.add_namespaces(registry.soap_namespaces)
  generator.add_types(registry.soap_types)
  registry_file.write(generator.generate_code())
  registry_file.close
end
write_wrapper(wsdl, file_name) click to toggle source

Generates wrapper file.

# File lib/ads_common/build/savon_generator.rb, line 109
def write_wrapper(wsdl, file_name)
  wrapper_file = create_new_file(file_name)
  generator = SavonServiceGenerator.new(@generator_args)
  generator.add_actions(wsdl.soap_actions.dup)
  wrapper_file.write(generator.generate_code())
  wrapper_file.close
end