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