google-ads-common 0.6.2 → 0.6.3
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +7 -0
- data/README +4 -3
- data/lib/ads_common/api_config.rb +2 -2
- data/lib/ads_common/auth/client_login_handler.rb +35 -16
- data/lib/ads_common/build/savon_abstract_generator.rb +1 -1
- data/lib/ads_common/config.rb +0 -1
- data/lib/ads_common/errors.rb +11 -0
- data/lib/ads_common/http.rb +23 -8
- data/lib/ads_common/savon_headers/base_header_handler.rb +1 -1
- data/lib/ads_common/savon_service.rb +4 -11
- data/lib/ads_common/version.rb +26 -0
- data/test/test_client_login_handler.rb +98 -0
- data/test/test_config.rb +1 -1
- data/test/test_config.yml +11 -0
- data/test/test_parameters_validator.rb +0 -1
- data/test/test_savon_service.rb +0 -1
- metadata +41 -37
- data/Rakefile +0 -77
data/ChangeLog
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
0.6.3:
|
2
|
+
- Support for CAPTCHA challenge handling.
|
3
|
+
- Added .gemspec and updated packaging process.
|
4
|
+
- Removed explicit require for RubyGems.
|
5
|
+
- Added configuration directive to choose HTTPI adapter (connection.adapter)
|
6
|
+
and read / open timeouts (connection.read_timeout, connection.open_timeout).
|
7
|
+
|
1
8
|
0.6.2:
|
2
9
|
- Requiring Savon as "~>" now.
|
3
10
|
- Updates to file headers.
|
data/README
CHANGED
@@ -19,7 +19,8 @@ Install it using the gem install command.
|
|
19
19
|
The following gem libraries are required:
|
20
20
|
- savon v0.9.7 or greater;
|
21
21
|
- httpi v0.9.3 or greater;
|
22
|
-
- httpclient v2.2.3 or greater
|
22
|
+
- httpclient v2.2.3 or greater;
|
23
|
+
- oauth v0.4.5 or greater.
|
23
24
|
|
24
25
|
= Docs for Developers
|
25
26
|
|
@@ -36,8 +37,8 @@ The following gem libraries are required:
|
|
36
37
|
|
37
38
|
== 2 - Commands
|
38
39
|
|
39
|
-
$
|
40
|
-
to
|
40
|
+
$ gem build google-ads-common.gemspec
|
41
|
+
to build the gem
|
41
42
|
|
42
43
|
$ rake test
|
43
44
|
to run unit tests on the library
|
@@ -21,13 +21,13 @@
|
|
21
21
|
# Helper methods for loading and managing services for an API. Defines methods
|
22
22
|
# to be included as class modules in a service class for a specific API.
|
23
23
|
|
24
|
+
require 'ads_common/version.rb'
|
25
|
+
|
24
26
|
module AdsCommon
|
25
27
|
|
26
28
|
# Contains helper methods for loading and managing the available services.
|
27
29
|
# This module is meant to be imported into API-specific modules.
|
28
30
|
module ApiConfig
|
29
|
-
ADS_COMMON_VERSION = '0.6.2'
|
30
|
-
|
31
31
|
# Get the available API versions.
|
32
32
|
#
|
33
33
|
# Returns:
|
@@ -33,6 +33,7 @@ module AdsCommon
|
|
33
33
|
class ClientLoginHandler < AdsCommon::Auth::BaseHandler
|
34
34
|
ACCOUNT_TYPE = 'GOOGLE'
|
35
35
|
AUTH_PATH = '/accounts/ClientLogin'
|
36
|
+
CAPTCHA_PATH = '/accounts/'
|
36
37
|
IGNORED_FIELDS = [:email, :password, :auth_token]
|
37
38
|
|
38
39
|
# Initializes the ClientLoginHandler with all the necessary details.
|
@@ -139,24 +140,43 @@ module AdsCommon
|
|
139
140
|
|
140
141
|
data = "accountType=%s&Email=%s&Passwd=%s&service=%s" %
|
141
142
|
[ACCOUNT_TYPE, email, password, @service_name]
|
143
|
+
|
144
|
+
if credentials[:logintoken] and credentials[:logincaptcha]
|
145
|
+
data += "&logintoken=%s&logincaptcha=%s" %
|
146
|
+
[CGI.escape(credentials[:logintoken]),
|
147
|
+
CGI.escape(credentials[:logincaptcha])]
|
148
|
+
end
|
149
|
+
|
142
150
|
headers = {'Content-Type' => 'application/x-www-form-urlencoded'}
|
143
151
|
|
144
152
|
response = AdsCommon::Http.post_response(url, data, @config, headers)
|
145
153
|
results = parse_token_text(response.body)
|
146
154
|
|
147
|
-
if response.code == 200 and results.include?(
|
148
|
-
return results[
|
155
|
+
if response.code == 200 and results.include?('Auth')
|
156
|
+
return results['Auth']
|
149
157
|
else
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
158
|
+
handle_login_error(credentials, response, results)
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
# Raises relevant error based on response and parsed results.
|
163
|
+
def handle_login_error(credentials, response, results)
|
164
|
+
# Handling for known errors.
|
165
|
+
if 'CaptchaRequired'.eql?(results['Error'])
|
166
|
+
captcha_url = @server + CAPTCHA_PATH + results['CaptchaUrl']
|
167
|
+
raise AdsCommon::Errors::CaptchaRequiredError.new(results['Error'],
|
168
|
+
results['CaptchaToken'], captcha_url, results['Url'])
|
159
169
|
end
|
170
|
+
# For other errors throwing a generic error.
|
171
|
+
error_message = "ClientLogin failed for email '%s': HTTP code %d." %
|
172
|
+
[credentials[:email], response.code]
|
173
|
+
error_str = results['Error'] || response.body
|
174
|
+
error_message += " Error: %s." % error_str if error_str
|
175
|
+
if results.include?('Info')
|
176
|
+
error_message += " Info: %s." % results['Info']
|
177
|
+
end
|
178
|
+
raise AdsCommon::Errors::AuthError.new(error_message, error_str,
|
179
|
+
results['Info'])
|
160
180
|
end
|
161
181
|
|
162
182
|
# Extracts key-value pairs from ClientLogin server response.
|
@@ -168,12 +188,11 @@ module AdsCommon
|
|
168
188
|
# Hash of key-value pairs
|
169
189
|
#
|
170
190
|
def parse_token_text(text)
|
171
|
-
|
172
|
-
|
173
|
-
key
|
174
|
-
result
|
191
|
+
return text.split("\n").inject({}) do |result, line|
|
192
|
+
key, *values = line.split('=')
|
193
|
+
result[key] = values.join('=')
|
194
|
+
result
|
175
195
|
end
|
176
|
-
return result
|
177
196
|
end
|
178
197
|
end
|
179
198
|
end
|
@@ -50,7 +50,7 @@ module AdsCommon
|
|
50
50
|
|
51
51
|
def prepare_template_strings()
|
52
52
|
@generator_stamp = "Code generated by AdsCommon library %s on %s." %
|
53
|
-
[AdsCommon::ApiConfig::
|
53
|
+
[AdsCommon::ApiConfig::CLIENT_LIB_VERSION,
|
54
54
|
Time.now.strftime("%Y-%m-%d %H:%M:%S")]
|
55
55
|
@modules_open_string = 'module ' +
|
56
56
|
[@api_name, @version.to_s.upcase, @service_name].join('; module ')
|
data/lib/ads_common/config.rb
CHANGED
data/lib/ads_common/errors.rb
CHANGED
@@ -48,6 +48,17 @@ module AdsCommon
|
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
|
+
# Raised when ClientLogin Captcha challenge occurs.
|
52
|
+
class CaptchaRequiredError < AuthError
|
53
|
+
attr_reader :error, :captcha_token
|
54
|
+
attr_reader :captcha_url, :auth_url
|
55
|
+
def initialize(error, captcha_token, captcha_url, auth_url)
|
56
|
+
super()
|
57
|
+
@error, @captcha_token = error, captcha_token
|
58
|
+
@captcha_url, @auth_url = captcha_url, auth_url
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
51
62
|
# Raised if a required property on an object is missing.
|
52
63
|
class MissingPropertyError < Error
|
53
64
|
attr_reader :property, :object_type
|
data/lib/ads_common/http.rb
CHANGED
@@ -26,6 +26,9 @@ require 'ads_common/errors'
|
|
26
26
|
|
27
27
|
module AdsCommon
|
28
28
|
module Http
|
29
|
+
# HTTP read and open timeouts in seconds.
|
30
|
+
HTTP_READ_TIMEOUT = 15 * 60
|
31
|
+
HTTP_OPEN_TIMEOUT = 5 * 60
|
29
32
|
|
30
33
|
# Performs a get on a URL, using all of the connection options in the
|
31
34
|
# client library, returning a HTTPI::Response.
|
@@ -45,8 +48,7 @@ module AdsCommon
|
|
45
48
|
# client library, returning a HTTPI::Response.
|
46
49
|
def self.post_response(url, data, config = nil, headers = nil)
|
47
50
|
request = prepare_request(url, config, headers, data)
|
48
|
-
|
49
|
-
return response
|
51
|
+
return HTTPI.post(request)
|
50
52
|
end
|
51
53
|
|
52
54
|
# Performs a post on a URL, using all of the connection options in the
|
@@ -63,19 +65,32 @@ module AdsCommon
|
|
63
65
|
request = HTTPI::Request.new(url)
|
64
66
|
request.headers = headers if headers
|
65
67
|
request.body = data if data
|
68
|
+
configure_httpi(config, request)
|
69
|
+
return request
|
70
|
+
end
|
71
|
+
|
72
|
+
# Configures HTTPI request according to the config provided.
|
73
|
+
def self.configure_httpi(config, httpi)
|
66
74
|
if config
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
75
|
+
adapter = config.read('connection.adapter')
|
76
|
+
HTTPI.adapter = adapter if adapter
|
77
|
+
proxy = config.read('connection.proxy')
|
78
|
+
httpi.proxy = proxy if proxy
|
79
|
+
enable_gzip = config.read('connection.enable_gzip', false)
|
80
|
+
httpi.gzip if enable_gzip
|
72
81
|
logger = config.read('library.logger')
|
73
82
|
if logger
|
74
83
|
HTTPI.logger = logger
|
75
84
|
HTTPI.log_level = :debug
|
76
85
|
end
|
77
86
|
end
|
78
|
-
|
87
|
+
httpi.read_timeout = (config.nil?) ? HTTP_READ_TIMEOUT :
|
88
|
+
config.read('connection.read_timeout', HTTP_READ_TIMEOUT)
|
89
|
+
httpi.open_timeout = (config.nil?) ? HTTP_OPEN_TIMEOUT :
|
90
|
+
config.read('connection.open_timeout', HTTP_OPEN_TIMEOUT)
|
91
|
+
strict_ssl = config.nil? or
|
92
|
+
config.read('connection.strict_ssl_verification', true)
|
93
|
+
httpi.auth.ssl.verify_mode = strict_ssl ? :peer : :none
|
79
94
|
end
|
80
95
|
end
|
81
96
|
end
|
@@ -89,7 +89,7 @@ module AdsCommon
|
|
89
89
|
app_name = credentials[:userAgent] || credentials[:useragent]
|
90
90
|
# We don't know the library version here. A breaking change needs to be
|
91
91
|
# introduced. This is scheduled for 0.7.0, using Common version for now.
|
92
|
-
lib_version = '0.6.
|
92
|
+
lib_version = '0.6.3'
|
93
93
|
soap_user_agent = "Common-Ruby-%s; %s" % [lib_version, app_name]
|
94
94
|
user_agent = "Savon/%s (%s)" % [Savon::Version, soap_user_agent]
|
95
95
|
user_agent += ' (gzip)' if @config.read('connection.enable_gzip', false)
|
@@ -22,13 +22,11 @@
|
|
22
22
|
require 'httpi'
|
23
23
|
require 'savon'
|
24
24
|
|
25
|
+
require 'ads_common/http'
|
25
26
|
require 'ads_common/parameters_validator'
|
26
27
|
|
27
28
|
module AdsCommon
|
28
29
|
class SavonService
|
29
|
-
# HTTP read timeout in seconds.
|
30
|
-
HTTP_READ_TIMEOUT = 15 * 60
|
31
|
-
|
32
30
|
attr_accessor :headerhandler
|
33
31
|
attr_reader :api
|
34
32
|
attr_reader :version
|
@@ -52,8 +50,6 @@ module AdsCommon
|
|
52
50
|
config.log_level = :debug
|
53
51
|
config.logger = logger
|
54
52
|
end
|
55
|
-
HTTPI.logger = logger
|
56
|
-
HTTPI.log_level = :debug
|
57
53
|
end
|
58
54
|
|
59
55
|
# Returns ServiceRegistry for the current service. Has to be overridden.
|
@@ -68,14 +64,10 @@ module AdsCommon
|
|
68
64
|
|
69
65
|
# Creates and sets up Savon client.
|
70
66
|
def create_savon_client(endpoint, namespace)
|
71
|
-
|
72
|
-
enable_gzip = @api.config.read('connection.enable_gzip', false)
|
73
|
-
client = Savon::Client.new do |wsdl, http|
|
67
|
+
client = Savon::Client.new do |wsdl, httpi|
|
74
68
|
wsdl.endpoint = endpoint
|
75
69
|
wsdl.namespace = namespace
|
76
|
-
|
77
|
-
http.proxy = proxy if proxy
|
78
|
-
http.gzip if enable_gzip
|
70
|
+
AdsCommon::Http.configure_httpi(@api.config, httpi)
|
79
71
|
end
|
80
72
|
return client
|
81
73
|
end
|
@@ -92,6 +84,7 @@ module AdsCommon
|
|
92
84
|
end
|
93
85
|
|
94
86
|
# Logs response headers.
|
87
|
+
# TODO: this needs to go on http or httpi level.
|
95
88
|
def log_headers(headers)
|
96
89
|
@api.logger.debug(headers.map {|k, v| [k, v].join(': ')}.join(', '))
|
97
90
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# Encoding: utf-8
|
2
|
+
#
|
3
|
+
# Authors:: api.dklimkin@gmail.com (Danial Klimkin)
|
4
|
+
#
|
5
|
+
# Copyright:: Copyright 2012, 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
|
+
# Module to keep the current library version.
|
21
|
+
|
22
|
+
module AdsCommon
|
23
|
+
module ApiConfig
|
24
|
+
CLIENT_LIB_VERSION = '0.6.3'
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# Encoding: utf-8
|
3
|
+
#
|
4
|
+
# Author:: api.dklimkin@gmail.com (Danial Klimkin)
|
5
|
+
#
|
6
|
+
# Copyright:: Copyright 2012, Google Inc. All Rights Reserved.
|
7
|
+
#
|
8
|
+
# License:: Licensed under the Apache License, Version 2.0 (the "License");
|
9
|
+
# you may not use this file except in compliance with the License.
|
10
|
+
# You may obtain a copy of the License at
|
11
|
+
#
|
12
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
13
|
+
#
|
14
|
+
# Unless required by applicable law or agreed to in writing, software
|
15
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
16
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
17
|
+
# implied.
|
18
|
+
# See the License for the specific language governing permissions and
|
19
|
+
# limitations under the License.
|
20
|
+
#
|
21
|
+
# Tests client login handler methods.
|
22
|
+
|
23
|
+
require 'test/unit'
|
24
|
+
|
25
|
+
require 'ads_common/config'
|
26
|
+
require 'ads_common/auth/client_login_handler'
|
27
|
+
|
28
|
+
module AdsCommon
|
29
|
+
module Auth
|
30
|
+
class ClientLoginHandler
|
31
|
+
public :parse_token_text
|
32
|
+
public :handle_login_error
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# Stub class for HTTP response.
|
38
|
+
class ResponseStub
|
39
|
+
attr_reader :code
|
40
|
+
attr_reader :body
|
41
|
+
|
42
|
+
def initialize(code, body)
|
43
|
+
@code, @body = code, body
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
class TestParametersValidator < Test::Unit::TestCase
|
48
|
+
def setup
|
49
|
+
config = AdsCommon::Config.new({})
|
50
|
+
@handler = AdsCommon::Auth::ClientLoginHandler.new(
|
51
|
+
config, 'http://www.google.com', nil)
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_handle_login_error_captcha
|
55
|
+
assert_raises (AdsCommon::Errors::CaptchaRequiredError) do
|
56
|
+
response = ResponseStub.new(403, '')
|
57
|
+
results = {
|
58
|
+
'Error' => 'CaptchaRequired',
|
59
|
+
'CaptchaUrl' => '/account/test-captcha'
|
60
|
+
}
|
61
|
+
@handler.handle_login_error({}, response, results)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_handle_login_error_other
|
66
|
+
assert_raises (AdsCommon::Errors::AuthError) do
|
67
|
+
response = ResponseStub.new(403, 'Body')
|
68
|
+
results = {'Error' => 'SomeError', 'Info' => 'SomeInfo'}
|
69
|
+
@handler.handle_login_error({}, response, results)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_parse_token_text_simple
|
74
|
+
error_str = "BadAuthentication"
|
75
|
+
text = "Error=%s\n" % error_str
|
76
|
+
result = @handler.parse_token_text(text)
|
77
|
+
assert_equal(error_str, result['Error'])
|
78
|
+
assert_equal(['Error'], result.keys)
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_parse_token_text_captcha
|
82
|
+
captcha_token = "3u6_27iOel71j525g2tg252ge6t35g345XJtRuHYEYiTyAxsMPz2222442"
|
83
|
+
captcha_url = "Captcha?ctoken=3u245245rgfwrg5g2fw5x3xGqQBrk_AoXXJtRuHY%3a-V"
|
84
|
+
error_str = "CaptchaRequired"
|
85
|
+
url_str = "https://www.google.com/accounts/ErrorMsg?Email=example%40goog" +
|
86
|
+
"le.com&service=adwords&id=cr&timeStmp=1327400499&secTok=.AG5fkgtw45" +
|
87
|
+
"25gfref25gttrefwwrPeB8Xw%3D%3D"
|
88
|
+
text = "CaptchaToken=%s\nCaptchaUrl=%s\nError=%s\nUrl=%s\n" %
|
89
|
+
[captcha_token, captcha_url, error_str, url_str]
|
90
|
+
result = @handler.parse_token_text(text)
|
91
|
+
assert_equal(captcha_token, result['CaptchaToken'])
|
92
|
+
assert_equal(captcha_url, result['CaptchaUrl'])
|
93
|
+
assert_equal(error_str, result['Error'])
|
94
|
+
assert_equal(url_str, result['Url'])
|
95
|
+
assert_equal(['CaptchaToken', 'CaptchaUrl', 'Error', 'Url'],
|
96
|
+
result.keys.sort)
|
97
|
+
end
|
98
|
+
end
|
data/test/test_config.rb
CHANGED
@@ -0,0 +1,11 @@
|
|
1
|
+
---
|
2
|
+
# This is a test configuration file for Ads Common library.
|
3
|
+
:authentication:
|
4
|
+
:method: ClientLogin
|
5
|
+
:application_name: ruby_test_suit
|
6
|
+
:password: mySecretPassword
|
7
|
+
:email: root@example.com
|
8
|
+
:network_code: 1234567
|
9
|
+
:service:
|
10
|
+
:environment: sandbox
|
11
|
+
:use_ruby_names: false
|
data/test/test_savon_service.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: google-ads-common
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 1
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 6
|
9
|
-
-
|
10
|
-
version: 0.6.
|
9
|
+
- 3
|
10
|
+
version: 0.6.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Sergio Gomes
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2012-
|
19
|
+
date: 2012-03-13 00:00:00 +04:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
@@ -83,43 +83,44 @@ dependencies:
|
|
83
83
|
version: 0.4.5
|
84
84
|
type: :runtime
|
85
85
|
version_requirements: *id004
|
86
|
-
description:
|
87
|
-
email:
|
86
|
+
description: Essential utilities shared by all Ads Ruby client libraries
|
87
|
+
email:
|
88
|
+
- api.dklimkin@gmail.com
|
88
89
|
executables: []
|
89
90
|
|
90
91
|
extensions: []
|
91
92
|
|
92
|
-
extra_rdoc_files:
|
93
|
-
|
94
|
-
- COPYING
|
95
|
-
- ChangeLog
|
93
|
+
extra_rdoc_files: []
|
94
|
+
|
96
95
|
files:
|
97
|
-
- lib/ads_common/auth/client_login_handler.rb
|
98
|
-
- lib/ads_common/auth/base_handler.rb
|
99
|
-
- lib/ads_common/auth/oauth_handler.rb
|
100
|
-
- lib/ads_common/credential_handler.rb
|
101
|
-
- lib/ads_common/build/savon_generator.rb
|
102
|
-
- lib/ads_common/build/savon_registry_generator.rb
|
103
|
-
- lib/ads_common/build/savon_registry.rb
|
104
|
-
- lib/ads_common/build/savon_service_generator.rb
|
105
|
-
- lib/ads_common/build/savon_abstract_generator.rb
|
106
|
-
- lib/ads_common/api_config.rb
|
107
|
-
- lib/ads_common/config.rb
|
108
96
|
- lib/ads_common/api.rb
|
109
|
-
- lib/ads_common/
|
110
|
-
- lib/ads_common/
|
111
|
-
- lib/ads_common/savon_headers/oauth_header_handler.rb
|
112
|
-
- lib/ads_common/savon_headers/httpi_request_proxy.rb
|
97
|
+
- lib/ads_common/version.rb
|
98
|
+
- lib/ads_common/credential_handler.rb
|
113
99
|
- lib/ads_common/savon_service.rb
|
100
|
+
- lib/ads_common/api_config.rb
|
101
|
+
- lib/ads_common/auth/client_login_handler.rb
|
102
|
+
- lib/ads_common/auth/oauth_handler.rb
|
103
|
+
- lib/ads_common/auth/base_handler.rb
|
114
104
|
- lib/ads_common/http.rb
|
115
|
-
- lib/ads_common/parameters_validator.rb
|
116
105
|
- lib/ads_common/errors.rb
|
117
|
-
-
|
118
|
-
-
|
119
|
-
-
|
106
|
+
- lib/ads_common/parameters_validator.rb
|
107
|
+
- lib/ads_common/savon_headers/oauth_header_handler.rb
|
108
|
+
- lib/ads_common/savon_headers/base_header_handler.rb
|
109
|
+
- lib/ads_common/savon_headers/httpi_request_proxy.rb
|
110
|
+
- lib/ads_common/savon_headers/simple_header_handler.rb
|
111
|
+
- lib/ads_common/build/savon_abstract_generator.rb
|
112
|
+
- lib/ads_common/build/savon_service_generator.rb
|
113
|
+
- lib/ads_common/build/savon_registry.rb
|
114
|
+
- lib/ads_common/build/savon_registry_generator.rb
|
115
|
+
- lib/ads_common/build/savon_generator.rb
|
116
|
+
- lib/ads_common/config.rb
|
120
117
|
- test/test_savon_service.rb
|
121
|
-
-
|
118
|
+
- test/test_client_login_handler.rb
|
119
|
+
- test/test_parameters_validator.rb
|
120
|
+
- test/test_config.rb
|
121
|
+
- test/test_config.yml
|
122
122
|
- COPYING
|
123
|
+
- README
|
123
124
|
- ChangeLog
|
124
125
|
has_rdoc: true
|
125
126
|
homepage: http://code.google.com/p/google-api-ads-ruby/
|
@@ -144,18 +145,21 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
144
145
|
requirements:
|
145
146
|
- - ">="
|
146
147
|
- !ruby/object:Gem::Version
|
147
|
-
hash:
|
148
|
+
hash: 23
|
148
149
|
segments:
|
149
|
-
-
|
150
|
-
|
150
|
+
- 1
|
151
|
+
- 3
|
152
|
+
- 6
|
153
|
+
version: 1.3.6
|
151
154
|
requirements: []
|
152
155
|
|
153
|
-
rubyforge_project:
|
156
|
+
rubyforge_project: google-ads-common
|
154
157
|
rubygems_version: 1.3.7
|
155
158
|
signing_key:
|
156
159
|
specification_version: 3
|
157
|
-
summary: Common code for Google Ads APIs
|
160
|
+
summary: Common code for Google Ads APIs
|
158
161
|
test_files:
|
159
|
-
- test/test_config.rb
|
160
|
-
- test/test_parameters_validator.rb
|
161
162
|
- test/test_savon_service.rb
|
163
|
+
- test/test_client_login_handler.rb
|
164
|
+
- test/test_parameters_validator.rb
|
165
|
+
- test/test_config.rb
|
data/Rakefile
DELETED
@@ -1,77 +0,0 @@
|
|
1
|
-
# Encoding: utf-8
|
2
|
-
#
|
3
|
-
# Authors:: api.dklimkin@gmail.com (Danial Klimkin)
|
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
|
-
# Rakefile for the ads_common package.
|
21
|
-
|
22
|
-
require 'rubygems'
|
23
|
-
require 'rubygems/package_task'
|
24
|
-
require 'rake/testtask'
|
25
|
-
require 'rdoc/task'
|
26
|
-
require './lib/ads_common/api_config'
|
27
|
-
|
28
|
-
GEM_NAME = 'google-ads-common'
|
29
|
-
|
30
|
-
files = FileList['lib/**/*', 'Rakefile'].to_a
|
31
|
-
tests = FileList['test/**/test_*.rb']
|
32
|
-
docs = ['README', 'COPYING', 'ChangeLog']
|
33
|
-
extra_files = ['test/test_config.yml']
|
34
|
-
|
35
|
-
spec = Gem::Specification.new do |s|
|
36
|
-
s.platform = Gem::Platform::RUBY
|
37
|
-
s.name = GEM_NAME
|
38
|
-
s.version = AdsCommon::ApiConfig::ADS_COMMON_VERSION
|
39
|
-
s.summary = 'Common code for Google Ads APIs.'
|
40
|
-
s.description = ("%s provides essential utilities shared by all Ads Ruby " +
|
41
|
-
"client libraries.") % GEM_NAME
|
42
|
-
s.authors = ['Sergio Gomes', 'Danial Klimkin']
|
43
|
-
s.email = 'api.dklimkin@gmail.com'
|
44
|
-
s.homepage = 'http://code.google.com/p/google-api-ads-ruby/'
|
45
|
-
s.require_path = 'lib'
|
46
|
-
s.files = files
|
47
|
-
s.test_files = tests
|
48
|
-
s.has_rdoc = true
|
49
|
-
s.extra_rdoc_files = docs
|
50
|
-
s.add_dependency('savon', '~> 0.9.7')
|
51
|
-
s.add_dependency('httpclient', '~> 2.2.3')
|
52
|
-
s.add_dependency('httpi', '~> 0.9.3')
|
53
|
-
s.add_dependency('oauth', '~> 0.4.5')
|
54
|
-
end
|
55
|
-
|
56
|
-
desc 'Default target - build'
|
57
|
-
task :default => [:package]
|
58
|
-
|
59
|
-
# Create a task that will package the Common library into a gem file.
|
60
|
-
Gem::PackageTask.new(spec) do |pkg|
|
61
|
-
pkg.need_tar = true
|
62
|
-
pkg.package_files.include(extra_files)
|
63
|
-
end
|
64
|
-
|
65
|
-
# Create a task to build the RDOC documentation tree.
|
66
|
-
RDoc::Task.new do |rdoc|
|
67
|
-
rdoc.rdoc_dir = 'doc'
|
68
|
-
rdoc.title = "%s -- Common code for Google Ads APIs" % GEM_NAME
|
69
|
-
rdoc.main = 'README'
|
70
|
-
rdoc.rdoc_files.include(docs)
|
71
|
-
rdoc.rdoc_files.include(files)
|
72
|
-
end
|
73
|
-
|
74
|
-
# Create a task to perform the unit testing.
|
75
|
-
Rake::TestTask.new do |t|
|
76
|
-
t.test_files = tests
|
77
|
-
end
|