google-ads-common 0.6.0 → 0.6.1
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/README +3 -2
- data/Rakefile +2 -2
- data/lib/ads_common/api_config.rb +1 -1
- data/lib/ads_common/auth/oauth_handler.rb +5 -2
- data/lib/ads_common/config.rb +1 -0
- data/lib/ads_common/credential_handler.rb +7 -0
- data/lib/ads_common/parameters_validator.rb +1 -1
- data/lib/ads_common/savon_headers/base_header_handler.rb +5 -2
- data/lib/ads_common/savon_service.rb +9 -1
- data/test/test_parameters_validator.rb +29 -0
- metadata +16 -9
data/ChangeLog
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
0.6.1:
|
2
|
+
- Support for GZip compression.
|
3
|
+
- Added logging of the response HTTP headers.
|
4
|
+
- Updated minimal requirement for httpclient (~>2.2.3) and httpi (~>0.9.3).
|
5
|
+
|
1
6
|
0.6.0:
|
2
7
|
- Better namespace handling in complex cases.
|
3
8
|
- Large refactoring on parameter processing code.
|
data/README
CHANGED
@@ -18,8 +18,9 @@ Install it using the gem install command.
|
|
18
18
|
|
19
19
|
The following gem libraries are required:
|
20
20
|
- savon v0.9.7;
|
21
|
-
- httpi v0.9.
|
22
|
-
- httpclient v2.
|
21
|
+
- httpi v0.9.3 or greater;
|
22
|
+
- httpclient v2.2.3 or greater.
|
23
|
+
- psych-1.2.2 or greater (for ruby-1.9.2 and later only).
|
23
24
|
|
24
25
|
= Docs for Developers
|
25
26
|
|
data/Rakefile
CHANGED
@@ -48,8 +48,8 @@ spec = Gem::Specification.new do |s|
|
|
48
48
|
s.has_rdoc = true
|
49
49
|
s.extra_rdoc_files = docs
|
50
50
|
s.add_dependency('savon', '= 0.9.7')
|
51
|
-
s.add_dependency('httpclient', '
|
52
|
-
s.add_dependency('httpi', '~> 0.9.
|
51
|
+
s.add_dependency('httpclient', '~> 2.2.3')
|
52
|
+
s.add_dependency('httpi', '~> 0.9.3')
|
53
53
|
s.add_dependency('oauth', '~> 0.4.5')
|
54
54
|
end
|
55
55
|
|
@@ -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.6.
|
29
|
+
ADS_COMMON_VERSION = '0.6.1'
|
30
30
|
|
31
31
|
# Get the available API versions.
|
32
32
|
#
|
@@ -117,8 +117,11 @@ module AdsCommon
|
|
117
117
|
# - Authentication string
|
118
118
|
#
|
119
119
|
def generate_oauth_parameters_string(credentials, request)
|
120
|
-
oauth_params = {
|
121
|
-
|
120
|
+
oauth_params = {
|
121
|
+
# get_token() ensures @consumer is initialized.
|
122
|
+
:token => get_token(credentials),
|
123
|
+
:consumer => @consumer
|
124
|
+
}
|
122
125
|
oauth_helper = OAuth::Client::Helper.new(request, oauth_params)
|
123
126
|
return oauth_helper.header
|
124
127
|
end
|
data/lib/ads_common/config.rb
CHANGED
@@ -58,6 +58,13 @@ module AdsCommon
|
|
58
58
|
@auth_handler.property_changed(credential, value) if @auth_handler
|
59
59
|
end
|
60
60
|
|
61
|
+
# Returns current configuration.
|
62
|
+
# TODO: we need better way to access config widely,
|
63
|
+
# remove after refactoring.
|
64
|
+
def get_config()
|
65
|
+
return @config
|
66
|
+
end
|
67
|
+
|
61
68
|
private
|
62
69
|
|
63
70
|
# Loads the credentials from the config data.
|
@@ -103,7 +103,7 @@ module AdsCommon
|
|
103
103
|
# An array passed when an object is expected.
|
104
104
|
if (field[:max_occurs] == 1) and arg.kind_of?(Array)
|
105
105
|
raise AdsCommon::Errors::TypeMismatchError.new(
|
106
|
-
field[:type], Array)
|
106
|
+
field[:type], Array, field[:name])
|
107
107
|
end
|
108
108
|
end
|
109
109
|
|
@@ -43,6 +43,7 @@ module AdsCommon
|
|
43
43
|
@element_name = element_name
|
44
44
|
@namespace = namespace
|
45
45
|
@version = version
|
46
|
+
@config = credential_handler.get_config
|
46
47
|
Savon.configure {|config| config.raise_errors = false}
|
47
48
|
end
|
48
49
|
|
@@ -88,9 +89,11 @@ module AdsCommon
|
|
88
89
|
app_name = credentials[:userAgent] || credentials[:useragent]
|
89
90
|
# We don't know the library version here. A breaking change needs to be
|
90
91
|
# introduced. This is scheduled for 0.7.0, using Common version for now.
|
91
|
-
lib_version = '0.6.
|
92
|
+
lib_version = '0.6.1'
|
92
93
|
soap_user_agent = "Common-Ruby-%s; %s" % [lib_version, app_name]
|
93
|
-
|
94
|
+
user_agent = "Savon/%s (%s)" % [Savon::Version, soap_user_agent]
|
95
|
+
user_agent += ' (gzip)' if @config.read('connection.enable_gzip', false)
|
96
|
+
return user_agent
|
94
97
|
end
|
95
98
|
end
|
96
99
|
end
|
@@ -69,11 +69,13 @@ module AdsCommon
|
|
69
69
|
# Creates and sets up Savon client.
|
70
70
|
def create_savon_client(endpoint, namespace)
|
71
71
|
proxy = @api.config.read('connection.proxy')
|
72
|
+
enable_gzip = @api.config.read('connection.enable_gzip', false)
|
72
73
|
client = Savon::Client.new do |wsdl, http|
|
73
74
|
wsdl.endpoint = endpoint
|
74
75
|
wsdl.namespace = namespace
|
75
|
-
http.proxy = proxy if !proxy.nil?
|
76
76
|
http.read_timeout = HTTP_READ_TIMEOUT
|
77
|
+
http.proxy = proxy if proxy
|
78
|
+
http.gzip if enable_gzip
|
77
79
|
end
|
78
80
|
return client
|
79
81
|
end
|
@@ -84,10 +86,16 @@ module AdsCommon
|
|
84
86
|
args = validator.validate_args(action_name, args)
|
85
87
|
response = execute_soap_request(
|
86
88
|
action_name.to_sym, args, validator.extra_namespaces)
|
89
|
+
log_headers(response.http.headers)
|
87
90
|
handle_errors(response)
|
88
91
|
return extract_result(response, action_name, &block)
|
89
92
|
end
|
90
93
|
|
94
|
+
# Logs response headers.
|
95
|
+
def log_headers(headers)
|
96
|
+
@api.logger.debug(headers.map {|k, v| [k, v].join(': ')}.join(', '))
|
97
|
+
end
|
98
|
+
|
91
99
|
# Executes the SOAP request with original SOAP name.
|
92
100
|
def execute_soap_request(action, args, extra_namespaces)
|
93
101
|
original_action_name =
|
@@ -22,11 +22,13 @@
|
|
22
22
|
require 'rubygems'
|
23
23
|
require 'test/unit'
|
24
24
|
|
25
|
+
require 'ads_common/errors'
|
25
26
|
require 'ads_common/parameters_validator'
|
26
27
|
|
27
28
|
module AdsCommon
|
28
29
|
class ParametersValidator
|
29
30
|
public :deep_copy, :add_attribute, :array_from_named_list
|
31
|
+
public :check_required_argument_present
|
30
32
|
end
|
31
33
|
end
|
32
34
|
|
@@ -100,4 +102,31 @@ class TestParametersValidator < Test::Unit::TestCase
|
|
100
102
|
result = @validator.array_from_named_list(src)
|
101
103
|
assert_equal(['foo', 'bar', 'ipsum'], result)
|
102
104
|
end
|
105
|
+
|
106
|
+
def test_check_required_argument_present
|
107
|
+
field1 = {:min_occurs => 1, :max_occurs => 1,
|
108
|
+
:name => 'field1', :type => 'type1'}
|
109
|
+
assert_raises(AdsCommon::Errors::MissingPropertyError) do
|
110
|
+
@validator.check_required_argument_present(nil, field1)
|
111
|
+
end
|
112
|
+
assert_raises(AdsCommon::Errors::TypeMismatchError) do
|
113
|
+
@validator.check_required_argument_present([], field1)
|
114
|
+
end
|
115
|
+
assert_nothing_raised do
|
116
|
+
@validator.check_required_argument_present({}, field1)
|
117
|
+
@validator.check_required_argument_present('foobar', field1)
|
118
|
+
@validator.check_required_argument_present(42, field1)
|
119
|
+
end
|
120
|
+
|
121
|
+
field2 = {:min_occurs => 0, :max_occurs => :unbounded,
|
122
|
+
:name => 'field2', :type => 'type2'}
|
123
|
+
assert_raises(AdsCommon::Errors::TypeMismatchError) do
|
124
|
+
@validator.check_required_argument_present({}, field2)
|
125
|
+
end
|
126
|
+
assert_nothing_raised do
|
127
|
+
@validator.check_required_argument_present(nil, field2)
|
128
|
+
@validator.check_required_argument_present([], field2)
|
129
|
+
@validator.check_required_argument_present([field1, field2], field2)
|
130
|
+
end
|
131
|
+
end
|
103
132
|
end
|
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: google-ads-common
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 5
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 0
|
7
8
|
- 6
|
8
|
-
-
|
9
|
-
version: 0.6.
|
9
|
+
- 1
|
10
|
+
version: 0.6.1
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- Sergio Gomes
|
@@ -15,7 +16,7 @@ autorequire:
|
|
15
16
|
bindir: bin
|
16
17
|
cert_chain: []
|
17
18
|
|
18
|
-
date: 2011-12-
|
19
|
+
date: 2011-12-23 00:00:00 +04:00
|
19
20
|
default_executable:
|
20
21
|
dependencies:
|
21
22
|
- !ruby/object:Gem::Dependency
|
@@ -26,6 +27,7 @@ dependencies:
|
|
26
27
|
requirements:
|
27
28
|
- - "="
|
28
29
|
- !ruby/object:Gem::Version
|
30
|
+
hash: 53
|
29
31
|
segments:
|
30
32
|
- 0
|
31
33
|
- 9
|
@@ -39,13 +41,14 @@ dependencies:
|
|
39
41
|
requirement: &id002 !ruby/object:Gem::Requirement
|
40
42
|
none: false
|
41
43
|
requirements:
|
42
|
-
- -
|
44
|
+
- - ~>
|
43
45
|
- !ruby/object:Gem::Version
|
46
|
+
hash: 1
|
44
47
|
segments:
|
45
48
|
- 2
|
46
|
-
-
|
47
|
-
-
|
48
|
-
version: 2.
|
49
|
+
- 2
|
50
|
+
- 3
|
51
|
+
version: 2.2.3
|
49
52
|
type: :runtime
|
50
53
|
version_requirements: *id002
|
51
54
|
- !ruby/object:Gem::Dependency
|
@@ -56,11 +59,12 @@ dependencies:
|
|
56
59
|
requirements:
|
57
60
|
- - ~>
|
58
61
|
- !ruby/object:Gem::Version
|
62
|
+
hash: 61
|
59
63
|
segments:
|
60
64
|
- 0
|
61
65
|
- 9
|
62
|
-
-
|
63
|
-
version: 0.9.
|
66
|
+
- 3
|
67
|
+
version: 0.9.3
|
64
68
|
type: :runtime
|
65
69
|
version_requirements: *id003
|
66
70
|
- !ruby/object:Gem::Dependency
|
@@ -71,6 +75,7 @@ dependencies:
|
|
71
75
|
requirements:
|
72
76
|
- - ~>
|
73
77
|
- !ruby/object:Gem::Version
|
78
|
+
hash: 5
|
74
79
|
segments:
|
75
80
|
- 0
|
76
81
|
- 4
|
@@ -130,6 +135,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
130
135
|
requirements:
|
131
136
|
- - ">="
|
132
137
|
- !ruby/object:Gem::Version
|
138
|
+
hash: 3
|
133
139
|
segments:
|
134
140
|
- 0
|
135
141
|
version: "0"
|
@@ -138,6 +144,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
138
144
|
requirements:
|
139
145
|
- - ">="
|
140
146
|
- !ruby/object:Gem::Version
|
147
|
+
hash: 3
|
141
148
|
segments:
|
142
149
|
- 0
|
143
150
|
version: "0"
|