adwords4r 0.6 → 0.7

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.
@@ -0,0 +1,263 @@
1
+ module AdWords
2
+ require 'xsd/qname'
3
+
4
+ # {https://adwords.google.com/api/adwords/v6}getKeywordVariations
5
+ class GetKeywordVariations
6
+ @@schema_type = "getKeywordVariations"
7
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
8
+ @@schema_qualified = "true"
9
+ @@schema_element = [
10
+ ["seedKeywords", "SeedKeyword[]"],
11
+ ["useSynonyms", "SOAP::SOAPBoolean"],
12
+ ["languages", "SOAP::SOAPString[]"],
13
+ ["countries", "SOAP::SOAPString[]"]
14
+ ]
15
+
16
+ attr_accessor :seedKeywords
17
+ attr_accessor :useSynonyms
18
+ attr_accessor :languages
19
+ attr_accessor :countries
20
+
21
+ def initialize(seedKeywords = [], useSynonyms = nil, languages = [], countries = [])
22
+ @seedKeywords = seedKeywords
23
+ @useSynonyms = useSynonyms
24
+ @languages = languages
25
+ @countries = countries
26
+ end
27
+ end
28
+
29
+ # {https://adwords.google.com/api/adwords/v6}getKeywordVariationsResponse
30
+ class GetKeywordVariationsResponse
31
+ @@schema_type = "getKeywordVariationsResponse"
32
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
33
+ @@schema_qualified = "true"
34
+ @@schema_element = [
35
+ ["getKeywordVariationsReturn", "KeywordVariations"]
36
+ ]
37
+
38
+ attr_accessor :getKeywordVariationsReturn
39
+
40
+ def initialize(getKeywordVariationsReturn = nil)
41
+ @getKeywordVariationsReturn = getKeywordVariationsReturn
42
+ end
43
+ end
44
+
45
+ # {https://adwords.google.com/api/adwords/v6}getKeywordsFromSite
46
+ class GetKeywordsFromSite
47
+ @@schema_type = "getKeywordsFromSite"
48
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
49
+ @@schema_qualified = "true"
50
+ @@schema_element = [
51
+ ["url", "SOAP::SOAPString"],
52
+ ["includeLinkedPages", "SOAP::SOAPBoolean"],
53
+ ["languages", "SOAP::SOAPString[]"],
54
+ ["countries", "SOAP::SOAPString[]"]
55
+ ]
56
+
57
+ attr_accessor :url
58
+ attr_accessor :includeLinkedPages
59
+ attr_accessor :languages
60
+ attr_accessor :countries
61
+
62
+ def initialize(url = nil, includeLinkedPages = nil, languages = [], countries = [])
63
+ @url = url
64
+ @includeLinkedPages = includeLinkedPages
65
+ @languages = languages
66
+ @countries = countries
67
+ end
68
+ end
69
+
70
+ # {https://adwords.google.com/api/adwords/v6}getKeywordsFromSiteResponse
71
+ class GetKeywordsFromSiteResponse
72
+ @@schema_type = "getKeywordsFromSiteResponse"
73
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
74
+ @@schema_qualified = "true"
75
+ @@schema_element = [
76
+ ["getKeywordsFromSiteReturn", "SiteKeywordGroups"]
77
+ ]
78
+
79
+ attr_accessor :getKeywordsFromSiteReturn
80
+
81
+ def initialize(getKeywordsFromSiteReturn = nil)
82
+ @getKeywordsFromSiteReturn = getKeywordsFromSiteReturn
83
+ end
84
+ end
85
+
86
+ # {https://adwords.google.com/api/adwords/v6}ApiException
87
+ class ApiException
88
+ @@schema_type = "ApiException"
89
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
90
+ @@schema_element = [
91
+ ["code", "SOAP::SOAPInt"],
92
+ ["internal", "SOAP::SOAPBoolean"],
93
+ ["message", "SOAP::SOAPString"],
94
+ ["trigger", "SOAP::SOAPString"],
95
+ ["errors", "ApiError[]"]
96
+ ]
97
+
98
+ attr_accessor :code
99
+ attr_accessor :internal
100
+ attr_accessor :message
101
+ attr_accessor :trigger
102
+ attr_accessor :errors
103
+
104
+ def initialize(code = nil, internal = nil, message = nil, trigger = nil, errors = [])
105
+ @code = code
106
+ @internal = internal
107
+ @message = message
108
+ @trigger = trigger
109
+ @errors = errors
110
+ end
111
+ end
112
+
113
+ # {https://adwords.google.com/api/adwords/v6}ApiError
114
+ class ApiError
115
+ @@schema_type = "ApiError"
116
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
117
+ @@schema_element = [
118
+ ["index", "SOAP::SOAPInt"],
119
+ ["field", "SOAP::SOAPString"],
120
+ ["textIndex", "SOAP::SOAPInt"],
121
+ ["textLength", "SOAP::SOAPInt"],
122
+ ["trigger", "SOAP::SOAPString"],
123
+ ["code", "SOAP::SOAPInt"],
124
+ ["isExemptable", "SOAP::SOAPBoolean"],
125
+ ["detail", "SOAP::SOAPString"]
126
+ ]
127
+
128
+ attr_accessor :index
129
+ attr_accessor :field
130
+ attr_accessor :textIndex
131
+ attr_accessor :textLength
132
+ attr_accessor :trigger
133
+ attr_accessor :code
134
+ attr_accessor :isExemptable
135
+ attr_accessor :detail
136
+
137
+ def initialize(index = nil, field = nil, textIndex = nil, textLength = nil, trigger = nil, code = nil, isExemptable = nil, detail = nil)
138
+ @index = index
139
+ @field = field
140
+ @textIndex = textIndex
141
+ @textLength = textLength
142
+ @trigger = trigger
143
+ @code = code
144
+ @isExemptable = isExemptable
145
+ @detail = detail
146
+ end
147
+ end
148
+
149
+ # {https://adwords.google.com/api/adwords/v6}SeedKeyword
150
+ class SeedKeyword
151
+ @@schema_type = "SeedKeyword"
152
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
153
+ @@schema_element = [
154
+ ["negative", "SOAP::SOAPBoolean"],
155
+ ["text", "SOAP::SOAPString"],
156
+ ["type", "SOAP::SOAPString"]
157
+ ]
158
+
159
+ attr_accessor :negative
160
+ attr_accessor :text
161
+ attr_accessor :type
162
+
163
+ def initialize(negative = nil, text = nil, type = nil)
164
+ @negative = negative
165
+ @text = text
166
+ @type = type
167
+ end
168
+ end
169
+
170
+ # {https://adwords.google.com/api/adwords/v6}KeywordVariations
171
+ class KeywordVariations
172
+ @@schema_type = "KeywordVariations"
173
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
174
+ @@schema_element = [
175
+ ["additionalToConsider", "KeywordVariation[]"],
176
+ ["moreSpecific", "KeywordVariation[]"]
177
+ ]
178
+
179
+ attr_accessor :additionalToConsider
180
+ attr_accessor :moreSpecific
181
+
182
+ def initialize(additionalToConsider = [], moreSpecific = [])
183
+ @additionalToConsider = additionalToConsider
184
+ @moreSpecific = moreSpecific
185
+ end
186
+ end
187
+
188
+ # {https://adwords.google.com/api/adwords/v6}KeywordVariation
189
+ class KeywordVariation
190
+ @@schema_type = "KeywordVariation"
191
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
192
+ @@schema_element = [
193
+ ["advertiserCompetitionScale", "SOAP::SOAPInt"],
194
+ ["language", "SOAP::SOAPString"],
195
+ ["searchVolumeScale", "SOAP::SOAPInt"],
196
+ ["text", "SOAP::SOAPString"]
197
+ ]
198
+
199
+ attr_accessor :advertiserCompetitionScale
200
+ attr_accessor :language
201
+ attr_accessor :searchVolumeScale
202
+ attr_accessor :text
203
+
204
+ def initialize(advertiserCompetitionScale = nil, language = nil, searchVolumeScale = nil, text = nil)
205
+ @advertiserCompetitionScale = advertiserCompetitionScale
206
+ @language = language
207
+ @searchVolumeScale = searchVolumeScale
208
+ @text = text
209
+ end
210
+ end
211
+
212
+ # {https://adwords.google.com/api/adwords/v6}SiteKeywordGroups
213
+ class SiteKeywordGroups
214
+ @@schema_type = "SiteKeywordGroups"
215
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
216
+ @@schema_element = [
217
+ ["groups", "SOAP::SOAPString[]"],
218
+ ["keywords", "SiteKeyword[]"]
219
+ ]
220
+
221
+ attr_accessor :groups
222
+ attr_accessor :keywords
223
+
224
+ def initialize(groups = [], keywords = [])
225
+ @groups = groups
226
+ @keywords = keywords
227
+ end
228
+ end
229
+
230
+ # {https://adwords.google.com/api/adwords/v6}SiteKeyword
231
+ class SiteKeyword
232
+ @@schema_type = "SiteKeyword"
233
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
234
+ @@schema_element = [
235
+ ["advertiserCompetitionScale", "SOAP::SOAPInt"],
236
+ ["groupId", "SOAP::SOAPInt"],
237
+ ["searchVolumeScale", "SOAP::SOAPInt"],
238
+ ["text", "SOAP::SOAPString"]
239
+ ]
240
+
241
+ attr_accessor :advertiserCompetitionScale
242
+ attr_accessor :groupId
243
+ attr_accessor :searchVolumeScale
244
+ attr_accessor :text
245
+
246
+ def initialize(advertiserCompetitionScale = nil, groupId = nil, searchVolumeScale = nil, text = nil)
247
+ @advertiserCompetitionScale = advertiserCompetitionScale
248
+ @groupId = groupId
249
+ @searchVolumeScale = searchVolumeScale
250
+ @text = text
251
+ end
252
+ end
253
+
254
+ # {https://adwords.google.com/api/adwords/v6}KeywordType
255
+ class KeywordType < ::String
256
+ @@schema_type = "KeywordType"
257
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
258
+
259
+ Broad = KeywordType.new("Broad")
260
+ Exact = KeywordType.new("Exact")
261
+ Phrase = KeywordType.new("Phrase")
262
+ end
263
+ end
@@ -0,0 +1,55 @@
1
+ module AdWords
2
+ require 'adwords4r/v6/KeywordToolService'
3
+
4
+ require 'soap/rpc/driver'
5
+
6
+ class KeywordToolInterface < ::SOAP::RPC::Driver
7
+ DefaultEndpointUrl = "https://adwords.google.com/api/adwords/v6/KeywordToolService"
8
+ MappingRegistry = ::SOAP::Mapping::Registry.new
9
+
10
+ Methods = [
11
+ [ "",
12
+ "getKeywordVariations",
13
+ [ ["in", "parameters", ["::SOAP::SOAPElement", "https://adwords.google.com/api/adwords/v6", "getKeywordVariations"], true],
14
+ ["out", "paramteters", ["::SOAP::SOAPElement", "https://adwords.google.com/api/adwords/v6", "getKeywordVariationsResponse"], true] ],
15
+ { :request_style => :document, :request_use => :literal,
16
+ :response_style => :document, :response_use => :literal }
17
+ ],
18
+ [ "",
19
+ "getKeywordsFromSite",
20
+ [ ["in", "parameters", ["::SOAP::SOAPElement", "https://adwords.google.com/api/adwords/v6", "getKeywordsFromSite"], true],
21
+ ["out", "parameters", ["::SOAP::SOAPElement", "https://adwords.google.com/api/adwords/v6", "getKeywordsFromSiteResponse"], true] ],
22
+ { :request_style => :document, :request_use => :literal,
23
+ :response_style => :document, :response_use => :literal }
24
+ ]
25
+ ]
26
+
27
+ def initialize(endpoint_url = nil)
28
+ endpoint_url ||= DefaultEndpointUrl
29
+ super(endpoint_url, nil)
30
+ self.mapping_registry = MappingRegistry
31
+ init_methods
32
+ end
33
+
34
+ private
35
+
36
+ def init_methods
37
+ Methods.each do |definitions|
38
+ opt = definitions.last
39
+ if opt[:request_style] == :document
40
+ add_document_operation(*definitions)
41
+ else
42
+ add_rpc_operation(*definitions)
43
+ qname = definitions[0]
44
+ name = definitions[2]
45
+ if qname.name != name and qname.name.capitalize == name.capitalize
46
+ ::SOAP::Mapping.define_singleton_method(self, qname.name) do |*arg|
47
+ __send__(name, *arg)
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+
55
+ end
@@ -0,0 +1,789 @@
1
+ module AdWords
2
+ require 'xsd/qname'
3
+
4
+ # {https://adwords.google.com/api/adwords/v6}scheduleReportJob
5
+ class ScheduleReportJob
6
+ @@schema_type = "scheduleReportJob"
7
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
8
+ @@schema_qualified = "true"
9
+ @@schema_element = [
10
+ ["job", "ReportJob"]
11
+ ]
12
+
13
+ attr_accessor :job
14
+
15
+ def initialize(job = nil)
16
+ @job = job
17
+ end
18
+ end
19
+
20
+ # {https://adwords.google.com/api/adwords/v6}scheduleReportJobResponse
21
+ class ScheduleReportJobResponse
22
+ @@schema_type = "scheduleReportJobResponse"
23
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
24
+ @@schema_qualified = "true"
25
+ @@schema_element = [
26
+ ["scheduleReportJobReturn", "SOAP::SOAPLong"]
27
+ ]
28
+
29
+ attr_accessor :scheduleReportJobReturn
30
+
31
+ def initialize(scheduleReportJobReturn = nil)
32
+ @scheduleReportJobReturn = scheduleReportJobReturn
33
+ end
34
+ end
35
+
36
+ # {https://adwords.google.com/api/adwords/v6}getReportJobStatus
37
+ class GetReportJobStatus
38
+ @@schema_type = "getReportJobStatus"
39
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
40
+ @@schema_qualified = "true"
41
+ @@schema_element = [
42
+ ["reportJobId", "SOAP::SOAPLong"]
43
+ ]
44
+
45
+ attr_accessor :reportJobId
46
+
47
+ def initialize(reportJobId = nil)
48
+ @reportJobId = reportJobId
49
+ end
50
+ end
51
+
52
+ # {https://adwords.google.com/api/adwords/v6}getReportJobStatusResponse
53
+ class GetReportJobStatusResponse
54
+ @@schema_type = "getReportJobStatusResponse"
55
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
56
+ @@schema_qualified = "true"
57
+ @@schema_element = [
58
+ ["getReportJobStatusReturn", "SOAP::SOAPString"]
59
+ ]
60
+
61
+ attr_accessor :getReportJobStatusReturn
62
+
63
+ def initialize(getReportJobStatusReturn = nil)
64
+ @getReportJobStatusReturn = getReportJobStatusReturn
65
+ end
66
+ end
67
+
68
+ # {https://adwords.google.com/api/adwords/v6}getReportDownloadUrl
69
+ class GetReportDownloadUrl
70
+ @@schema_type = "getReportDownloadUrl"
71
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
72
+ @@schema_qualified = "true"
73
+ @@schema_element = [
74
+ ["reportJobId", "SOAP::SOAPLong"]
75
+ ]
76
+
77
+ attr_accessor :reportJobId
78
+
79
+ def initialize(reportJobId = nil)
80
+ @reportJobId = reportJobId
81
+ end
82
+ end
83
+
84
+ # {https://adwords.google.com/api/adwords/v6}getReportDownloadUrlResponse
85
+ class GetReportDownloadUrlResponse
86
+ @@schema_type = "getReportDownloadUrlResponse"
87
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
88
+ @@schema_qualified = "true"
89
+ @@schema_element = [
90
+ ["getReportDownloadUrlReturn", "SOAP::SOAPString"]
91
+ ]
92
+
93
+ attr_accessor :getReportDownloadUrlReturn
94
+
95
+ def initialize(getReportDownloadUrlReturn = nil)
96
+ @getReportDownloadUrlReturn = getReportDownloadUrlReturn
97
+ end
98
+ end
99
+
100
+ # {https://adwords.google.com/api/adwords/v6}getGzipReportDownloadUrl
101
+ class GetGzipReportDownloadUrl
102
+ @@schema_type = "getGzipReportDownloadUrl"
103
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
104
+ @@schema_qualified = "true"
105
+ @@schema_element = [
106
+ ["reportJobId", "SOAP::SOAPLong"]
107
+ ]
108
+
109
+ attr_accessor :reportJobId
110
+
111
+ def initialize(reportJobId = nil)
112
+ @reportJobId = reportJobId
113
+ end
114
+ end
115
+
116
+ # {https://adwords.google.com/api/adwords/v6}getGzipReportDownloadUrlResponse
117
+ class GetGzipReportDownloadUrlResponse
118
+ @@schema_type = "getGzipReportDownloadUrlResponse"
119
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
120
+ @@schema_qualified = "true"
121
+ @@schema_element = [
122
+ ["getGzipReportDownloadUrlReturn", "SOAP::SOAPString"]
123
+ ]
124
+
125
+ attr_accessor :getGzipReportDownloadUrlReturn
126
+
127
+ def initialize(getGzipReportDownloadUrlReturn = nil)
128
+ @getGzipReportDownloadUrlReturn = getGzipReportDownloadUrlReturn
129
+ end
130
+ end
131
+
132
+ # {https://adwords.google.com/api/adwords/v6}getAllJobs
133
+ class GetAllJobs
134
+ @@schema_type = "getAllJobs"
135
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
136
+ @@schema_qualified = "true"
137
+ @@schema_element = []
138
+
139
+ def initialize
140
+ end
141
+ end
142
+
143
+ # {https://adwords.google.com/api/adwords/v6}getAllJobsResponse
144
+ class GetAllJobsResponse < ::Array
145
+ @@schema_element = [
146
+ ["getAllJobsReturn", ["ReportJob[]", XSD::QName.new("https://adwords.google.com/api/adwords/v6", "getAllJobsReturn")]]
147
+ ]
148
+ end
149
+
150
+ # {https://adwords.google.com/api/adwords/v6}deleteReport
151
+ class DeleteReport
152
+ @@schema_type = "deleteReport"
153
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
154
+ @@schema_qualified = "true"
155
+ @@schema_element = [
156
+ ["reportJobId", "SOAP::SOAPLong"]
157
+ ]
158
+
159
+ attr_accessor :reportJobId
160
+
161
+ def initialize(reportJobId = nil)
162
+ @reportJobId = reportJobId
163
+ end
164
+ end
165
+
166
+ # {https://adwords.google.com/api/adwords/v6}deleteReportResponse
167
+ class DeleteReportResponse
168
+ @@schema_type = "deleteReportResponse"
169
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
170
+ @@schema_qualified = "true"
171
+ @@schema_element = []
172
+
173
+ def initialize
174
+ end
175
+ end
176
+
177
+ # {https://adwords.google.com/api/adwords/v6}ApiException
178
+ class ApiException
179
+ @@schema_type = "ApiException"
180
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
181
+ @@schema_element = [
182
+ ["code", "SOAP::SOAPInt"],
183
+ ["internal", "SOAP::SOAPBoolean"],
184
+ ["message", "SOAP::SOAPString"],
185
+ ["trigger", "SOAP::SOAPString"],
186
+ ["errors", "ApiError[]"]
187
+ ]
188
+
189
+ attr_accessor :code
190
+ attr_accessor :internal
191
+ attr_accessor :message
192
+ attr_accessor :trigger
193
+ attr_accessor :errors
194
+
195
+ def initialize(code = nil, internal = nil, message = nil, trigger = nil, errors = [])
196
+ @code = code
197
+ @internal = internal
198
+ @message = message
199
+ @trigger = trigger
200
+ @errors = errors
201
+ end
202
+ end
203
+
204
+ # {https://adwords.google.com/api/adwords/v6}ApiError
205
+ class ApiError
206
+ @@schema_type = "ApiError"
207
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
208
+ @@schema_element = [
209
+ ["index", "SOAP::SOAPInt"],
210
+ ["field", "SOAP::SOAPString"],
211
+ ["textIndex", "SOAP::SOAPInt"],
212
+ ["textLength", "SOAP::SOAPInt"],
213
+ ["trigger", "SOAP::SOAPString"],
214
+ ["code", "SOAP::SOAPInt"],
215
+ ["isExemptable", "SOAP::SOAPBoolean"],
216
+ ["detail", "SOAP::SOAPString"]
217
+ ]
218
+
219
+ attr_accessor :index
220
+ attr_accessor :field
221
+ attr_accessor :textIndex
222
+ attr_accessor :textLength
223
+ attr_accessor :trigger
224
+ attr_accessor :code
225
+ attr_accessor :isExemptable
226
+ attr_accessor :detail
227
+
228
+ def initialize(index = nil, field = nil, textIndex = nil, textLength = nil, trigger = nil, code = nil, isExemptable = nil, detail = nil)
229
+ @index = index
230
+ @field = field
231
+ @textIndex = textIndex
232
+ @textLength = textLength
233
+ @trigger = trigger
234
+ @code = code
235
+ @isExemptable = isExemptable
236
+ @detail = detail
237
+ end
238
+ end
239
+
240
+ # {https://adwords.google.com/api/adwords/v6}ReportJob
241
+ class ReportJob
242
+ @@schema_type = "ReportJob"
243
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
244
+ @@schema_element = [
245
+ ["aggregationType", "SOAP::SOAPString"],
246
+ ["clientEmails", "SOAP::SOAPString[]"],
247
+ ["crossClient", "SOAP::SOAPBoolean"],
248
+ ["endDay", "SOAP::SOAPDate"],
249
+ ["id", "SOAP::SOAPLong"],
250
+ ["name", "SOAP::SOAPString"],
251
+ ["startDay", "SOAP::SOAPDate"],
252
+ ["status", "SOAP::SOAPString"]
253
+ ]
254
+
255
+ attr_accessor :aggregationType
256
+ attr_accessor :clientEmails
257
+ attr_accessor :crossClient
258
+ attr_accessor :endDay
259
+ attr_accessor :id
260
+ attr_accessor :name
261
+ attr_accessor :startDay
262
+ attr_accessor :status
263
+
264
+ def initialize(aggregationType = nil, clientEmails = [], crossClient = nil, endDay = nil, id = nil, name = nil, startDay = nil, status = nil)
265
+ @aggregationType = aggregationType
266
+ @clientEmails = clientEmails
267
+ @crossClient = crossClient
268
+ @endDay = endDay
269
+ @id = id
270
+ @name = name
271
+ @startDay = startDay
272
+ @status = status
273
+ end
274
+ end
275
+
276
+ # {https://adwords.google.com/api/adwords/v6}KeywordReportJob
277
+ class KeywordReportJob
278
+ @@schema_type = "KeywordReportJob"
279
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
280
+ @@schema_element = [
281
+ ["aggregationType", "SOAP::SOAPString"],
282
+ ["clientEmails", "SOAP::SOAPString[]"],
283
+ ["crossClient", "SOAP::SOAPBoolean"],
284
+ ["endDay", "SOAP::SOAPDate"],
285
+ ["id", "SOAP::SOAPLong"],
286
+ ["name", "SOAP::SOAPString"],
287
+ ["startDay", "SOAP::SOAPDate"],
288
+ ["status", "SOAP::SOAPString"],
289
+ ["adWordsType", "SOAP::SOAPString"],
290
+ ["campaigns", "SOAP::SOAPInt[]"],
291
+ ["keywordStatuses", "SOAP::SOAPString[]"],
292
+ ["keywordType", "SOAP::SOAPString"],
293
+ ["includeZeroImpression", "SOAP::SOAPBoolean"]
294
+ ]
295
+
296
+ attr_accessor :aggregationType
297
+ attr_accessor :clientEmails
298
+ attr_accessor :crossClient
299
+ attr_accessor :endDay
300
+ attr_accessor :id
301
+ attr_accessor :name
302
+ attr_accessor :startDay
303
+ attr_accessor :status
304
+ attr_accessor :adWordsType
305
+ attr_accessor :campaigns
306
+ attr_accessor :keywordStatuses
307
+ attr_accessor :keywordType
308
+ attr_accessor :includeZeroImpression
309
+
310
+ def initialize(aggregationType = nil, clientEmails = [], crossClient = nil, endDay = nil, id = nil, name = nil, startDay = nil, status = nil, adWordsType = nil, campaigns = [], keywordStatuses = [], keywordType = nil, includeZeroImpression = nil)
311
+ @aggregationType = aggregationType
312
+ @clientEmails = clientEmails
313
+ @crossClient = crossClient
314
+ @endDay = endDay
315
+ @id = id
316
+ @name = name
317
+ @startDay = startDay
318
+ @status = status
319
+ @adWordsType = adWordsType
320
+ @campaigns = campaigns
321
+ @keywordStatuses = keywordStatuses
322
+ @keywordType = keywordType
323
+ @includeZeroImpression = includeZeroImpression
324
+ end
325
+ end
326
+
327
+ # {https://adwords.google.com/api/adwords/v6}AdTextReportJob
328
+ class AdTextReportJob
329
+ @@schema_type = "AdTextReportJob"
330
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
331
+ @@schema_element = [
332
+ ["aggregationType", "SOAP::SOAPString"],
333
+ ["clientEmails", "SOAP::SOAPString[]"],
334
+ ["crossClient", "SOAP::SOAPBoolean"],
335
+ ["endDay", "SOAP::SOAPDate"],
336
+ ["id", "SOAP::SOAPLong"],
337
+ ["name", "SOAP::SOAPString"],
338
+ ["startDay", "SOAP::SOAPDate"],
339
+ ["status", "SOAP::SOAPString"],
340
+ ["adWordsType", "SOAP::SOAPString"],
341
+ ["campaigns", "SOAP::SOAPInt[]"]
342
+ ]
343
+
344
+ attr_accessor :aggregationType
345
+ attr_accessor :clientEmails
346
+ attr_accessor :crossClient
347
+ attr_accessor :endDay
348
+ attr_accessor :id
349
+ attr_accessor :name
350
+ attr_accessor :startDay
351
+ attr_accessor :status
352
+ attr_accessor :adWordsType
353
+ attr_accessor :campaigns
354
+
355
+ def initialize(aggregationType = nil, clientEmails = [], crossClient = nil, endDay = nil, id = nil, name = nil, startDay = nil, status = nil, adWordsType = nil, campaigns = [])
356
+ @aggregationType = aggregationType
357
+ @clientEmails = clientEmails
358
+ @crossClient = crossClient
359
+ @endDay = endDay
360
+ @id = id
361
+ @name = name
362
+ @startDay = startDay
363
+ @status = status
364
+ @adWordsType = adWordsType
365
+ @campaigns = campaigns
366
+ end
367
+ end
368
+
369
+ # {https://adwords.google.com/api/adwords/v6}UrlReportJob
370
+ class UrlReportJob
371
+ @@schema_type = "UrlReportJob"
372
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
373
+ @@schema_element = [
374
+ ["aggregationType", "SOAP::SOAPString"],
375
+ ["clientEmails", "SOAP::SOAPString[]"],
376
+ ["crossClient", "SOAP::SOAPBoolean"],
377
+ ["endDay", "SOAP::SOAPDate"],
378
+ ["id", "SOAP::SOAPLong"],
379
+ ["name", "SOAP::SOAPString"],
380
+ ["startDay", "SOAP::SOAPDate"],
381
+ ["status", "SOAP::SOAPString"],
382
+ ["adWordsType", "SOAP::SOAPString"],
383
+ ["campaigns", "SOAP::SOAPInt[]"]
384
+ ]
385
+
386
+ attr_accessor :aggregationType
387
+ attr_accessor :clientEmails
388
+ attr_accessor :crossClient
389
+ attr_accessor :endDay
390
+ attr_accessor :id
391
+ attr_accessor :name
392
+ attr_accessor :startDay
393
+ attr_accessor :status
394
+ attr_accessor :adWordsType
395
+ attr_accessor :campaigns
396
+
397
+ def initialize(aggregationType = nil, clientEmails = [], crossClient = nil, endDay = nil, id = nil, name = nil, startDay = nil, status = nil, adWordsType = nil, campaigns = [])
398
+ @aggregationType = aggregationType
399
+ @clientEmails = clientEmails
400
+ @crossClient = crossClient
401
+ @endDay = endDay
402
+ @id = id
403
+ @name = name
404
+ @startDay = startDay
405
+ @status = status
406
+ @adWordsType = adWordsType
407
+ @campaigns = campaigns
408
+ end
409
+ end
410
+
411
+ # {https://adwords.google.com/api/adwords/v6}CustomReportJob
412
+ class CustomReportJob
413
+ @@schema_type = "CustomReportJob"
414
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
415
+ @@schema_element = [
416
+ ["aggregationType", "SOAP::SOAPString"],
417
+ ["clientEmails", "SOAP::SOAPString[]"],
418
+ ["crossClient", "SOAP::SOAPBoolean"],
419
+ ["endDay", "SOAP::SOAPDate"],
420
+ ["id", "SOAP::SOAPLong"],
421
+ ["name", "SOAP::SOAPString"],
422
+ ["startDay", "SOAP::SOAPDate"],
423
+ ["status", "SOAP::SOAPString"],
424
+ ["adGroupStatuses", "SOAP::SOAPString[]"],
425
+ ["adGroups", "SOAP::SOAPInt[]"],
426
+ ["adWordsType", "SOAP::SOAPString"],
427
+ ["campaignStatuses", "SOAP::SOAPString[]"],
428
+ ["campaigns", "SOAP::SOAPInt[]"],
429
+ ["customOptions", "SOAP::SOAPString[]"],
430
+ ["keywordStatuses", "SOAP::SOAPString[]"],
431
+ ["keywordType", "SOAP::SOAPString"],
432
+ ["keywords", "SOAP::SOAPString[]"],
433
+ ["includeZeroImpression", "SOAP::SOAPBoolean"]
434
+ ]
435
+
436
+ attr_accessor :aggregationType
437
+ attr_accessor :clientEmails
438
+ attr_accessor :crossClient
439
+ attr_accessor :endDay
440
+ attr_accessor :id
441
+ attr_accessor :name
442
+ attr_accessor :startDay
443
+ attr_accessor :status
444
+ attr_accessor :adGroupStatuses
445
+ attr_accessor :adGroups
446
+ attr_accessor :adWordsType
447
+ attr_accessor :campaignStatuses
448
+ attr_accessor :campaigns
449
+ attr_accessor :customOptions
450
+ attr_accessor :keywordStatuses
451
+ attr_accessor :keywordType
452
+ attr_accessor :keywords
453
+ attr_accessor :includeZeroImpression
454
+
455
+ def initialize(aggregationType = nil, clientEmails = [], crossClient = nil, endDay = nil, id = nil, name = nil, startDay = nil, status = nil, adGroupStatuses = [], adGroups = [], adWordsType = nil, campaignStatuses = [], campaigns = [], customOptions = [], keywordStatuses = [], keywordType = nil, keywords = [], includeZeroImpression = nil)
456
+ @aggregationType = aggregationType
457
+ @clientEmails = clientEmails
458
+ @crossClient = crossClient
459
+ @endDay = endDay
460
+ @id = id
461
+ @name = name
462
+ @startDay = startDay
463
+ @status = status
464
+ @adGroupStatuses = adGroupStatuses
465
+ @adGroups = adGroups
466
+ @adWordsType = adWordsType
467
+ @campaignStatuses = campaignStatuses
468
+ @campaigns = campaigns
469
+ @customOptions = customOptions
470
+ @keywordStatuses = keywordStatuses
471
+ @keywordType = keywordType
472
+ @keywords = keywords
473
+ @includeZeroImpression = includeZeroImpression
474
+ end
475
+ end
476
+
477
+ # {https://adwords.google.com/api/adwords/v6}CampaignReportJob
478
+ class CampaignReportJob
479
+ @@schema_type = "CampaignReportJob"
480
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
481
+ @@schema_element = [
482
+ ["aggregationType", "SOAP::SOAPString"],
483
+ ["clientEmails", "SOAP::SOAPString[]"],
484
+ ["crossClient", "SOAP::SOAPBoolean"],
485
+ ["endDay", "SOAP::SOAPDate"],
486
+ ["id", "SOAP::SOAPLong"],
487
+ ["name", "SOAP::SOAPString"],
488
+ ["startDay", "SOAP::SOAPDate"],
489
+ ["status", "SOAP::SOAPString"],
490
+ ["adWordsType", "SOAP::SOAPString"],
491
+ ["campaigns", "SOAP::SOAPInt[]"]
492
+ ]
493
+
494
+ attr_accessor :aggregationType
495
+ attr_accessor :clientEmails
496
+ attr_accessor :crossClient
497
+ attr_accessor :endDay
498
+ attr_accessor :id
499
+ attr_accessor :name
500
+ attr_accessor :startDay
501
+ attr_accessor :status
502
+ attr_accessor :adWordsType
503
+ attr_accessor :campaigns
504
+
505
+ def initialize(aggregationType = nil, clientEmails = [], crossClient = nil, endDay = nil, id = nil, name = nil, startDay = nil, status = nil, adWordsType = nil, campaigns = [])
506
+ @aggregationType = aggregationType
507
+ @clientEmails = clientEmails
508
+ @crossClient = crossClient
509
+ @endDay = endDay
510
+ @id = id
511
+ @name = name
512
+ @startDay = startDay
513
+ @status = status
514
+ @adWordsType = adWordsType
515
+ @campaigns = campaigns
516
+ end
517
+ end
518
+
519
+ # {https://adwords.google.com/api/adwords/v6}AccountReportJob
520
+ class AccountReportJob
521
+ @@schema_type = "AccountReportJob"
522
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
523
+ @@schema_element = [
524
+ ["aggregationType", "SOAP::SOAPString"],
525
+ ["clientEmails", "SOAP::SOAPString[]"],
526
+ ["crossClient", "SOAP::SOAPBoolean"],
527
+ ["endDay", "SOAP::SOAPDate"],
528
+ ["id", "SOAP::SOAPLong"],
529
+ ["name", "SOAP::SOAPString"],
530
+ ["startDay", "SOAP::SOAPDate"],
531
+ ["status", "SOAP::SOAPString"],
532
+ ["adWordsType", "SOAP::SOAPString"]
533
+ ]
534
+
535
+ attr_accessor :aggregationType
536
+ attr_accessor :clientEmails
537
+ attr_accessor :crossClient
538
+ attr_accessor :endDay
539
+ attr_accessor :id
540
+ attr_accessor :name
541
+ attr_accessor :startDay
542
+ attr_accessor :status
543
+ attr_accessor :adWordsType
544
+
545
+ def initialize(aggregationType = nil, clientEmails = [], crossClient = nil, endDay = nil, id = nil, name = nil, startDay = nil, status = nil, adWordsType = nil)
546
+ @aggregationType = aggregationType
547
+ @clientEmails = clientEmails
548
+ @crossClient = crossClient
549
+ @endDay = endDay
550
+ @id = id
551
+ @name = name
552
+ @startDay = startDay
553
+ @status = status
554
+ @adWordsType = adWordsType
555
+ end
556
+ end
557
+
558
+ # {https://adwords.google.com/api/adwords/v6}AdGroupReportJob
559
+ class AdGroupReportJob
560
+ @@schema_type = "AdGroupReportJob"
561
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
562
+ @@schema_element = [
563
+ ["aggregationType", "SOAP::SOAPString"],
564
+ ["clientEmails", "SOAP::SOAPString[]"],
565
+ ["crossClient", "SOAP::SOAPBoolean"],
566
+ ["endDay", "SOAP::SOAPDate"],
567
+ ["id", "SOAP::SOAPLong"],
568
+ ["name", "SOAP::SOAPString"],
569
+ ["startDay", "SOAP::SOAPDate"],
570
+ ["status", "SOAP::SOAPString"],
571
+ ["adWordsType", "SOAP::SOAPString"],
572
+ ["campaigns", "SOAP::SOAPInt[]"],
573
+ ["adGroupStatuses", "SOAP::SOAPString[]"]
574
+ ]
575
+
576
+ attr_accessor :aggregationType
577
+ attr_accessor :clientEmails
578
+ attr_accessor :crossClient
579
+ attr_accessor :endDay
580
+ attr_accessor :id
581
+ attr_accessor :name
582
+ attr_accessor :startDay
583
+ attr_accessor :status
584
+ attr_accessor :adWordsType
585
+ attr_accessor :campaigns
586
+ attr_accessor :adGroupStatuses
587
+
588
+ def initialize(aggregationType = nil, clientEmails = [], crossClient = nil, endDay = nil, id = nil, name = nil, startDay = nil, status = nil, adWordsType = nil, campaigns = [], adGroupStatuses = [])
589
+ @aggregationType = aggregationType
590
+ @clientEmails = clientEmails
591
+ @crossClient = crossClient
592
+ @endDay = endDay
593
+ @id = id
594
+ @name = name
595
+ @startDay = startDay
596
+ @status = status
597
+ @adWordsType = adWordsType
598
+ @campaigns = campaigns
599
+ @adGroupStatuses = adGroupStatuses
600
+ end
601
+ end
602
+
603
+ # {https://adwords.google.com/api/adwords/v6}AdImageReportJob
604
+ class AdImageReportJob
605
+ @@schema_type = "AdImageReportJob"
606
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
607
+ @@schema_element = [
608
+ ["aggregationType", "SOAP::SOAPString"],
609
+ ["clientEmails", "SOAP::SOAPString[]"],
610
+ ["crossClient", "SOAP::SOAPBoolean"],
611
+ ["endDay", "SOAP::SOAPDate"],
612
+ ["id", "SOAP::SOAPLong"],
613
+ ["name", "SOAP::SOAPString"],
614
+ ["startDay", "SOAP::SOAPDate"],
615
+ ["status", "SOAP::SOAPString"],
616
+ ["campaigns", "SOAP::SOAPInt[]"]
617
+ ]
618
+
619
+ attr_accessor :aggregationType
620
+ attr_accessor :clientEmails
621
+ attr_accessor :crossClient
622
+ attr_accessor :endDay
623
+ attr_accessor :id
624
+ attr_accessor :name
625
+ attr_accessor :startDay
626
+ attr_accessor :status
627
+ attr_accessor :campaigns
628
+
629
+ def initialize(aggregationType = nil, clientEmails = [], crossClient = nil, endDay = nil, id = nil, name = nil, startDay = nil, status = nil, campaigns = [])
630
+ @aggregationType = aggregationType
631
+ @clientEmails = clientEmails
632
+ @crossClient = crossClient
633
+ @endDay = endDay
634
+ @id = id
635
+ @name = name
636
+ @startDay = startDay
637
+ @status = status
638
+ @campaigns = campaigns
639
+ end
640
+ end
641
+
642
+ # {https://adwords.google.com/api/adwords/v6}ReportJobStatus
643
+ class ReportJobStatus < ::String
644
+ @@schema_type = "ReportJobStatus"
645
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
646
+
647
+ Completed = ReportJobStatus.new("Completed")
648
+ Failed = ReportJobStatus.new("Failed")
649
+ InProgress = ReportJobStatus.new("InProgress")
650
+ Pending = ReportJobStatus.new("Pending")
651
+ end
652
+
653
+ # {https://adwords.google.com/api/adwords/v6}AggregationType
654
+ class AggregationType < ::String
655
+ @@schema_type = "AggregationType"
656
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
657
+
658
+ Daily = AggregationType.new("Daily")
659
+ HourlyByDate = AggregationType.new("HourlyByDate")
660
+ HourlyRegardlessDate = AggregationType.new("HourlyRegardlessDate")
661
+ Monthly = AggregationType.new("Monthly")
662
+ Quarterly = AggregationType.new("Quarterly")
663
+ Summary = AggregationType.new("Summary")
664
+ Weekly = AggregationType.new("Weekly")
665
+ Yearly = AggregationType.new("Yearly")
666
+ end
667
+
668
+ # {https://adwords.google.com/api/adwords/v6}AdWordsType
669
+ class AdWordsType < ::String
670
+ @@schema_type = "AdWordsType"
671
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
672
+
673
+ ContentOnly = AdWordsType.new("ContentOnly")
674
+ SearchOnly = AdWordsType.new("SearchOnly")
675
+ end
676
+
677
+ # {https://adwords.google.com/api/adwords/v6}KeywordStatus
678
+ class KeywordStatus < ::String
679
+ @@schema_type = "KeywordStatus"
680
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
681
+
682
+ Deleted = KeywordStatus.new("Deleted")
683
+ Disabled = KeywordStatus.new("Disabled")
684
+ Disapproved = KeywordStatus.new("Disapproved")
685
+ InTrial = KeywordStatus.new("InTrial")
686
+ Normal = KeywordStatus.new("Normal")
687
+ OnHold = KeywordStatus.new("OnHold")
688
+ end
689
+
690
+ # {https://adwords.google.com/api/adwords/v6}KeywordType
691
+ class KeywordType < ::String
692
+ @@schema_type = "KeywordType"
693
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
694
+
695
+ Broad = KeywordType.new("Broad")
696
+ Exact = KeywordType.new("Exact")
697
+ Phrase = KeywordType.new("Phrase")
698
+ end
699
+
700
+ # {https://adwords.google.com/api/adwords/v6}CampaignStatus
701
+ class CampaignStatus < ::String
702
+ @@schema_type = "CampaignStatus"
703
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
704
+
705
+ Active = CampaignStatus.new("Active")
706
+ Deleted = CampaignStatus.new("Deleted")
707
+ Ended = CampaignStatus.new("Ended")
708
+ Paused = CampaignStatus.new("Paused")
709
+ Pending = CampaignStatus.new("Pending")
710
+ Suspended = CampaignStatus.new("Suspended")
711
+ end
712
+
713
+ # {https://adwords.google.com/api/adwords/v6}CustomReportOption
714
+ class CustomReportOption < ::String
715
+ @@schema_type = "CustomReportOption"
716
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
717
+
718
+ AccountName = CustomReportOption.new("AccountName")
719
+ AdGroup = CustomReportOption.new("AdGroup")
720
+ AdGroupId = CustomReportOption.new("AdGroupId")
721
+ AdGroupStatus = CustomReportOption.new("AdGroupStatus")
722
+ AdWordsType = CustomReportOption.new("AdWordsType")
723
+ AverageConversionValue = CustomReportOption.new("AverageConversionValue")
724
+ AveragePosition = CustomReportOption.new("AveragePosition")
725
+ BottomPosition = CustomReportOption.new("BottomPosition")
726
+ CPM = CustomReportOption.new("CPM")
727
+ Campaign = CustomReportOption.new("Campaign")
728
+ CampaignEndDate = CustomReportOption.new("CampaignEndDate")
729
+ CampaignId = CustomReportOption.new("CampaignId")
730
+ CampaignStatus = CustomReportOption.new("CampaignStatus")
731
+ Clicks = CustomReportOption.new("Clicks")
732
+ ConversionRate = CustomReportOption.new("ConversionRate")
733
+ ConversionValuePerClick = CustomReportOption.new("ConversionValuePerClick")
734
+ ConversionValuePerCost = CustomReportOption.new("ConversionValuePerCost")
735
+ Conversions = CustomReportOption.new("Conversions")
736
+ Cost = CustomReportOption.new("Cost")
737
+ CostPerConversion = CustomReportOption.new("CostPerConversion")
738
+ CostPerTransaction = CustomReportOption.new("CostPerTransaction")
739
+ Cpc = CustomReportOption.new("Cpc")
740
+ CreativeDestinationUrl = CustomReportOption.new("CreativeDestinationUrl")
741
+ CreativeId = CustomReportOption.new("CreativeId")
742
+ CreativeStatus = CustomReportOption.new("CreativeStatus")
743
+ CreativeType = CustomReportOption.new("CreativeType")
744
+ Ctr = CustomReportOption.new("Ctr")
745
+ CustomerTimeZone = CustomReportOption.new("CustomerTimeZone")
746
+ DailyBudget = CustomReportOption.new("DailyBudget")
747
+ DefaultConversionCount = CustomReportOption.new("DefaultConversionCount")
748
+ DefaultConversionValue = CustomReportOption.new("DefaultConversionValue")
749
+ DescriptionLine1 = CustomReportOption.new("DescriptionLine1")
750
+ DescriptionLine2 = CustomReportOption.new("DescriptionLine2")
751
+ DescriptionLine3 = CustomReportOption.new("DescriptionLine3")
752
+ DestinationUrl = CustomReportOption.new("DestinationUrl")
753
+ ImageAdName = CustomReportOption.new("ImageAdName")
754
+ ImageHostingKey = CustomReportOption.new("ImageHostingKey")
755
+ Impressions = CustomReportOption.new("Impressions")
756
+ Keyword = CustomReportOption.new("Keyword")
757
+ KeywordDestinationUrl = CustomReportOption.new("KeywordDestinationUrl")
758
+ KeywordId = CustomReportOption.new("KeywordId")
759
+ KeywordStatus = CustomReportOption.new("KeywordStatus")
760
+ KeywordType = CustomReportOption.new("KeywordType")
761
+ LeadCount = CustomReportOption.new("LeadCount")
762
+ LeadValue = CustomReportOption.new("LeadValue")
763
+ MaxContentCPC = CustomReportOption.new("MaxContentCPC")
764
+ MaximumCPM = CustomReportOption.new("MaximumCPM")
765
+ MaximumCpc = CustomReportOption.new("MaximumCpc")
766
+ MinimumCpc = CustomReportOption.new("MinimumCpc")
767
+ PageViewCount = CustomReportOption.new("PageViewCount")
768
+ PageViewValue = CustomReportOption.new("PageViewValue")
769
+ SaleCount = CustomReportOption.new("SaleCount")
770
+ SaleValue = CustomReportOption.new("SaleValue")
771
+ SignupCount = CustomReportOption.new("SignupCount")
772
+ SignupValue = CustomReportOption.new("SignupValue")
773
+ TopPosition = CustomReportOption.new("TopPosition")
774
+ TotalConversionValue = CustomReportOption.new("TotalConversionValue")
775
+ Transactions = CustomReportOption.new("Transactions")
776
+ VisibleUrl = CustomReportOption.new("VisibleUrl")
777
+ Website = CustomReportOption.new("Website")
778
+ end
779
+
780
+ # {https://adwords.google.com/api/adwords/v6}AdGroupStatus
781
+ class AdGroupStatus < ::String
782
+ @@schema_type = "AdGroupStatus"
783
+ @@schema_ns = "https://adwords.google.com/api/adwords/v6"
784
+
785
+ Deleted = AdGroupStatus.new("Deleted")
786
+ Enabled = AdGroupStatus.new("Enabled")
787
+ Paused = AdGroupStatus.new("Paused")
788
+ end
789
+ end