google-api-client 0.10.3 → 0.11.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.
Files changed (385) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +12 -18
  3. data/CHANGELOG.md +22 -2
  4. data/Gemfile +5 -7
  5. data/MIGRATING.md +33 -0
  6. data/README.md +10 -2
  7. data/Rakefile +1 -0
  8. data/bin/generate-api +7 -1
  9. data/dl.rb +0 -0
  10. data/generated/google/apis/acceleratedmobilepageurl_v1/classes.rb +6 -6
  11. data/generated/google/apis/acceleratedmobilepageurl_v1/representations.rb +1 -1
  12. data/generated/google/apis/acceleratedmobilepageurl_v1/service.rb +1 -0
  13. data/generated/google/apis/adexchangebuyer2_v2beta1.rb +1 -1
  14. data/generated/google/apis/adexchangebuyer2_v2beta1/classes.rb +759 -759
  15. data/generated/google/apis/adexchangebuyer2_v2beta1/representations.rb +152 -152
  16. data/generated/google/apis/adexchangebuyer2_v2beta1/service.rb +376 -375
  17. data/generated/google/apis/adexchangebuyer_v1_4/classes.rb +58 -58
  18. data/generated/google/apis/adexchangebuyer_v1_4/representations.rb +45 -45
  19. data/generated/google/apis/adexchangebuyer_v1_4/service.rb +22 -21
  20. data/generated/google/apis/adexchangeseller_v2_0/classes.rb +5 -5
  21. data/generated/google/apis/adexchangeseller_v2_0/representations.rb +5 -5
  22. data/generated/google/apis/adexchangeseller_v2_0/service.rb +1 -0
  23. data/generated/google/apis/admin_datatransfer_v1/classes.rb +2 -2
  24. data/generated/google/apis/admin_datatransfer_v1/representations.rb +2 -2
  25. data/generated/google/apis/admin_datatransfer_v1/service.rb +2 -1
  26. data/generated/google/apis/admin_directory_v1/classes.rb +11 -11
  27. data/generated/google/apis/admin_directory_v1/representations.rb +11 -11
  28. data/generated/google/apis/admin_directory_v1/service.rb +1 -0
  29. data/generated/google/apis/admin_reports_v1/classes.rb +5 -5
  30. data/generated/google/apis/admin_reports_v1/representations.rb +4 -4
  31. data/generated/google/apis/admin_reports_v1/service.rb +1 -0
  32. data/generated/google/apis/adsense_v1_4.rb +1 -1
  33. data/generated/google/apis/adsense_v1_4/classes.rb +2 -2
  34. data/generated/google/apis/adsense_v1_4/representations.rb +2 -2
  35. data/generated/google/apis/adsense_v1_4/service.rb +1 -0
  36. data/generated/google/apis/adsensehost_v4_1.rb +1 -1
  37. data/generated/google/apis/adsensehost_v4_1/classes.rb +1 -1
  38. data/generated/google/apis/adsensehost_v4_1/representations.rb +1 -1
  39. data/generated/google/apis/adsensehost_v4_1/service.rb +1 -0
  40. data/generated/google/apis/analytics_v3/classes.rb +10 -10
  41. data/generated/google/apis/analytics_v3/representations.rb +10 -10
  42. data/generated/google/apis/analytics_v3/service.rb +1 -0
  43. data/generated/google/apis/analyticsreporting_v4/classes.rb +933 -933
  44. data/generated/google/apis/analyticsreporting_v4/representations.rb +197 -197
  45. data/generated/google/apis/analyticsreporting_v4/service.rb +5 -4
  46. data/generated/google/apis/androidenterprise_v1.rb +1 -1
  47. data/generated/google/apis/androidenterprise_v1/classes.rb +1 -1
  48. data/generated/google/apis/androidenterprise_v1/representations.rb +1 -1
  49. data/generated/google/apis/androidenterprise_v1/service.rb +1 -0
  50. data/generated/google/apis/androidpublisher_v2/classes.rb +13 -13
  51. data/generated/google/apis/androidpublisher_v2/representations.rb +13 -13
  52. data/generated/google/apis/androidpublisher_v2/service.rb +3 -2
  53. data/generated/google/apis/appengine_v1/classes.rb +2 -2
  54. data/generated/google/apis/appengine_v1/representations.rb +2 -2
  55. data/generated/google/apis/appengine_v1/service.rb +1 -0
  56. data/generated/google/apis/appsactivity_v1/classes.rb +1 -1
  57. data/generated/google/apis/appsactivity_v1/representations.rb +1 -1
  58. data/generated/google/apis/appsactivity_v1/service.rb +1 -0
  59. data/generated/google/apis/appsmarket_v2.rb +35 -0
  60. data/generated/google/apis/appsmarket_v2/classes.rb +396 -0
  61. data/generated/google/apis/appsmarket_v2/representations.rb +180 -0
  62. data/generated/google/apis/appsmarket_v2/service.rb +187 -0
  63. data/generated/google/apis/appstate_v1.rb +1 -1
  64. data/generated/google/apis/appstate_v1/service.rb +1 -0
  65. data/generated/google/apis/bigquery_v2/classes.rb +39 -39
  66. data/generated/google/apis/bigquery_v2/representations.rb +38 -38
  67. data/generated/google/apis/bigquery_v2/service.rb +3 -2
  68. data/generated/google/apis/blogger_v3/classes.rb +2 -2
  69. data/generated/google/apis/blogger_v3/representations.rb +2 -2
  70. data/generated/google/apis/blogger_v3/service.rb +1 -0
  71. data/generated/google/apis/books_v1/classes.rb +5 -5
  72. data/generated/google/apis/books_v1/representations.rb +4 -4
  73. data/generated/google/apis/books_v1/service.rb +1 -0
  74. data/generated/google/apis/calendar_v3/classes.rb +1 -1
  75. data/generated/google/apis/calendar_v3/representations.rb +1 -1
  76. data/generated/google/apis/calendar_v3/service.rb +1 -0
  77. data/generated/google/apis/civicinfo_v2/classes.rb +6 -6
  78. data/generated/google/apis/civicinfo_v2/representations.rb +6 -6
  79. data/generated/google/apis/civicinfo_v2/service.rb +2 -1
  80. data/generated/google/apis/classroom_v1/service.rb +1 -0
  81. data/generated/google/apis/cloudbilling_v1/service.rb +1 -0
  82. data/generated/google/apis/cloudbuild_v1.rb +1 -1
  83. data/generated/google/apis/cloudbuild_v1/classes.rb +626 -626
  84. data/generated/google/apis/cloudbuild_v1/representations.rb +109 -109
  85. data/generated/google/apis/cloudbuild_v1/service.rb +159 -158
  86. data/generated/google/apis/clouddebugger_v2/classes.rb +358 -358
  87. data/generated/google/apis/clouddebugger_v2/representations.rb +99 -99
  88. data/generated/google/apis/clouddebugger_v2/service.rb +42 -41
  89. data/generated/google/apis/clouderrorreporting_v1beta1.rb +1 -1
  90. data/generated/google/apis/clouderrorreporting_v1beta1/classes.rb +220 -220
  91. data/generated/google/apis/clouderrorreporting_v1beta1/representations.rb +52 -52
  92. data/generated/google/apis/clouderrorreporting_v1beta1/service.rb +59 -58
  93. data/generated/google/apis/cloudfunctions_v1/classes.rb +7 -7
  94. data/generated/google/apis/cloudfunctions_v1/representations.rb +1 -1
  95. data/generated/google/apis/cloudfunctions_v1/service.rb +5 -4
  96. data/generated/google/apis/cloudkms_v1/classes.rb +311 -311
  97. data/generated/google/apis/cloudkms_v1/representations.rb +87 -87
  98. data/generated/google/apis/cloudkms_v1/service.rb +168 -167
  99. data/generated/google/apis/cloudmonitoring_v2beta2/classes.rb +4 -4
  100. data/generated/google/apis/cloudmonitoring_v2beta2/representations.rb +4 -4
  101. data/generated/google/apis/cloudmonitoring_v2beta2/service.rb +1 -0
  102. data/generated/google/apis/cloudresourcemanager_v1.rb +3 -3
  103. data/generated/google/apis/cloudresourcemanager_v1/classes.rb +341 -341
  104. data/generated/google/apis/cloudresourcemanager_v1/representations.rb +62 -62
  105. data/generated/google/apis/cloudresourcemanager_v1/service.rb +458 -457
  106. data/generated/google/apis/cloudresourcemanager_v1beta1/classes.rb +327 -327
  107. data/generated/google/apis/cloudresourcemanager_v1beta1/representations.rb +71 -71
  108. data/generated/google/apis/cloudresourcemanager_v1beta1/service.rb +237 -236
  109. data/generated/google/apis/cloudtrace_v1.rb +3 -3
  110. data/generated/google/apis/cloudtrace_v1/classes.rb +38 -38
  111. data/generated/google/apis/cloudtrace_v1/representations.rb +13 -13
  112. data/generated/google/apis/cloudtrace_v1/service.rb +14 -13
  113. data/generated/google/apis/clouduseraccounts_beta/classes.rb +4 -4
  114. data/generated/google/apis/clouduseraccounts_beta/representations.rb +4 -4
  115. data/generated/google/apis/clouduseraccounts_beta/service.rb +1 -0
  116. data/generated/google/apis/compute_beta/classes.rb +52 -52
  117. data/generated/google/apis/compute_beta/representations.rb +52 -52
  118. data/generated/google/apis/compute_beta/service.rb +2 -1
  119. data/generated/google/apis/compute_v1/classes.rb +48 -48
  120. data/generated/google/apis/compute_v1/representations.rb +48 -48
  121. data/generated/google/apis/compute_v1/service.rb +2 -1
  122. data/generated/google/apis/container_v1/service.rb +1 -0
  123. data/generated/google/apis/content_v2.rb +1 -1
  124. data/generated/google/apis/content_v2/classes.rb +38 -660
  125. data/generated/google/apis/content_v2/representations.rb +37 -303
  126. data/generated/google/apis/content_v2/service.rb +63 -279
  127. data/generated/google/apis/customsearch_v1/classes.rb +2 -2
  128. data/generated/google/apis/customsearch_v1/representations.rb +2 -2
  129. data/generated/google/apis/customsearch_v1/service.rb +1 -0
  130. data/generated/google/apis/dataflow_v1b3/classes.rb +3281 -3281
  131. data/generated/google/apis/dataflow_v1b3/representations.rb +777 -777
  132. data/generated/google/apis/dataflow_v1b3/service.rb +106 -105
  133. data/generated/google/apis/dataproc_v1/classes.rb +395 -395
  134. data/generated/google/apis/dataproc_v1/representations.rb +91 -91
  135. data/generated/google/apis/dataproc_v1/service.rb +356 -355
  136. data/generated/google/apis/datastore_v1/classes.rb +506 -506
  137. data/generated/google/apis/datastore_v1/representations.rb +147 -147
  138. data/generated/google/apis/datastore_v1/service.rb +46 -45
  139. data/generated/google/apis/deploymentmanager_v2/classes.rb +6 -6
  140. data/generated/google/apis/deploymentmanager_v2/representations.rb +6 -6
  141. data/generated/google/apis/deploymentmanager_v2/service.rb +1 -0
  142. data/generated/google/apis/dfareporting_v2_6/classes.rb +280 -280
  143. data/generated/google/apis/dfareporting_v2_6/representations.rb +266 -266
  144. data/generated/google/apis/dfareporting_v2_6/service.rb +421 -420
  145. data/generated/google/apis/dfareporting_v2_7/classes.rb +280 -280
  146. data/generated/google/apis/dfareporting_v2_7/representations.rb +266 -266
  147. data/generated/google/apis/dfareporting_v2_7/service.rb +423 -422
  148. data/generated/google/apis/discovery_v1/service.rb +1 -0
  149. data/generated/google/apis/dns_v1/classes.rb +2 -2
  150. data/generated/google/apis/dns_v1/representations.rb +2 -2
  151. data/generated/google/apis/dns_v1/service.rb +1 -0
  152. data/generated/google/apis/dns_v2beta1/classes.rb +2 -2
  153. data/generated/google/apis/dns_v2beta1/representations.rb +2 -2
  154. data/generated/google/apis/dns_v2beta1/service.rb +1 -0
  155. data/generated/google/apis/doubleclickbidmanager_v1/classes.rb +15 -15
  156. data/generated/google/apis/doubleclickbidmanager_v1/representations.rb +13 -13
  157. data/generated/google/apis/doubleclickbidmanager_v1/service.rb +5 -4
  158. data/generated/google/apis/doubleclicksearch_v2/classes.rb +28 -28
  159. data/generated/google/apis/doubleclicksearch_v2/representations.rb +28 -28
  160. data/generated/google/apis/doubleclicksearch_v2/service.rb +13 -12
  161. data/generated/google/apis/drive_v2/classes.rb +17 -17
  162. data/generated/google/apis/drive_v2/representations.rb +17 -17
  163. data/generated/google/apis/drive_v2/service.rb +5 -4
  164. data/generated/google/apis/drive_v3/classes.rb +13 -13
  165. data/generated/google/apis/drive_v3/representations.rb +12 -12
  166. data/generated/google/apis/drive_v3/service.rb +1 -0
  167. data/generated/google/apis/firebasedynamiclinks_v1.rb +1 -1
  168. data/generated/google/apis/firebasedynamiclinks_v1/classes.rb +81 -81
  169. data/generated/google/apis/firebasedynamiclinks_v1/representations.rb +24 -24
  170. data/generated/google/apis/firebasedynamiclinks_v1/service.rb +1 -0
  171. data/generated/google/apis/firebaserules_v1/classes.rb +201 -201
  172. data/generated/google/apis/firebaserules_v1/representations.rb +61 -61
  173. data/generated/google/apis/firebaserules_v1/service.rb +1 -0
  174. data/generated/google/apis/fitness_v1/classes.rb +18 -18
  175. data/generated/google/apis/fitness_v1/representations.rb +18 -18
  176. data/generated/google/apis/fitness_v1/service.rb +6 -5
  177. data/generated/google/apis/fusiontables_v2/classes.rb +2 -2
  178. data/generated/google/apis/fusiontables_v2/representations.rb +2 -2
  179. data/generated/google/apis/fusiontables_v2/service.rb +1 -0
  180. data/generated/google/apis/games_configuration_v1configuration.rb +1 -1
  181. data/generated/google/apis/games_configuration_v1configuration/classes.rb +2 -2
  182. data/generated/google/apis/games_configuration_v1configuration/representations.rb +2 -2
  183. data/generated/google/apis/games_configuration_v1configuration/service.rb +1 -0
  184. data/generated/google/apis/games_management_v1management.rb +1 -1
  185. data/generated/google/apis/games_management_v1management/classes.rb +6 -6
  186. data/generated/google/apis/games_management_v1management/representations.rb +6 -6
  187. data/generated/google/apis/games_management_v1management/service.rb +1 -0
  188. data/generated/google/apis/games_v1.rb +1 -1
  189. data/generated/google/apis/games_v1/classes.rb +47 -47
  190. data/generated/google/apis/games_v1/representations.rb +47 -47
  191. data/generated/google/apis/games_v1/service.rb +58 -57
  192. data/generated/google/apis/genomics_v1.rb +6 -6
  193. data/generated/google/apis/genomics_v1/classes.rb +2354 -2354
  194. data/generated/google/apis/genomics_v1/representations.rb +487 -487
  195. data/generated/google/apis/genomics_v1/service.rb +1188 -1187
  196. data/generated/google/apis/gmail_v1/classes.rb +11 -11
  197. data/generated/google/apis/gmail_v1/representations.rb +11 -11
  198. data/generated/google/apis/gmail_v1/service.rb +2 -1
  199. data/generated/google/apis/groupsmigration_v1/service.rb +1 -0
  200. data/generated/google/apis/groupssettings_v1/service.rb +1 -0
  201. data/generated/google/apis/iam_v1/classes.rb +437 -437
  202. data/generated/google/apis/iam_v1/representations.rb +95 -95
  203. data/generated/google/apis/iam_v1/service.rb +87 -86
  204. data/generated/google/apis/identitytoolkit_v3/classes.rb +20 -20
  205. data/generated/google/apis/identitytoolkit_v3/representations.rb +20 -20
  206. data/generated/google/apis/identitytoolkit_v3/service.rb +1 -0
  207. data/generated/google/apis/kgsearch_v1/service.rb +9 -8
  208. data/generated/google/apis/language_v1.rb +1 -1
  209. data/generated/google/apis/language_v1/classes.rb +245 -245
  210. data/generated/google/apis/language_v1/representations.rb +65 -65
  211. data/generated/google/apis/language_v1/service.rb +1 -0
  212. data/generated/google/apis/language_v1beta1.rb +1 -1
  213. data/generated/google/apis/language_v1beta1/classes.rb +277 -277
  214. data/generated/google/apis/language_v1beta1/representations.rb +83 -83
  215. data/generated/google/apis/language_v1beta1/service.rb +31 -30
  216. data/generated/google/apis/licensing_v1/service.rb +1 -0
  217. data/generated/google/apis/logging_v2/classes.rb +408 -408
  218. data/generated/google/apis/logging_v2/representations.rb +93 -93
  219. data/generated/google/apis/logging_v2/service.rb +408 -407
  220. data/generated/google/apis/logging_v2beta1.rb +3 -3
  221. data/generated/google/apis/logging_v2beta1/classes.rb +892 -892
  222. data/generated/google/apis/logging_v2beta1/representations.rb +128 -128
  223. data/generated/google/apis/logging_v2beta1/service.rb +89 -88
  224. data/generated/google/apis/manufacturers_v1/classes.rb +309 -309
  225. data/generated/google/apis/manufacturers_v1/representations.rb +64 -64
  226. data/generated/google/apis/manufacturers_v1/service.rb +1 -0
  227. data/generated/google/apis/mirror_v1/service.rb +1 -0
  228. data/generated/google/apis/ml_v1/classes.rb +1185 -1185
  229. data/generated/google/apis/ml_v1/representations.rb +171 -171
  230. data/generated/google/apis/ml_v1/service.rb +282 -281
  231. data/generated/google/apis/monitoring_v3.rb +3 -3
  232. data/generated/google/apis/monitoring_v3/classes.rb +334 -334
  233. data/generated/google/apis/monitoring_v3/representations.rb +86 -86
  234. data/generated/google/apis/monitoring_v3/service.rb +344 -343
  235. data/generated/google/apis/mybusiness_v3/service.rb +1 -0
  236. data/generated/google/apis/oauth2_v2/service.rb +1 -0
  237. data/generated/google/apis/pagespeedonline_v2/classes.rb +8 -8
  238. data/generated/google/apis/pagespeedonline_v2/representations.rb +8 -8
  239. data/generated/google/apis/pagespeedonline_v2/service.rb +1 -0
  240. data/generated/google/apis/partners_v2/classes.rb +1466 -1466
  241. data/generated/google/apis/partners_v2/representations.rb +371 -371
  242. data/generated/google/apis/partners_v2/service.rb +530 -529
  243. data/generated/google/apis/people_v1.rb +4 -4
  244. data/generated/google/apis/people_v1/classes.rb +1009 -1009
  245. data/generated/google/apis/people_v1/representations.rb +249 -249
  246. data/generated/google/apis/people_v1/service.rb +13 -12
  247. data/generated/google/apis/plus_domains_v1/classes.rb +2 -2
  248. data/generated/google/apis/plus_domains_v1/representations.rb +2 -2
  249. data/generated/google/apis/plus_domains_v1/service.rb +1 -0
  250. data/generated/google/apis/plus_v1/service.rb +1 -0
  251. data/generated/google/apis/prediction_v1_6/classes.rb +9 -9
  252. data/generated/google/apis/prediction_v1_6/representations.rb +9 -9
  253. data/generated/google/apis/prediction_v1_6/service.rb +1 -0
  254. data/generated/google/apis/proximitybeacon_v1beta1/classes.rb +221 -221
  255. data/generated/google/apis/proximitybeacon_v1beta1/representations.rb +55 -55
  256. data/generated/google/apis/proximitybeacon_v1beta1/service.rb +378 -377
  257. data/generated/google/apis/pubsub_v1/classes.rb +99 -99
  258. data/generated/google/apis/pubsub_v1/representations.rb +25 -25
  259. data/generated/google/apis/pubsub_v1/service.rb +236 -235
  260. data/generated/google/apis/qpx_express_v1/service.rb +1 -0
  261. data/generated/google/apis/replicapool_v1beta2/classes.rb +3 -3
  262. data/generated/google/apis/replicapool_v1beta2/representations.rb +3 -3
  263. data/generated/google/apis/replicapool_v1beta2/service.rb +1 -0
  264. data/generated/google/apis/replicapoolupdater_v1beta1/classes.rb +2 -2
  265. data/generated/google/apis/replicapoolupdater_v1beta1/representations.rb +2 -2
  266. data/generated/google/apis/replicapoolupdater_v1beta1/service.rb +1 -0
  267. data/generated/google/apis/reseller_v1/classes.rb +5 -5
  268. data/generated/google/apis/reseller_v1/representations.rb +5 -5
  269. data/generated/google/apis/reseller_v1/service.rb +1 -0
  270. data/generated/google/apis/resourceviews_v1beta2/classes.rb +2 -2
  271. data/generated/google/apis/resourceviews_v1beta2/representations.rb +2 -2
  272. data/generated/google/apis/resourceviews_v1beta2/service.rb +1 -0
  273. data/generated/google/apis/runtimeconfig_v1.rb +3 -3
  274. data/generated/google/apis/runtimeconfig_v1/classes.rb +28 -28
  275. data/generated/google/apis/runtimeconfig_v1/representations.rb +3 -3
  276. data/generated/google/apis/runtimeconfig_v1/service.rb +53 -52
  277. data/generated/google/apis/script_v1.rb +18 -18
  278. data/generated/google/apis/script_v1/classes.rb +84 -84
  279. data/generated/google/apis/script_v1/representations.rb +18 -18
  280. data/generated/google/apis/script_v1/service.rb +11 -10
  281. data/generated/google/apis/searchconsole_v1/classes.rb +75 -75
  282. data/generated/google/apis/searchconsole_v1/representations.rb +32 -32
  283. data/generated/google/apis/searchconsole_v1/service.rb +11 -10
  284. data/generated/google/apis/servicecontrol_v1/classes.rb +582 -582
  285. data/generated/google/apis/servicecontrol_v1/representations.rb +113 -113
  286. data/generated/google/apis/servicecontrol_v1/service.rb +71 -70
  287. data/generated/google/apis/servicemanagement_v1.rb +3 -3
  288. data/generated/google/apis/servicemanagement_v1/classes.rb +3725 -3725
  289. data/generated/google/apis/servicemanagement_v1/representations.rb +255 -255
  290. data/generated/google/apis/servicemanagement_v1/service.rb +179 -178
  291. data/generated/google/apis/serviceuser_v1.rb +3 -3
  292. data/generated/google/apis/serviceuser_v1/classes.rb +2845 -2845
  293. data/generated/google/apis/serviceuser_v1/representations.rb +228 -228
  294. data/generated/google/apis/serviceuser_v1/service.rb +47 -46
  295. data/generated/google/apis/sheets_v4.rb +1 -1
  296. data/generated/google/apis/sheets_v4/classes.rb +4456 -4456
  297. data/generated/google/apis/sheets_v4/representations.rb +859 -859
  298. data/generated/google/apis/sheets_v4/service.rb +180 -179
  299. data/generated/google/apis/site_verification_v1/service.rb +1 -0
  300. data/generated/google/apis/slides_v1.rb +1 -1
  301. data/generated/google/apis/slides_v1/classes.rb +2856 -2856
  302. data/generated/google/apis/slides_v1/representations.rb +683 -683
  303. data/generated/google/apis/slides_v1/service.rb +27 -26
  304. data/generated/google/apis/sourcerepo_v1/classes.rb +281 -281
  305. data/generated/google/apis/sourcerepo_v1/representations.rb +79 -79
  306. data/generated/google/apis/sourcerepo_v1/service.rb +112 -111
  307. data/generated/google/apis/spanner_v1/classes.rb +2177 -2177
  308. data/generated/google/apis/spanner_v1/representations.rb +325 -325
  309. data/generated/google/apis/spanner_v1/service.rb +374 -373
  310. data/generated/google/apis/speech_v1beta1/classes.rb +197 -197
  311. data/generated/google/apis/speech_v1beta1/representations.rb +36 -36
  312. data/generated/google/apis/speech_v1beta1/service.rb +27 -26
  313. data/generated/google/apis/sqladmin_v1beta4/classes.rb +14 -14
  314. data/generated/google/apis/sqladmin_v1beta4/representations.rb +14 -14
  315. data/generated/google/apis/sqladmin_v1beta4/service.rb +3 -2
  316. data/generated/google/apis/storage_v1.rb +1 -1
  317. data/generated/google/apis/storage_v1/classes.rb +11 -11
  318. data/generated/google/apis/storage_v1/representations.rb +11 -11
  319. data/generated/google/apis/storage_v1/service.rb +65 -64
  320. data/generated/google/apis/storagetransfer_v1/classes.rb +239 -239
  321. data/generated/google/apis/storagetransfer_v1/representations.rb +79 -79
  322. data/generated/google/apis/storagetransfer_v1/service.rb +133 -132
  323. data/generated/google/apis/surveys_v2/classes.rb +4 -4
  324. data/generated/google/apis/surveys_v2/representations.rb +4 -4
  325. data/generated/google/apis/surveys_v2/service.rb +1 -0
  326. data/generated/google/apis/tagmanager_v1/classes.rb +7 -7
  327. data/generated/google/apis/tagmanager_v1/representations.rb +7 -7
  328. data/generated/google/apis/tagmanager_v1/service.rb +1 -0
  329. data/generated/google/apis/tagmanager_v2/classes.rb +6 -6
  330. data/generated/google/apis/tagmanager_v2/representations.rb +6 -6
  331. data/generated/google/apis/tagmanager_v2/service.rb +1 -0
  332. data/generated/google/apis/taskqueue_v1beta2/classes.rb +5 -5
  333. data/generated/google/apis/taskqueue_v1beta2/representations.rb +5 -5
  334. data/generated/google/apis/taskqueue_v1beta2/service.rb +1 -0
  335. data/generated/google/apis/tasks_v1/service.rb +3 -2
  336. data/generated/google/apis/toolresults_v1beta3.rb +1 -1
  337. data/generated/google/apis/toolresults_v1beta3/classes.rb +4 -4
  338. data/generated/google/apis/toolresults_v1beta3/representations.rb +4 -4
  339. data/generated/google/apis/toolresults_v1beta3/service.rb +1 -0
  340. data/generated/google/apis/tracing_v1/classes.rb +421 -421
  341. data/generated/google/apis/tracing_v1/representations.rb +86 -86
  342. data/generated/google/apis/tracing_v1/service.rb +60 -59
  343. data/generated/google/apis/translate_v2/service.rb +1 -0
  344. data/generated/google/apis/urlshortener_v1/classes.rb +3 -3
  345. data/generated/google/apis/urlshortener_v1/representations.rb +3 -3
  346. data/generated/google/apis/urlshortener_v1/service.rb +1 -0
  347. data/generated/google/apis/vision_v1/classes.rb +1290 -1290
  348. data/generated/google/apis/vision_v1/representations.rb +184 -184
  349. data/generated/google/apis/vision_v1/service.rb +11 -10
  350. data/generated/google/apis/webfonts_v1/service.rb +1 -0
  351. data/generated/google/apis/webmasters_v3/classes.rb +5 -5
  352. data/generated/google/apis/webmasters_v3/representations.rb +5 -5
  353. data/generated/google/apis/webmasters_v3/service.rb +1 -0
  354. data/generated/google/apis/youtube_analytics_v1/classes.rb +1 -1
  355. data/generated/google/apis/youtube_analytics_v1/representations.rb +1 -1
  356. data/generated/google/apis/youtube_analytics_v1/service.rb +1 -0
  357. data/generated/google/apis/youtube_partner_v1/classes.rb +13 -13
  358. data/generated/google/apis/youtube_partner_v1/representations.rb +13 -13
  359. data/generated/google/apis/youtube_partner_v1/service.rb +1 -0
  360. data/generated/google/apis/youtube_v3/classes.rb +31 -31
  361. data/generated/google/apis/youtube_v3/representations.rb +31 -31
  362. data/generated/google/apis/youtube_v3/service.rb +2 -1
  363. data/generated/google/apis/youtubereporting_v1.rb +4 -4
  364. data/generated/google/apis/youtubereporting_v1/classes.rb +73 -73
  365. data/generated/google/apis/youtubereporting_v1/representations.rb +18 -18
  366. data/generated/google/apis/youtubereporting_v1/service.rb +77 -76
  367. data/google-api-client.gemspec +4 -6
  368. data/lib/google/apis/core/api_command.rb +8 -3
  369. data/lib/google/apis/core/base_service.rb +47 -18
  370. data/lib/google/apis/core/batch.rb +13 -18
  371. data/lib/google/apis/core/composite_io.rb +97 -0
  372. data/lib/google/apis/core/download.rb +24 -20
  373. data/lib/google/apis/core/http_command.rb +49 -38
  374. data/lib/google/apis/core/json_representation.rb +5 -1
  375. data/lib/google/apis/core/multipart.rb +43 -95
  376. data/lib/google/apis/core/upload.rb +59 -84
  377. data/lib/google/apis/generator/model.rb +2 -0
  378. data/lib/google/apis/generator/templates/_representation.tmpl +1 -1
  379. data/lib/google/apis/generator/templates/service.rb.tmpl +1 -0
  380. data/lib/google/apis/options.rb +24 -12
  381. data/lib/google/apis/version.rb +1 -1
  382. data/samples/web/Gemfile +0 -1
  383. metadata +39 -37
  384. data/lib/google/apis/core/http_client_adapter.rb +0 -82
  385. data/third_party/hurley_patches.rb +0 -103
@@ -54,8 +54,12 @@ module Google
54
54
  def prepare!
55
55
  query[FIELDS_PARAM] = normalize_fields_param(query[FIELDS_PARAM]) if query.key?(FIELDS_PARAM)
56
56
  if request_representation && request_object
57
- header[:content_type] ||= JSON_CONTENT_TYPE
58
- self.body = request_representation.new(request_object).to_json(user_options: { skip_undefined: true })
57
+ header['Content-Type'] ||= JSON_CONTENT_TYPE
58
+ if options && options.skip_serialization
59
+ self.body = request_object
60
+ else
61
+ self.body = request_representation.new(request_object).to_json(user_options: { skip_undefined: true })
62
+ end
59
63
  end
60
64
  super
61
65
  end
@@ -71,6 +75,7 @@ module Google
71
75
  # noinspection RubyUnusedLocalVariable
72
76
  def decode_response_body(content_type, body)
73
77
  return super unless response_representation
78
+ return super if options && options.skip_deserialization
74
79
  return super if content_type.nil?
75
80
  return nil unless content_type.start_with?(JSON_CONTENT_TYPE)
76
81
  instance = response_class.new
@@ -82,7 +87,7 @@ module Google
82
87
  #
83
88
  # @param [Fixnum] status
84
89
  # HTTP status code of response
85
- # @param [Hurley::Header] header
90
+ # @param [Hash] header
86
91
  # HTTP response headers
87
92
  # @param [String] body
88
93
  # HTTP response body
@@ -19,11 +19,9 @@ require 'google/apis/core/api_command'
19
19
  require 'google/apis/core/batch'
20
20
  require 'google/apis/core/upload'
21
21
  require 'google/apis/core/download'
22
- require 'google/apis/core/http_client_adapter'
23
22
  require 'google/apis/options'
24
23
  require 'googleauth'
25
- require 'hurley'
26
- require 'hurley/addressable'
24
+ require 'httpclient'
27
25
 
28
26
  module Google
29
27
  module Apis
@@ -86,6 +84,8 @@ module Google
86
84
  # Base service for all APIs. Not to be used directly.
87
85
  #
88
86
  class BaseService
87
+ include Logging
88
+
89
89
  # Root URL (host/port) for the API
90
90
  # @return [Addressable::URI]
91
91
  attr_accessor :root_url
@@ -103,7 +103,7 @@ module Google
103
103
  attr_accessor :batch_path
104
104
 
105
105
  # HTTP client
106
- # @return [Hurley::Client]
106
+ # @return [HTTPClient]
107
107
  attr_accessor :client
108
108
 
109
109
  # General settings
@@ -164,10 +164,10 @@ module Google
164
164
  batch_command.options = request_options.merge(options)
165
165
  apply_command_defaults(batch_command)
166
166
  begin
167
- Thread.current[:google_api_batch] = batch_command
167
+ start_batch(batch_command)
168
168
  yield self
169
169
  ensure
170
- Thread.current[:google_api_batch] = nil
170
+ end_batch
171
171
  end
172
172
  batch_command.execute(client)
173
173
  end
@@ -196,16 +196,16 @@ module Google
196
196
  batch_command.options = request_options.merge(options)
197
197
  apply_command_defaults(batch_command)
198
198
  begin
199
- Thread.current[:google_api_batch] = batch_command
199
+ start_batch(batch_command)
200
200
  yield self
201
201
  ensure
202
- Thread.current[:google_api_batch] = nil
202
+ end_batch
203
203
  end
204
204
  batch_command.execute(client)
205
205
  end
206
206
 
207
207
  # Get the current HTTP client
208
- # @return [Hurley::Client]
208
+ # @return [HTTPClient]
209
209
  def client
210
210
  @client ||= new_client
211
211
  end
@@ -347,6 +347,7 @@ module Google
347
347
  def execute_or_queue_command(command, &callback)
348
348
  batch_command = current_batch
349
349
  if batch_command
350
+ fail "Can not combine services in a batch" if Thread.current[:google_api_batch_service] != self
350
351
  batch_command.add(command, &callback)
351
352
  nil
352
353
  else
@@ -374,20 +375,48 @@ module Google
374
375
  !current_batch.nil?
375
376
  end
376
377
 
378
+ # Start a new thread-local batch context
379
+ # @param [Google::Apis::Core::BatchCommand] cmd
380
+ def start_batch(cmd)
381
+ fail "Batch already in progress" if batch?
382
+ Thread.current[:google_api_batch] = cmd
383
+ Thread.current[:google_api_batch_service] = self
384
+ end
385
+
386
+ # Clear thread-local batch context
387
+ def end_batch
388
+ Thread.current[:google_api_batch] = nil
389
+ Thread.current[:google_api_batch_service] = nil
390
+ end
391
+
377
392
  # Create a new HTTP client
378
- # @return [Hurley::Client]
393
+ # @return [HTTPClient]
379
394
  def new_client
380
- client = Hurley::Client.new
381
- client.connection = Google::Apis::Core::HttpClientAdapter.new unless client_options.use_net_http
382
- client.request_options.timeout = request_options.timeout_sec
383
- client.request_options.open_timeout = request_options.open_timeout_sec
384
- client.request_options.proxy = client_options.proxy_url
385
- client.request_options.query_class = Hurley::Query::Flat
386
- client.ssl_options.ca_file = File.join(Google::Apis::ROOT, 'lib', 'cacerts.pem')
387
- client.header[:user_agent] = user_agent
395
+ client = ::HTTPClient.new
396
+
397
+ client.transparent_gzip_decompression = true
398
+ client.proxy = client_options.proxy_url if client_options.proxy_url
399
+
400
+ if client_options.open_timeout_sec
401
+ client.connect_timeout = client_options.open_timeout_sec
402
+ end
403
+
404
+ if client_options.read_timeout_sec
405
+ client.receive_timeout = client_options.read_timeout_sec
406
+ end
407
+
408
+ if client_options.send_timeout_sec
409
+ client.send_timeout = client_options.send_timeout_sec
410
+ end
411
+
412
+ client.follow_redirect_count = 5
413
+ client.default_header = { 'User-Agent' => user_agent }
414
+
415
+ client.debug_dev = logger if client_options.log_http_requests
388
416
  client
389
417
  end
390
418
 
419
+
391
420
  # Build the user agent header
392
421
  # @return [String]
393
422
  def user_agent
@@ -25,19 +25,19 @@
25
25
  # See the License for the specific language governing permissions and
26
26
  # limitations under the License.
27
27
 
28
- require 'hurley'
29
28
  require 'google/apis/core/multipart'
30
29
  require 'google/apis/core/http_command'
31
30
  require 'google/apis/core/upload'
32
31
  require 'google/apis/core/download'
32
+ require 'google/apis/core/composite_io'
33
33
  require 'addressable/uri'
34
34
  require 'securerandom'
35
+
35
36
  module Google
36
37
  module Apis
37
38
  module Core
38
39
  # Wrapper request for batching multiple calls in a single server request
39
40
  class BatchCommand < HttpCommand
40
- BATCH_BOUNDARY = 'RubyApiBatchRequest'.freeze
41
41
  MULTIPART_MIXED = 'multipart/mixed'
42
42
 
43
43
  # @param [symbol] method
@@ -81,7 +81,7 @@ module Google
81
81
  parts.each_index do |index|
82
82
  response = deserializer.to_http_response(parts[index])
83
83
  outer_header = response.shift
84
- call_id = header_to_id(outer_header[:content_id]) || index
84
+ call_id = header_to_id(outer_header['Content-ID'].first) || index
85
85
  call, callback = @calls[call_id]
86
86
  begin
87
87
  result = call.process_response(*response) unless call.nil?
@@ -106,17 +106,16 @@ module Google
106
106
  fail BatchError, 'Cannot make an empty batch request' if @calls.empty?
107
107
 
108
108
  serializer = CallSerializer.new
109
- multipart = Multipart.new(boundary: BATCH_BOUNDARY, content_type: MULTIPART_MIXED)
109
+ multipart = Multipart.new(content_type: MULTIPART_MIXED)
110
110
  @calls.each_index do |index|
111
111
  call, _ = @calls[index]
112
112
  content_id = id_to_header(index)
113
- io = serializer.to_upload_io(call)
114
- multipart.add_upload(io, content_id: content_id)
113
+ io = serializer.to_part(call)
114
+ multipart.add_upload(io, content_type: 'application/http', content_id: content_id)
115
115
  end
116
116
  self.body = multipart.assemble
117
117
 
118
- header[:content_type] = multipart.content_type
119
- header[:content_length] = "#{body.length}"
118
+ header['Content-Type'] = multipart.content_type
120
119
  super
121
120
  end
122
121
 
@@ -155,24 +154,20 @@ module Google
155
154
  # Serializes a command for embedding in a multipart batch request
156
155
  # @private
157
156
  class CallSerializer
158
- HTTP_CONTENT_TYPE = 'application/http'
159
-
160
157
  ##
161
158
  # Serialize a single batched call for assembling the multipart message
162
159
  #
163
160
  # @param [Google::Apis::Core::HttpCommand] call
164
161
  # the call to serialize.
165
- # @return [Hurley::UploadIO]
162
+ # @return [IO]
166
163
  # the serialized request
167
- def to_upload_io(call)
164
+ def to_part(call)
168
165
  call.prepare!
169
166
  parts = []
170
167
  parts << build_head(call)
171
168
  parts << build_body(call) unless call.body.nil?
172
169
  length = parts.inject(0) { |a, e| a + e.length }
173
- Hurley::UploadIO.new(Hurley::CompositeReadIO.new(length, *parts),
174
- HTTP_CONTENT_TYPE,
175
- 'ruby-api-request')
170
+ Google::Apis::Core::CompositeIO.new(*parts)
176
171
  end
177
172
 
178
173
  protected
@@ -201,7 +196,7 @@ module Google
201
196
  #
202
197
  # @param [String] call_response
203
198
  # the response to parse.
204
- # @return [Array<(Fixnum, Hurley::Header, String)>]
199
+ # @return [Array<(Fixnum, Hash, String)>]
205
200
  # Status, header, and response body.
206
201
  def to_http_response(call_response)
207
202
  outer_header, outer_body = split_header_and_body(call_response)
@@ -218,10 +213,10 @@ module Google
218
213
  #
219
214
  # @param [String] response
220
215
  # the response to parse.
221
- # @return [Array<(Hurley::Header, String)>]
216
+ # @return [Array<(HTTP::Message::Headers, String)>]
222
217
  # the header and the body, separately.
223
218
  def split_header_and_body(response)
224
- header = Hurley::Header.new
219
+ header = HTTP::Message::Headers.new
225
220
  payload = response.lstrip
226
221
  while payload
227
222
  line, payload = payload.split(/\n/, 2)
@@ -0,0 +1,97 @@
1
+ # Copyright 2015 Google Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ # Copyright 2015 Google Inc.
15
+ #
16
+ # Licensed under the Apache License, Version 2.0 (the "License");
17
+ # you may not use this file except in compliance with the License.
18
+ # You may obtain a copy of the License at
19
+ #
20
+ # http://www.apache.org/licenses/LICENSE-2.0
21
+ #
22
+ # Unless required by applicable law or agreed to in writing, software
23
+ # distributed under the License is distributed on an "AS IS" BASIS,
24
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
25
+ # See the License for the specific language governing permissions and
26
+ # limitations under the License.
27
+
28
+ require 'google/apis/core/http_command'
29
+ require 'google/apis/core/upload'
30
+ require 'google/apis/core/download'
31
+ require 'addressable/uri'
32
+ require 'securerandom'
33
+ module Google
34
+ module Apis
35
+ module Core
36
+ class CompositeIO
37
+ def initialize(*ios)
38
+ @ios = ios.flatten
39
+ @pos = 0
40
+ @index = 0
41
+ @sizes = @ios.map(&:size)
42
+ end
43
+
44
+ def read(length = nil, buf = nil)
45
+ buf = buf ? buf.replace('') : ''
46
+
47
+ begin
48
+ io = @ios[@index]
49
+ break if io.nil?
50
+ result = io.read(length)
51
+ if result
52
+ buf << result
53
+ if length
54
+ length -= result.length
55
+ break if length == 0
56
+ end
57
+ end
58
+ @index += 1
59
+ end while @index < @ios.length
60
+ buf.length > 0 ? buf : nil
61
+ end
62
+
63
+ def size
64
+ @sizes.reduce(:+)
65
+ end
66
+
67
+ alias_method :length, :size
68
+
69
+ def pos
70
+ @pos
71
+ end
72
+
73
+ def pos=(pos)
74
+ fail ArgumentError, "Position can not be negative" if pos < 0
75
+ @pos = pos
76
+ new_index = nil
77
+ @ios.each_with_index do |io,idx|
78
+ size = io.size
79
+ if pos <= size
80
+ new_index ||= idx
81
+ io.pos = pos
82
+ pos = 0
83
+ else
84
+ io.pos = size
85
+ pos -= size
86
+ end
87
+ end
88
+ @index = new_index unless new_index.nil?
89
+ end
90
+
91
+ def rewind
92
+ self.pos = 0
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
@@ -12,7 +12,6 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- require 'google/apis/core/multipart'
16
15
  require 'google/apis/core/api_command'
17
16
  require 'google/apis/errors'
18
17
  require 'addressable/uri'
@@ -22,7 +21,7 @@ module Google
22
21
  module Core
23
22
  # Streaming/resumable media download support
24
23
  class DownloadCommand < ApiCommand
25
- RANGE_HEADER = 'range'
24
+ RANGE_HEADER = 'Range'
26
25
  OK_STATUS = [200, 201, 206]
27
26
 
28
27
  # File or IO to write content to
@@ -58,7 +57,7 @@ module Google
58
57
  # of file content.
59
58
  #
60
59
  # @private
61
- # @param [Hurley::Client] client
60
+ # @param [HTTPClient] client
62
61
  # HTTP client
63
62
  # @yield [result, err] Result or error if block supplied
64
63
  # @return [Object]
@@ -66,40 +65,45 @@ module Google
66
65
  # @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
67
66
  # @raise [Google::Apis::AuthorizationError] Authorization is required
68
67
  def execute_once(client, &block)
69
- response = client.get(@download_url || url) do |req|
70
- apply_request_options(req)
71
- check_if_rewind_needed = false
72
- if @offset > 0
73
- logger.debug { sprintf('Resuming download from offset %d', @offset) }
74
- req.header[RANGE_HEADER] = sprintf('bytes=%d-', @offset)
75
- check_if_rewind_needed = true
76
- end
77
- req.on_body(*OK_STATUS) do |res, chunk|
78
- check_status(res.status_code, chunk) unless res.status_code.nil?
79
- if check_if_rewind_needed && res.status_code != 206
68
+ request_header = header.dup
69
+ apply_request_options(request_header)
70
+
71
+ check_if_rewind_needed = false
72
+ if @offset > 0
73
+ logger.debug { sprintf('Resuming download from offset %d', @offset) }
74
+ request_header[RANGE_HEADER] = sprintf('bytes=%d-', @offset)
75
+ check_if_rewind_needed = true
76
+ end
77
+
78
+ http_res = client.get(url.to_s,
79
+ query: query,
80
+ header: request_header,
81
+ follow_redirect: true) do |res, chunk|
82
+ status = res.http_header.status_code.to_i
83
+ if OK_STATUS.include?(status)
84
+ if check_if_rewind_needed && status != 206
80
85
  # Oh no! Requested a chunk, but received the entire content
81
86
  # Attempt to rewind the stream
82
87
  @download_io.rewind
83
88
  check_if_rewind_needed = false
84
89
  end
85
-
86
- logger.debug { sprintf('Writing chunk (%d bytes)', chunk.length) }
87
- @offset += chunk.length
90
+ # logger.debug { sprintf('Writing chunk (%d bytes, %d total)', chunk.length, bytes_read) }
88
91
  @download_io.write(chunk)
89
- @download_io.flush
92
+ @offset += chunk.length
90
93
  end
91
94
  end
92
95
 
93
- # Since the on_body block only runs on success, check status again just in case it failed
94
- check_status(response.status_code, response.body) unless OK_STATUS.include?(response.status_code.to_i)
96
+ @download_io.flush
95
97
 
96
98
  if @close_io_on_finish
97
99
  result = nil
98
100
  else
99
101
  result = @download_io
100
102
  end
103
+ check_status(http_res.status.to_i, http_res.header, http_res.body)
101
104
  success(result, &block)
102
105
  rescue => e
106
+ @download_io.flush
103
107
  error(e, rethrow: true, &block)
104
108
  end
105
109
  end
@@ -17,9 +17,6 @@ require 'addressable/template'
17
17
  require 'google/apis/options'
18
18
  require 'google/apis/errors'
19
19
  require 'retriable'
20
- require 'hurley'
21
- require 'hurley/addressable'
22
- require 'hurley_patches'
23
20
  require 'google/apis/core/logging'
24
21
  require 'pp'
25
22
 
@@ -41,7 +38,7 @@ module Google
41
38
  attr_accessor :url
42
39
 
43
40
  # HTTP headers
44
- # @return [Hurley::Header]
41
+ # @return [Hash]
45
42
  attr_accessor :header
46
43
 
47
44
  # Request body
@@ -53,7 +50,7 @@ module Google
53
50
  attr_accessor :method
54
51
 
55
52
  # HTTP Client
56
- # @return [Hurley::Client]
53
+ # @return [HTTPClient]
57
54
  attr_accessor :connection
58
55
 
59
56
  # Query params
@@ -75,7 +72,7 @@ module Google
75
72
  self.url = url
76
73
  self.url = Addressable::Template.new(url) if url.is_a?(String)
77
74
  self.method = method
78
- self.header = Hurley::Header.new
75
+ self.header = Hash.new
79
76
  self.body = body
80
77
  self.query = {}
81
78
  self.params = {}
@@ -83,7 +80,7 @@ module Google
83
80
 
84
81
  # Execute the command, retrying as necessary
85
82
  #
86
- # @param [Hurley::Client] client
83
+ # @param [HTTPClient] client
87
84
  # HTTP client
88
85
  # @yield [result, err] Result or error if block supplied
89
86
  # @return [Object]
@@ -142,8 +139,12 @@ module Google
142
139
  # @private
143
140
  # @return [void]
144
141
  def prepare!
145
- header.update(options.header) if options && options.header
146
- self.url = url.expand(params) if url.is_a?(Addressable::Template)
142
+ normalize_unicode = true
143
+ if options
144
+ header.update(options.header) if options.header
145
+ normalize_unicode = options.normalize_unicode
146
+ end
147
+ self.url = url.expand(params, nil, normalize_unicode) if url.is_a?(Addressable::Template)
147
148
  url.query_values = query.merge(url.query_values || {})
148
149
 
149
150
  if allow_form_encoding?
@@ -154,6 +155,9 @@ module Google
154
155
  else
155
156
  @form_encoded = false
156
157
  end
158
+
159
+ self.body = '' unless self.body
160
+
157
161
  end
158
162
 
159
163
  # Release any resources used by this command
@@ -166,7 +170,7 @@ module Google
166
170
  #
167
171
  # @param [Fixnum] status
168
172
  # HTTP status code of response
169
- # @param [Hurley::Header] header
173
+ # @param [Hash] header
170
174
  # Response headers
171
175
  # @param [String, #read] body
172
176
  # Response body
@@ -177,7 +181,7 @@ module Google
177
181
  # @raise [Google::Apis::AuthorizationError] Authorization is required
178
182
  def process_response(status, header, body)
179
183
  check_status(status, header, body)
180
- decode_response_body(header[:content_type], body)
184
+ decode_response_body(header['Content-Type'].first, body)
181
185
  end
182
186
 
183
187
  # Check the response and raise error if needed
@@ -185,7 +189,7 @@ module Google
185
189
  # @param [Fixnum] status
186
190
  # HTTP status code of response
187
191
  # @param
188
- # @param [Hurley::Header] header
192
+ # @param [Hash] header
189
193
  # HTTP response headers
190
194
  # @param [String] body
191
195
  # HTTP response body
@@ -201,11 +205,14 @@ module Google
201
205
  when 200...300
202
206
  nil
203
207
  when 301, 302, 303, 307
204
- message ||= sprintf('Redirect to %s', header[:location])
208
+ message ||= sprintf('Redirect to %s', header['Location'])
205
209
  raise Google::Apis::RedirectError.new(message, status_code: status, header: header, body: body)
206
210
  when 401
207
211
  message ||= 'Unauthorized'
208
212
  raise Google::Apis::AuthorizationError.new(message, status_code: status, header: header, body: body)
213
+ when 429
214
+ message ||= 'Rate limit exceeded'
215
+ raise Google::Apis::RateLimitError.new(message, status_code: status, header: header, body: body)
209
216
  when 304, 400, 402...500
210
217
  message ||= 'Invalid request'
211
218
  raise Google::Apis::ClientError.new(message, status_code: status, header: header, body: body)
@@ -251,7 +258,16 @@ module Google
251
258
  # @raise [StandardError] if no block
252
259
  def error(err, rethrow: false, &block)
253
260
  logger.debug { sprintf('Error - %s', PP.pp(err, '')) }
254
- err = Google::Apis::TransmissionError.new(err) if err.is_a?(Hurley::ClientError) || err.is_a?(SocketError)
261
+ if err.is_a?(HTTPClient::BadResponseError)
262
+ begin
263
+ res = err.res
264
+ check_status(res.status.to_i, res.header, res.body)
265
+ rescue Google::Apis::Error => e
266
+ err = e
267
+ end
268
+ elsif err.is_a?(HTTPClient::TimeoutError) || err.is_a?(SocketError)
269
+ err = Google::Apis::TransmissionError.new(err)
270
+ end
255
271
  block.call(nil, err) if block_given?
256
272
  fail err if rethrow || block.nil?
257
273
  end
@@ -259,7 +275,7 @@ module Google
259
275
  # Execute the command once.
260
276
  #
261
277
  # @private
262
- # @param [Hurley::Client] client
278
+ # @param [HTTPClient] client
263
279
  # HTTP client
264
280
  # @return [Object]
265
281
  # @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
@@ -269,21 +285,18 @@ module Google
269
285
  body.rewind if body.respond_to?(:rewind)
270
286
  begin
271
287
  logger.debug { sprintf('Sending HTTP %s %s', method, url) }
272
- response = client.send(method, url, body) do |req|
273
- # Temporary workaround for Hurley bug where the connection preference
274
- # is ignored and it uses nested anyway
275
- unless form_encoded?
276
- req.url.query_class = Hurley::Query::Flat
277
- query.each do | k, v|
278
- req.url.query[k] = normalize_query_value(v)
279
- end
280
- end
281
- # End workaround
282
- apply_request_options(req)
283
- end
284
- logger.debug { response.status_code }
285
- logger.debug { response.inspect }
286
- response = process_response(response.status_code, response.header, response.body)
288
+ request_header = header.dup
289
+ apply_request_options(request_header)
290
+
291
+ http_res = client.request(method.to_s.upcase,
292
+ url.to_s,
293
+ query: nil,
294
+ body: body,
295
+ header: request_header,
296
+ follow_redirect: true)
297
+ logger.debug { http_res.status }
298
+ logger.debug { http_res.inspect }
299
+ response = process_response(http_res.status.to_i, http_res.header, http_res.body)
287
300
  success(response)
288
301
  rescue => e
289
302
  logger.debug { sprintf('Caught error %s', e) }
@@ -292,18 +305,16 @@ module Google
292
305
  end
293
306
 
294
307
  # Update the request with any specified options.
295
- # @param [Hurley::Request] req
296
- # HTTP request
308
+ # @param [Hash] header
309
+ # HTTP headers
297
310
  # @return [void]
298
- def apply_request_options(req)
311
+ def apply_request_options(req_header)
299
312
  if options.authorization.respond_to?(:apply!)
300
- options.authorization.apply!(req.header)
313
+ options.authorization.apply!(req_header)
301
314
  elsif options.authorization.is_a?(String)
302
- req.header[:authorization] = sprintf('Bearer %s', options.authorization)
315
+ req_header['Authorization'] = sprintf('Bearer %s', options.authorization)
303
316
  end
304
- req.header.update(header)
305
- req.options.timeout = options.timeout_sec
306
- req.options.open_timeout = options.open_timeout_sec
317
+ req_header.update(header)
307
318
  end
308
319
 
309
320
  def allow_form_encoding?