google-ads-common 0.2.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/ChangeLog +5 -0
- data/lib/ads_common/api.rb +58 -15
- data/lib/ads_common/api_config.rb +6 -1
- data/lib/ads_common/build/rake_common.rb +10 -6
- data/lib/ads_common/build/savon_abstract_generator.rb +1 -0
- data/lib/ads_common/build/savon_generator.rb +10 -3
- data/lib/ads_common/build/savon_registry.rb +11 -6
- data/lib/ads_common/config.rb +2 -2
- data/lib/ads_common/http.rb +3 -2
- data/lib/ads_common/savon_service.rb +25 -16
- data/lib/ads_common/soap4r_logger.rb +42 -0
- data/lib/ads_common/soap4r_response_handler.rb +5 -14
- metadata +5 -5
- data/lib/ads_common/logger.rb +0 -68
data/ChangeLog
CHANGED
data/lib/ads_common/api.rb
CHANGED
|
@@ -19,29 +19,19 @@
|
|
|
19
19
|
#
|
|
20
20
|
# Generic Api class, to be inherited from and extended by specific APIs.
|
|
21
21
|
|
|
22
|
+
require 'logger'
|
|
23
|
+
|
|
22
24
|
require 'ads_common/errors'
|
|
23
25
|
require 'ads_common/auth/base_handler'
|
|
24
26
|
require 'ads_common/auth/client_login_handler'
|
|
25
27
|
require 'ads_common/soap4r_headers/nested_header_handler'
|
|
26
28
|
require 'ads_common/soap4r_headers/single_header_handler'
|
|
27
29
|
require 'ads_common/soap4r_response_handler'
|
|
30
|
+
require 'ads_common/soap4r_logger'
|
|
28
31
|
|
|
29
32
|
module AdsCommon
|
|
30
33
|
class Api
|
|
31
34
|
|
|
32
|
-
# Auxiliary method to create a new Soap4rResponseHandler
|
|
33
|
-
# Should be redefined in inheriting classes, if planning to do specific
|
|
34
|
-
# logging.
|
|
35
|
-
def create_handler
|
|
36
|
-
AdsCommon::Soap4rResponseHandler.new(self)
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
# Logger object used for logging request info
|
|
40
|
-
attr_reader :request_logger
|
|
41
|
-
|
|
42
|
-
# Logger object used for logging SOAP XML
|
|
43
|
-
attr_reader :xml_logger
|
|
44
|
-
|
|
45
35
|
# Methods that return the service configuration and the client library
|
|
46
36
|
# configuration. They need to be redefined in subclasses.
|
|
47
37
|
attr_reader :api_config, :config
|
|
@@ -52,6 +42,23 @@ module AdsCommon
|
|
|
52
42
|
# The configuration for this Api object
|
|
53
43
|
attr_reader :config
|
|
54
44
|
|
|
45
|
+
# The logger for this Api object.
|
|
46
|
+
attr_reader :logger
|
|
47
|
+
|
|
48
|
+
# Constructor for Api.
|
|
49
|
+
def initialize(provided_config = nil)
|
|
50
|
+
load_config(provided_config)
|
|
51
|
+
provided_logger = @config.read('library.logger')
|
|
52
|
+
self.logger = (provided_logger.nil?) ?
|
|
53
|
+
create_default_logger() : provided_logger
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Sets the logger to use.
|
|
57
|
+
def logger=(logger)
|
|
58
|
+
@logger = logger
|
|
59
|
+
@config.set('library.logger', @logger)
|
|
60
|
+
end
|
|
61
|
+
|
|
55
62
|
# Obtain an API service, given a version and its name.
|
|
56
63
|
#
|
|
57
64
|
# Args:
|
|
@@ -124,7 +131,7 @@ module AdsCommon
|
|
|
124
131
|
end
|
|
125
132
|
|
|
126
133
|
# Handle loading of a single service.
|
|
127
|
-
# Creates the driver, sets up handlers and
|
|
134
|
+
# Creates the driver, sets up handlers and logger, declares the appropriate
|
|
128
135
|
# wrapper class and creates an instance of it.
|
|
129
136
|
#
|
|
130
137
|
# Args:
|
|
@@ -168,7 +175,7 @@ module AdsCommon
|
|
|
168
175
|
# Add response handler to this driver for API unit usage processing.
|
|
169
176
|
driver.callbackhandler = create_callback_handler
|
|
170
177
|
# Plug the wiredump to our XML logger
|
|
171
|
-
driver.wiredump_dev =
|
|
178
|
+
driver.wiredump_dev = AdsCommon::Soap4rLogger.new(@logger, Logger::DEBUG)
|
|
172
179
|
driver.options['protocol.http.ssl_config.verify_mode'] = nil
|
|
173
180
|
proxy = config.read('connection.proxy')
|
|
174
181
|
if proxy
|
|
@@ -179,5 +186,41 @@ module AdsCommon
|
|
|
179
186
|
@wrappers[[version, service]] = wrapper
|
|
180
187
|
return driver, wrapper
|
|
181
188
|
end
|
|
189
|
+
|
|
190
|
+
# Auxiliary method to create a default Logger.
|
|
191
|
+
def create_default_logger()
|
|
192
|
+
logger = Logger.new(STDOUT)
|
|
193
|
+
logger.level = get_log_level_for_string(
|
|
194
|
+
@config.read('library.log_level', Logger::INFO))
|
|
195
|
+
return logger
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
# Helper method to load the default configuration file or a given config.
|
|
199
|
+
def load_config(provided_config = nil)
|
|
200
|
+
@config = (provided_config.nil?) ?
|
|
201
|
+
AdsCommon::Config.new(
|
|
202
|
+
File.join(ENV['HOME'], default_config_filename)) :
|
|
203
|
+
AdsCommon::Config.new(provided_config)
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
# Gets the default config filename.
|
|
207
|
+
def default_config_filename()
|
|
208
|
+
return api_config.default_config_filename
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
# Converts log level string (from config) to Logger value.
|
|
212
|
+
def get_log_level_for_string(log_level)
|
|
213
|
+
result = log_level
|
|
214
|
+
if log_level.is_a?(String)
|
|
215
|
+
result = case log_level.upcase
|
|
216
|
+
when 'FATAL' then Logger::FATAL
|
|
217
|
+
when 'ERROR' then Logger:ERROR
|
|
218
|
+
when 'WARN' then Logger::WARN
|
|
219
|
+
when 'INFO' then Logger::INFO
|
|
220
|
+
when 'DEBUG' then Logger::DEBUG
|
|
221
|
+
end
|
|
222
|
+
end
|
|
223
|
+
return result
|
|
224
|
+
end
|
|
182
225
|
end
|
|
183
226
|
end
|
|
@@ -26,7 +26,7 @@ module AdsCommon
|
|
|
26
26
|
# Contains helper methods for loading and managing the available services.
|
|
27
27
|
# This module is meant to be imported into API-specific modules.
|
|
28
28
|
module ApiConfig
|
|
29
|
-
ADS_COMMON_VERSION = '0.
|
|
29
|
+
ADS_COMMON_VERSION = '0.3.0'
|
|
30
30
|
|
|
31
31
|
# Get the available API versions.
|
|
32
32
|
#
|
|
@@ -111,6 +111,11 @@ module AdsCommon
|
|
|
111
111
|
nil
|
|
112
112
|
end
|
|
113
113
|
|
|
114
|
+
# Get the default filename for the config file.
|
|
115
|
+
def default_config_filename
|
|
116
|
+
raise NotImplementedError, 'default_config_filename not overriden.'
|
|
117
|
+
end
|
|
118
|
+
|
|
114
119
|
# Get the endpoint for a service on a given environment and API version.
|
|
115
120
|
#
|
|
116
121
|
# Args:
|
|
@@ -47,7 +47,8 @@ $PKG_VERSION = ENV['REL'] ? ENV['REL'] : $CURRENT_VERSION
|
|
|
47
47
|
|
|
48
48
|
SRC_RB = FileList["#{$LIBDIR}/**/*.rb"]
|
|
49
49
|
|
|
50
|
-
logger = Logger.new(
|
|
50
|
+
logger = Logger.new(STDOUT)
|
|
51
|
+
logger.level = Logger::INFO
|
|
51
52
|
|
|
52
53
|
CLEAN.include($WSDLDIR)
|
|
53
54
|
CLEAN.include($DOCDIR)
|
|
@@ -69,9 +70,11 @@ task :getwsdl do
|
|
|
69
70
|
$API_CONFIG.versions.each do |version|
|
|
70
71
|
urls = $API_CONFIG.get_wsdls(version)
|
|
71
72
|
mkdir_p File.join($WSDLDIR, version.to_s)
|
|
73
|
+
config = Generator.config
|
|
74
|
+
config.set('library.logger', logger)
|
|
72
75
|
urls.each do |service, url|
|
|
73
|
-
|
|
74
|
-
save(AdsCommon::Http.get(url,
|
|
76
|
+
logger.info("Getting #{url}...")
|
|
77
|
+
save(AdsCommon::Http.get(url, config),
|
|
75
78
|
get_wsdl_file_name(version.to_s, service.to_s))
|
|
76
79
|
end
|
|
77
80
|
end
|
|
@@ -146,7 +149,8 @@ task :soap4r_generate do
|
|
|
146
149
|
File.open(wrapper_file, 'w') do |file|
|
|
147
150
|
file.write(Generator.generate_wrapper_class(version, service))
|
|
148
151
|
end
|
|
149
|
-
|
|
152
|
+
logger.info("Generated #{version} #{service_name} " +
|
|
153
|
+
"wrapper: #{wrapper_file}")
|
|
150
154
|
end
|
|
151
155
|
end
|
|
152
156
|
end
|
|
@@ -297,7 +301,7 @@ PKG_FILES = FileList[
|
|
|
297
301
|
PKG_FILES.exclude(/\._/)
|
|
298
302
|
|
|
299
303
|
if ! defined?(Gem)
|
|
300
|
-
|
|
304
|
+
logger.fatal('Package Target requires RubyGems')
|
|
301
305
|
else
|
|
302
306
|
spec = Gem::Specification.new do |s|
|
|
303
307
|
|
|
@@ -320,7 +324,7 @@ else
|
|
|
320
324
|
|
|
321
325
|
# RDoc information
|
|
322
326
|
s.has_rdoc = true
|
|
323
|
-
s.extra_rdoc_files = ['README']
|
|
327
|
+
s.extra_rdoc_files = ['README', 'COPYING', 'ChangeLog']
|
|
324
328
|
s.rdoc_options << '--main' << 'README'
|
|
325
329
|
|
|
326
330
|
# Metadata
|
|
@@ -33,6 +33,7 @@ module AdsCommon
|
|
|
33
33
|
@service_name = args[:service_name]
|
|
34
34
|
@module_name = args[:module_name]
|
|
35
35
|
@namespace = args[:namespace]
|
|
36
|
+
@logger = args[:logger]
|
|
36
37
|
@generator_stamp = "Code generated by AdsCommon library %s on %s." %
|
|
37
38
|
[AdsCommon::ApiConfig::ADS_COMMON_VERSION,
|
|
38
39
|
Time.now.strftime("%Y-%m-%d %H:%M:%S")]
|
|
@@ -45,11 +45,19 @@ module AdsCommon
|
|
|
45
45
|
@wsdl_url = wsdl_url
|
|
46
46
|
@code_path = code_path
|
|
47
47
|
@service_name = service_name
|
|
48
|
+
@logger = Logger.new(STDOUT)
|
|
49
|
+
@logger.level = Logger::INFO
|
|
48
50
|
@generator_args = {
|
|
49
51
|
:service_name => service_name,
|
|
50
52
|
:module_name => module_name,
|
|
51
|
-
:require_path => @code_path.sub(/^lib\//, '')
|
|
53
|
+
:require_path => @code_path.sub(/^lib\//, ''),
|
|
54
|
+
:logger => @logger
|
|
52
55
|
}
|
|
56
|
+
Savon.configure do |config|
|
|
57
|
+
config.logger = @logger
|
|
58
|
+
config.log_level = :debug
|
|
59
|
+
end
|
|
60
|
+
HTTPI.logger = @logger
|
|
53
61
|
end
|
|
54
62
|
|
|
55
63
|
#
|
|
@@ -68,7 +76,6 @@ module AdsCommon
|
|
|
68
76
|
rescue AdsCommon::Errors::Error => e
|
|
69
77
|
error_msg = "An unrecoverable error occured during code generation"
|
|
70
78
|
error_msg += " for service [%s]: %s" % [@wsdl_url, e]
|
|
71
|
-
# TODO log properly
|
|
72
79
|
raise AdsCommon::Errors::BuildError, error_msg
|
|
73
80
|
end
|
|
74
81
|
end
|
|
@@ -121,7 +128,7 @@ module AdsCommon
|
|
|
121
128
|
# Creates a new file on specified path, overwriting existing one if it
|
|
122
129
|
# exists
|
|
123
130
|
def create_new_file(file_name)
|
|
124
|
-
|
|
131
|
+
@logger.info("Creating %s..." % [file_name])
|
|
125
132
|
make_dir_for_path(file_name)
|
|
126
133
|
new_file = File.new(file_name, File::WRONLY|File::TRUNC|File::CREAT)
|
|
127
134
|
end
|
|
@@ -62,7 +62,6 @@ module AdsCommon
|
|
|
62
62
|
@soap_exceptions << extract_exception(ctype)
|
|
63
63
|
elsif ctype_name.match('.+Error$')
|
|
64
64
|
# We don't use it at the moment.
|
|
65
|
-
# TODO: log we ignore it at proper log level.
|
|
66
65
|
else
|
|
67
66
|
@soap_types << extract_type(ctype)
|
|
68
67
|
end
|
|
@@ -96,11 +95,17 @@ module AdsCommon
|
|
|
96
95
|
|
|
97
96
|
# Extracts method parameters from ComplexTypes element.
|
|
98
97
|
def extract_method(method_element, doc)
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
98
|
+
name = get_element_name(method_element)
|
|
99
|
+
method = {
|
|
100
|
+
:name => name.snakecase,
|
|
101
|
+
:input => extract_input_parameters(method_element, doc),
|
|
102
|
+
:output => extract_output_parameters(method_element, doc)
|
|
103
|
+
# This could be used to include documentation from wsdl.
|
|
104
|
+
#:doc => get_element_doc(operation, 'wsdl')
|
|
105
|
+
}
|
|
106
|
+
original_name = (name.snakecase.lower_camelcase == name)? nil : name
|
|
107
|
+
method[:original_name] = original_name unless original_name.nil?
|
|
108
|
+
return method
|
|
104
109
|
end
|
|
105
110
|
|
|
106
111
|
# Extracts definition of all types. If a non standard undefined type is
|
data/lib/ads_common/config.rb
CHANGED
data/lib/ads_common/http.rb
CHANGED
|
@@ -61,14 +61,15 @@ module AdsCommon
|
|
|
61
61
|
# Defaulting to stricter :peer validation.
|
|
62
62
|
def self.prepare_request(config, url, headers = nil, data = nil)
|
|
63
63
|
request = HTTPI::Request.new(url)
|
|
64
|
-
proxy = config
|
|
64
|
+
proxy = config.read('connection.proxy', nil)
|
|
65
65
|
request.proxy = proxy if proxy
|
|
66
66
|
strict_ssl = config.nil? or
|
|
67
67
|
!(config.read('connection.strict_ssl_verification') == 'false')
|
|
68
68
|
request.auth.ssl.verify_mode = strict_ssl ? :peer : :none
|
|
69
69
|
request.headers = headers if headers
|
|
70
70
|
request.body = data if data
|
|
71
|
-
|
|
71
|
+
logger = config.read('library.logger')
|
|
72
|
+
HTTPI.logger = logger if logger
|
|
72
73
|
return request
|
|
73
74
|
end
|
|
74
75
|
end
|
|
@@ -24,7 +24,7 @@ require 'savon'
|
|
|
24
24
|
|
|
25
25
|
module AdsCommon
|
|
26
26
|
class SavonService
|
|
27
|
-
attr_accessor :headerhandler
|
|
27
|
+
attr_accessor :headerhandler
|
|
28
28
|
|
|
29
29
|
# Creates a new service.
|
|
30
30
|
def initialize(endpoint, namespace)
|
|
@@ -32,8 +32,6 @@ module AdsCommon
|
|
|
32
32
|
raise NoMethodError, "Tried to instantiate an abstract class"
|
|
33
33
|
end
|
|
34
34
|
@headerhandler = []
|
|
35
|
-
@wiredump_dev = nil
|
|
36
|
-
@options = {}
|
|
37
35
|
@client = Savon::Client.new do |wsdl|
|
|
38
36
|
wsdl.namespace = namespace
|
|
39
37
|
wsdl.endpoint = endpoint
|
|
@@ -55,18 +53,27 @@ module AdsCommon
|
|
|
55
53
|
# Executes SOAP action specified as a string with given arguments.
|
|
56
54
|
def execute_action(action_name, args)
|
|
57
55
|
args = validate_args(action_name, args)
|
|
58
|
-
response =
|
|
59
|
-
set_headers(soap, args)
|
|
60
|
-
end
|
|
56
|
+
response = execute_soap_request(action_name.to_sym, args)
|
|
61
57
|
handle_errors(response)
|
|
62
58
|
return extract_result(response, action_name)
|
|
63
59
|
end
|
|
64
60
|
|
|
61
|
+
# Executes the SOAP request with original SOAP name.
|
|
62
|
+
def execute_soap_request(action, args)
|
|
63
|
+
original_action_name =
|
|
64
|
+
get_service_registry.get_method_signature(action)[:original_name]
|
|
65
|
+
original_action_name = action if original_action_name.nil?
|
|
66
|
+
response = @client.request(original_action_name) do |soap|
|
|
67
|
+
set_headers(soap, args)
|
|
68
|
+
end
|
|
69
|
+
return response
|
|
70
|
+
end
|
|
71
|
+
|
|
65
72
|
# Validates input parameters to:
|
|
66
73
|
# - add parameter names;
|
|
67
74
|
# - resolve xsi:type where required;
|
|
68
75
|
# - convert some native types to xml.
|
|
69
|
-
def validate_args(action_name,
|
|
76
|
+
def validate_args(action_name, args)
|
|
70
77
|
validated_args = Hash.new
|
|
71
78
|
in_params = get_service_registry.get_method_signature(action_name)[:input]
|
|
72
79
|
in_params.each_with_index do |in_param, index|
|
|
@@ -82,9 +89,9 @@ module AdsCommon
|
|
|
82
89
|
# Also handles some types that need special conversions.
|
|
83
90
|
def validate_arg(arg, parent = nil, key = nil)
|
|
84
91
|
result = case arg
|
|
85
|
-
when Hash
|
|
86
|
-
when Array
|
|
87
|
-
when Time
|
|
92
|
+
when Hash then validate_hash_arg(arg, parent, key)
|
|
93
|
+
when Array then arg.map {|item| validate_arg(item, parent, key)}
|
|
94
|
+
when Time then time_to_xml_hash(arg)
|
|
88
95
|
else arg
|
|
89
96
|
end
|
|
90
97
|
return result
|
|
@@ -216,12 +223,14 @@ module AdsCommon
|
|
|
216
223
|
# Converts XML input string into a native format.
|
|
217
224
|
def normalize_type(data, field)
|
|
218
225
|
type_name = field[:type]
|
|
219
|
-
result =
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
226
|
+
result = (data.nil?) ? data :
|
|
227
|
+
case type_name
|
|
228
|
+
when 'long', 'int' then Integer(data)
|
|
229
|
+
when 'double' then Float(data)
|
|
230
|
+
when 'boolean' then data.kind_of?(String) ?
|
|
231
|
+
data.casecmp('true') == 0 : data
|
|
232
|
+
else data
|
|
233
|
+
end
|
|
225
234
|
# If field signature allows an array, forcing array structure even for one
|
|
226
235
|
# item.
|
|
227
236
|
if !field[:min_occurs].nil? and
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
#!/usr/bin/ruby
|
|
2
|
+
#
|
|
3
|
+
# Author:: api.dklimkin@gmail.com (Danial Klimkin)
|
|
4
|
+
#
|
|
5
|
+
# Copyright:: Copyright 2011, Google Inc. All Rights Reserved.
|
|
6
|
+
#
|
|
7
|
+
# License:: Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
+
# you may not use this file except in compliance with the License.
|
|
9
|
+
# You may obtain a copy of the License at
|
|
10
|
+
#
|
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
#
|
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
16
|
+
# implied.
|
|
17
|
+
# See the License for the specific language governing permissions and
|
|
18
|
+
# limitations under the License.
|
|
19
|
+
#
|
|
20
|
+
# Wrapper class to handle Soap4r-specific logging to standard logger.
|
|
21
|
+
|
|
22
|
+
require 'logger'
|
|
23
|
+
|
|
24
|
+
module AdsCommon
|
|
25
|
+
class Soap4rLogger
|
|
26
|
+
# Constructor for Soap4rLogger.
|
|
27
|
+
#
|
|
28
|
+
# Args:
|
|
29
|
+
# - logger: a ruby logger to log to.
|
|
30
|
+
# - log_level: default log_level for streams, defaults to INFO.
|
|
31
|
+
#
|
|
32
|
+
def initialize(logger, log_level = Logger::INFO)
|
|
33
|
+
@logger = logger
|
|
34
|
+
@log_level = log_level
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Overload << operator to perform logging.
|
|
38
|
+
def << (text)
|
|
39
|
+
@logger.add(@log_level) {text.to_s}
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
#
|
|
3
3
|
# Authors:: api.sgomes@gmail.com (Sérgio Gomes)
|
|
4
4
|
#
|
|
5
|
-
# Copyright:: Copyright
|
|
5
|
+
# Copyright:: Copyright 2011, Google Inc. All Rights Reserved.
|
|
6
6
|
#
|
|
7
7
|
# License:: Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
8
|
# you may not use this file except in compliance with the License.
|
|
@@ -50,19 +50,10 @@ module AdsCommon
|
|
|
50
50
|
#
|
|
51
51
|
def on_callback(method_name, endpoint, envelope, params, fault = false,
|
|
52
52
|
fault_msg = nil)
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
data
|
|
57
|
-
data += "isFault=#{(!!fault).to_s} "
|
|
58
|
-
|
|
59
|
-
if fault_msg
|
|
60
|
-
data += "faultMessage=\"#{fault_msg}\""
|
|
61
|
-
else
|
|
62
|
-
data += "faultMessage=none"
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
@parent.request_logger << data
|
|
53
|
+
fault_text = fault_msg ? fault_msg.to_s : 'none'
|
|
54
|
+
data = "host=%s method=%s isFault=%s faultMessage=\"%s\"" %
|
|
55
|
+
[URI.parse(endpoint).host, method_name, fault.to_s, fault_text]
|
|
56
|
+
@parent.logger.info(data)
|
|
66
57
|
end
|
|
67
58
|
|
|
68
59
|
# Parses the value contained in a SOAP response header.
|
metadata
CHANGED
|
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
|
4
4
|
prerelease: false
|
|
5
5
|
segments:
|
|
6
6
|
- 0
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
version: 0.
|
|
7
|
+
- 3
|
|
8
|
+
- 0
|
|
9
|
+
version: 0.3.0
|
|
10
10
|
platform: ruby
|
|
11
11
|
authors:
|
|
12
12
|
- Sergio Gomes
|
|
@@ -15,7 +15,7 @@ autorequire:
|
|
|
15
15
|
bindir: bin
|
|
16
16
|
cert_chain: []
|
|
17
17
|
|
|
18
|
-
date: 2011-
|
|
18
|
+
date: 2011-06-09 00:00:00 +04:00
|
|
19
19
|
default_executable:
|
|
20
20
|
dependencies:
|
|
21
21
|
- !ruby/object:Gem::Dependency
|
|
@@ -105,9 +105,9 @@ files:
|
|
|
105
105
|
- lib/ads_common/credential_handler.rb
|
|
106
106
|
- lib/ads_common/errors.rb
|
|
107
107
|
- lib/ads_common/http.rb
|
|
108
|
-
- lib/ads_common/logger.rb
|
|
109
108
|
- lib/ads_common/savon_service.rb
|
|
110
109
|
- lib/ads_common/soap4r_patches.rb
|
|
110
|
+
- lib/ads_common/soap4r_logger.rb
|
|
111
111
|
- README
|
|
112
112
|
- ChangeLog
|
|
113
113
|
- COPYING
|
data/lib/ads_common/logger.rb
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/ruby
|
|
2
|
-
#
|
|
3
|
-
# Author:: api.sgomes@gmail.com (Sérgio Gomes)
|
|
4
|
-
#
|
|
5
|
-
# Copyright:: Copyright 2010, Google Inc. All Rights Reserved.
|
|
6
|
-
#
|
|
7
|
-
# License:: Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
-
# you may not use this file except in compliance with the License.
|
|
9
|
-
# You may obtain a copy of the License at
|
|
10
|
-
#
|
|
11
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
-
#
|
|
13
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
14
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
16
|
-
# implied.
|
|
17
|
-
# See the License for the specific language governing permissions and
|
|
18
|
-
# limitations under the License.
|
|
19
|
-
#
|
|
20
|
-
# Wrapper class to handle logging to console and/or files.
|
|
21
|
-
|
|
22
|
-
require 'logger'
|
|
23
|
-
|
|
24
|
-
module AdsCommon
|
|
25
|
-
|
|
26
|
-
# Wrapper class to handle logging to console and/or files.
|
|
27
|
-
class Logger
|
|
28
|
-
|
|
29
|
-
# Constructor for AdsLogger.
|
|
30
|
-
#
|
|
31
|
-
# Args:
|
|
32
|
-
# - filename: the filename for the log file to be written (if log_to_file is
|
|
33
|
-
# called)
|
|
34
|
-
# - log_to_console: boolean, indicates whether or not to log to the console
|
|
35
|
-
#
|
|
36
|
-
def initialize(filename, log_to_console=false)
|
|
37
|
-
@filename = filename
|
|
38
|
-
@loggers = []
|
|
39
|
-
if log_to_console
|
|
40
|
-
stderr_logger = ::Logger.new(STDERR)
|
|
41
|
-
stderr_logger.level = ::Logger::INFO
|
|
42
|
-
@loggers << stderr_logger
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
# Enables logging to a file.
|
|
47
|
-
# May be called several times to log to multiple files.
|
|
48
|
-
#
|
|
49
|
-
# Args:
|
|
50
|
-
# - path: where to write the file (defaults to current dir). Path only, do
|
|
51
|
-
# not provide filename.
|
|
52
|
-
#
|
|
53
|
-
def log_to_file(path='.')
|
|
54
|
-
new_logger = ::Logger.new(File.join(path, @filename))
|
|
55
|
-
new_logger.level = ::Logger::INFO
|
|
56
|
-
@loggers << new_logger
|
|
57
|
-
|
|
58
|
-
return nil
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
# Overload << operator to perform logging.
|
|
62
|
-
def << (text)
|
|
63
|
-
@loggers.each do |logger|
|
|
64
|
-
logger.info text.to_s
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
end
|