google-api-client 0.8.7 → 0.9

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 (497) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +20 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +7 -0
  5. data/.rubocop_todo.yml +63 -0
  6. data/.travis.yml +22 -0
  7. data/.yardopts +12 -0
  8. data/CHANGELOG.md +40 -4
  9. data/CONTRIBUTING.md +31 -0
  10. data/Gemfile +32 -2
  11. data/MIGRATING.md +171 -0
  12. data/README.md +181 -148
  13. data/Rakefile +1 -40
  14. data/api_names.yaml +1036 -0
  15. data/api_names_out.yaml +26053 -0
  16. data/bin/generate-api +95 -0
  17. data/generated/google/apis/adexchangebuyer_v1_3/classes.rb +1335 -0
  18. data/generated/google/apis/adexchangebuyer_v1_3/representations.rb +446 -0
  19. data/generated/google/apis/adexchangebuyer_v1_3/service.rb +872 -0
  20. data/generated/google/apis/adexchangebuyer_v1_3.rb +35 -0
  21. data/generated/google/apis/adexchangeseller_v2_0/classes.rb +792 -0
  22. data/generated/google/apis/adexchangeseller_v2_0/representations.rb +309 -0
  23. data/generated/google/apis/adexchangeseller_v2_0/service.rb +668 -0
  24. data/generated/google/apis/adexchangeseller_v2_0.rb +38 -0
  25. data/generated/google/apis/admin_datatransfer_v1/classes.rb +267 -0
  26. data/generated/google/apis/admin_datatransfer_v1/representations.rb +118 -0
  27. data/generated/google/apis/admin_datatransfer_v1/service.rb +262 -0
  28. data/generated/google/apis/admin_datatransfer_v1.rb +37 -0
  29. data/generated/google/apis/admin_directory_v1/classes.rb +3141 -0
  30. data/generated/google/apis/admin_directory_v1/representations.rb +1029 -0
  31. data/generated/google/apis/admin_directory_v1/service.rb +3818 -0
  32. data/generated/google/apis/admin_directory_v1.rb +113 -0
  33. data/generated/google/apis/admin_reports_v1/classes.rb +582 -0
  34. data/generated/google/apis/admin_reports_v1/representations.rb +231 -0
  35. data/generated/google/apis/admin_reports_v1/service.rb +336 -0
  36. data/generated/google/apis/admin_reports_v1.rb +38 -0
  37. data/generated/google/apis/adsense_v1_4/classes.rb +1285 -0
  38. data/generated/google/apis/adsense_v1_4/representations.rb +494 -0
  39. data/generated/google/apis/adsense_v1_4/service.rb +1714 -0
  40. data/generated/google/apis/adsense_v1_4.rb +38 -0
  41. data/generated/google/apis/adsensehost_v4_1/classes.rb +834 -0
  42. data/generated/google/apis/adsensehost_v4_1/representations.rb +327 -0
  43. data/generated/google/apis/adsensehost_v4_1/service.rb +1164 -0
  44. data/generated/google/apis/adsensehost_v4_1.rb +35 -0
  45. data/generated/google/apis/analytics_v3/classes.rb +5118 -0
  46. data/generated/google/apis/analytics_v3/representations.rb +1662 -0
  47. data/generated/google/apis/analytics_v3/service.rb +3568 -0
  48. data/generated/google/apis/analytics_v3.rb +49 -0
  49. data/generated/google/apis/androidenterprise_v1/classes.rb +1443 -0
  50. data/generated/google/apis/androidenterprise_v1/representations.rb +538 -0
  51. data/generated/google/apis/androidenterprise_v1/service.rb +2602 -0
  52. data/generated/google/apis/androidenterprise_v1.rb +35 -0
  53. data/generated/google/apis/androidpublisher_v2/classes.rb +1411 -0
  54. data/generated/google/apis/androidpublisher_v2/representations.rb +646 -0
  55. data/generated/google/apis/androidpublisher_v2/service.rb +2338 -0
  56. data/generated/google/apis/androidpublisher_v2.rb +34 -0
  57. data/generated/google/apis/appengine_v1beta4/classes.rb +1532 -0
  58. data/generated/google/apis/appengine_v1beta4/representations.rb +526 -0
  59. data/generated/google/apis/appengine_v1beta4/service.rb +476 -0
  60. data/generated/google/apis/appengine_v1beta4.rb +35 -0
  61. data/generated/google/apis/appsactivity_v1/classes.rb +392 -0
  62. data/generated/google/apis/appsactivity_v1/representations.rb +184 -0
  63. data/generated/google/apis/appsactivity_v1/service.rb +128 -0
  64. data/generated/google/apis/appsactivity_v1.rb +46 -0
  65. data/generated/google/apis/appstate_v1/classes.rb +154 -0
  66. data/generated/google/apis/appstate_v1/representations.rb +79 -0
  67. data/generated/google/apis/appstate_v1/service.rb +260 -0
  68. data/generated/google/apis/appstate_v1.rb +34 -0
  69. data/generated/google/apis/autoscaler_v1beta2/classes.rb +747 -0
  70. data/generated/google/apis/autoscaler_v1beta2/representations.rb +281 -0
  71. data/generated/google/apis/autoscaler_v1beta2/service.rb +478 -0
  72. data/generated/google/apis/autoscaler_v1beta2.rb +38 -0
  73. data/generated/google/apis/bigquery_v2/classes.rb +2471 -0
  74. data/generated/google/apis/bigquery_v2/representations.rb +816 -0
  75. data/generated/google/apis/bigquery_v2/service.rb +982 -0
  76. data/generated/google/apis/bigquery_v2.rb +52 -0
  77. data/generated/google/apis/blogger_v3/classes.rb +1354 -0
  78. data/generated/google/apis/blogger_v3/representations.rb +562 -0
  79. data/generated/google/apis/blogger_v3/service.rb +1587 -0
  80. data/generated/google/apis/blogger_v3.rb +37 -0
  81. data/generated/google/apis/books_v1/classes.rb +3956 -0
  82. data/generated/google/apis/books_v1/representations.rb +1538 -0
  83. data/generated/google/apis/books_v1/service.rb +2290 -0
  84. data/generated/google/apis/books_v1.rb +34 -0
  85. data/generated/google/apis/calendar_v3/classes.rb +1742 -0
  86. data/generated/google/apis/calendar_v3/representations.rb +567 -0
  87. data/generated/google/apis/calendar_v3/service.rb +1968 -0
  88. data/generated/google/apis/calendar_v3.rb +37 -0
  89. data/generated/google/apis/civicinfo_v2/classes.rb +1127 -0
  90. data/generated/google/apis/civicinfo_v2/representations.rb +383 -0
  91. data/generated/google/apis/civicinfo_v2/service.rb +279 -0
  92. data/{lib/google/api_client/service_account.rb → generated/google/apis/civicinfo_v2.rb} +18 -8
  93. data/generated/google/apis/classroom_v1/classes.rb +512 -0
  94. data/generated/google/apis/classroom_v1/representations.rb +217 -0
  95. data/generated/google/apis/classroom_v1/service.rb +970 -0
  96. data/generated/google/apis/classroom_v1.rb +49 -0
  97. data/generated/google/apis/classroom_v1beta1/classes.rb +447 -0
  98. data/generated/google/apis/classroom_v1beta1/representations.rb +190 -0
  99. data/generated/google/apis/classroom_v1beta1/service.rb +791 -0
  100. data/generated/google/apis/classroom_v1beta1.rb +49 -0
  101. data/generated/google/apis/cloudbilling_v1/classes.rb +169 -0
  102. data/generated/google/apis/cloudbilling_v1/representations.rb +79 -0
  103. data/generated/google/apis/cloudbilling_v1/service.rb +258 -0
  104. data/generated/google/apis/cloudbilling_v1.rb +35 -0
  105. data/generated/google/apis/clouddebugger_v2/classes.rb +1004 -0
  106. data/generated/google/apis/clouddebugger_v2/representations.rb +410 -0
  107. data/generated/google/apis/clouddebugger_v2/service.rb +370 -0
  108. data/generated/google/apis/clouddebugger_v2.rb +41 -0
  109. data/generated/google/apis/cloudmonitoring_v2beta2/classes.rb +679 -0
  110. data/generated/google/apis/cloudmonitoring_v2beta2/representations.rb +311 -0
  111. data/generated/google/apis/cloudmonitoring_v2beta2/service.rb +452 -0
  112. data/generated/google/apis/cloudmonitoring_v2beta2.rb +37 -0
  113. data/generated/google/apis/cloudresourcemanager_v1beta1/classes.rb +437 -0
  114. data/generated/google/apis/cloudresourcemanager_v1beta1/representations.rb +188 -0
  115. data/generated/google/apis/cloudresourcemanager_v1beta1/service.rb +623 -0
  116. data/generated/google/apis/cloudresourcemanager_v1beta1.rb +38 -0
  117. data/generated/google/apis/cloudtrace_v1/classes.rb +188 -0
  118. data/generated/google/apis/cloudtrace_v1/representations.rb +92 -0
  119. data/generated/google/apis/cloudtrace_v1/service.rb +190 -0
  120. data/generated/google/apis/cloudtrace_v1.rb +35 -0
  121. data/generated/google/apis/clouduseraccounts_beta/classes.rb +823 -0
  122. data/generated/google/apis/clouduseraccounts_beta/representations.rb +313 -0
  123. data/generated/google/apis/clouduseraccounts_beta/service.rb +854 -0
  124. data/generated/google/apis/clouduseraccounts_beta.rb +43 -0
  125. data/generated/google/apis/compute_beta/classes.rb +9128 -0
  126. data/generated/google/apis/compute_beta/representations.rb +3048 -0
  127. data/generated/google/apis/compute_beta/service.rb +10154 -0
  128. data/generated/google/apis/compute_beta.rb +49 -0
  129. data/generated/google/apis/compute_v1/classes.rb +8681 -0
  130. data/generated/google/apis/compute_v1/representations.rb +2895 -0
  131. data/generated/google/apis/compute_v1/service.rb +9252 -0
  132. data/generated/google/apis/compute_v1.rb +49 -0
  133. data/generated/google/apis/container_v1/classes.rb +463 -0
  134. data/generated/google/apis/container_v1/representations.rb +175 -0
  135. data/generated/google/apis/container_v1/service.rb +367 -0
  136. data/generated/google/apis/container_v1.rb +35 -0
  137. data/generated/google/apis/container_v1beta1/classes.rb +466 -0
  138. data/generated/google/apis/container_v1beta1/representations.rb +177 -0
  139. data/generated/google/apis/container_v1beta1/service.rb +394 -0
  140. data/generated/google/apis/container_v1beta1.rb +35 -0
  141. data/generated/google/apis/content_v2/classes.rb +5986 -0
  142. data/generated/google/apis/content_v2/representations.rb +2288 -0
  143. data/generated/google/apis/content_v2/service.rb +2338 -0
  144. data/generated/google/apis/content_v2.rb +35 -0
  145. data/generated/google/apis/coordinate_v1/classes.rb +669 -0
  146. data/generated/google/apis/coordinate_v1/representations.rb +285 -0
  147. data/generated/google/apis/coordinate_v1/service.rb +678 -0
  148. data/generated/google/apis/coordinate_v1.rb +37 -0
  149. data/generated/google/apis/customsearch_v1/classes.rb +771 -0
  150. data/generated/google/apis/customsearch_v1/representations.rb +276 -0
  151. data/generated/google/apis/customsearch_v1/service.rb +207 -0
  152. data/{lib/google/api_client/auth/compute_service_account.rb → generated/google/apis/customsearch_v1.rb} +13 -10
  153. data/generated/google/apis/datastore_v1beta2/classes.rb +1186 -0
  154. data/generated/google/apis/datastore_v1beta2/representations.rb +526 -0
  155. data/generated/google/apis/datastore_v1beta2/service.rb +294 -0
  156. data/generated/google/apis/datastore_v1beta2.rb +40 -0
  157. data/generated/google/apis/deploymentmanager_v2/classes.rb +1091 -0
  158. data/generated/google/apis/deploymentmanager_v2/representations.rb +422 -0
  159. data/generated/google/apis/deploymentmanager_v2/service.rb +857 -0
  160. data/generated/google/apis/deploymentmanager_v2.rb +44 -0
  161. data/generated/google/apis/deploymentmanager_v2beta2/classes.rb +843 -0
  162. data/generated/google/apis/deploymentmanager_v2beta2/representations.rb +306 -0
  163. data/generated/google/apis/deploymentmanager_v2beta2/service.rb +689 -0
  164. data/generated/google/apis/deploymentmanager_v2beta2.rb +44 -0
  165. data/generated/google/apis/dfareporting_v2_1/classes.rb +10770 -0
  166. data/generated/google/apis/dfareporting_v2_1/representations.rb +3438 -0
  167. data/generated/google/apis/dfareporting_v2_1/service.rb +8585 -0
  168. data/generated/google/apis/dfareporting_v2_1.rb +37 -0
  169. data/generated/google/apis/discovery_v1/classes.rb +961 -0
  170. data/generated/google/apis/discovery_v1/representations.rb +357 -0
  171. data/generated/google/apis/discovery_v1/service.rb +142 -0
  172. data/generated/google/apis/discovery_v1.rb +32 -0
  173. data/generated/google/apis/dns_v1/classes.rb +406 -0
  174. data/generated/google/apis/dns_v1/representations.rb +151 -0
  175. data/generated/google/apis/dns_v1/service.rb +454 -0
  176. data/generated/google/apis/dns_v1.rb +44 -0
  177. data/generated/google/apis/doubleclickbidmanager_v1/classes.rb +716 -0
  178. data/generated/google/apis/doubleclickbidmanager_v1/representations.rb +298 -0
  179. data/generated/google/apis/doubleclickbidmanager_v1/service.rb +341 -0
  180. data/generated/google/apis/doubleclickbidmanager_v1.rb +31 -0
  181. data/generated/google/apis/doubleclicksearch_v2/classes.rb +956 -0
  182. data/generated/google/apis/doubleclicksearch_v2/representations.rb +316 -0
  183. data/generated/google/apis/doubleclicksearch_v2/service.rb +480 -0
  184. data/generated/google/apis/doubleclicksearch_v2.rb +35 -0
  185. data/generated/google/apis/drive_v2/classes.rb +2562 -0
  186. data/generated/google/apis/drive_v2/representations.rb +795 -0
  187. data/generated/google/apis/drive_v2/service.rb +2696 -0
  188. data/generated/google/apis/drive_v2.rb +58 -0
  189. data/generated/google/apis/drive_v3/classes.rb +1534 -0
  190. data/generated/google/apis/drive_v3/representations.rb +497 -0
  191. data/generated/google/apis/drive_v3/service.rb +1541 -0
  192. data/generated/google/apis/drive_v3.rb +55 -0
  193. data/generated/google/apis/fitness_v1/classes.rb +885 -0
  194. data/generated/google/apis/fitness_v1/representations.rb +320 -0
  195. data/generated/google/apis/fitness_v1/service.rb +675 -0
  196. data/generated/google/apis/fitness_v1.rb +49 -0
  197. data/generated/google/apis/fusiontables_v2/classes.rb +1048 -0
  198. data/generated/google/apis/fusiontables_v2/representations.rb +409 -0
  199. data/generated/google/apis/fusiontables_v2/service.rb +1463 -0
  200. data/generated/google/apis/fusiontables_v2.rb +37 -0
  201. data/generated/google/apis/games_configuration_v1configuration/classes.rb +506 -0
  202. data/generated/google/apis/games_configuration_v1configuration/representations.rb +206 -0
  203. data/generated/google/apis/games_configuration_v1configuration/service.rb +565 -0
  204. data/generated/google/apis/games_configuration_v1configuration.rb +34 -0
  205. data/generated/google/apis/games_management_v1management/classes.rb +524 -0
  206. data/generated/google/apis/games_management_v1management/representations.rb +231 -0
  207. data/generated/google/apis/games_management_v1management/service.rb +994 -0
  208. data/generated/google/apis/games_management_v1management.rb +37 -0
  209. data/generated/google/apis/games_v1/classes.rb +4617 -0
  210. data/generated/google/apis/games_v1/representations.rb +1584 -0
  211. data/generated/google/apis/games_v1/service.rb +2290 -0
  212. data/generated/google/apis/games_v1.rb +40 -0
  213. data/generated/google/apis/gan_v1beta1/classes.rb +1428 -0
  214. data/generated/google/apis/gan_v1beta1/representations.rb +428 -0
  215. data/generated/google/apis/gan_v1beta1/service.rb +682 -0
  216. data/generated/google/apis/gan_v1beta1.rb +31 -0
  217. data/generated/google/apis/genomics_v1/classes.rb +2609 -0
  218. data/generated/google/apis/genomics_v1/representations.rb +909 -0
  219. data/generated/google/apis/genomics_v1/service.rb +1676 -0
  220. data/generated/google/apis/genomics_v1.rb +49 -0
  221. data/generated/google/apis/genomics_v1beta2/classes.rb +3288 -0
  222. data/generated/google/apis/genomics_v1beta2/representations.rb +1194 -0
  223. data/generated/google/apis/genomics_v1beta2/service.rb +2392 -0
  224. data/generated/google/apis/genomics_v1beta2.rb +46 -0
  225. data/generated/google/apis/gmail_v1/classes.rb +794 -0
  226. data/generated/google/apis/gmail_v1/representations.rb +339 -0
  227. data/generated/google/apis/gmail_v1/service.rb +1470 -0
  228. data/generated/google/apis/gmail_v1.rb +52 -0
  229. data/generated/google/apis/groupsmigration_v1/classes.rb +51 -0
  230. data/generated/google/apis/groupsmigration_v1/representations.rb +38 -0
  231. data/generated/google/apis/groupsmigration_v1/service.rb +110 -0
  232. data/generated/google/apis/groupsmigration_v1.rb +34 -0
  233. data/generated/google/apis/groupssettings_v1/classes.rb +221 -0
  234. data/generated/google/apis/groupssettings_v1/representations.rb +64 -0
  235. data/generated/google/apis/groupssettings_v1/service.rb +179 -0
  236. data/generated/google/apis/groupssettings_v1.rb +34 -0
  237. data/generated/google/apis/identitytoolkit_v3/classes.rb +1466 -0
  238. data/generated/google/apis/identitytoolkit_v3/representations.rb +509 -0
  239. data/generated/google/apis/identitytoolkit_v3/service.rb +581 -0
  240. data/generated/google/apis/identitytoolkit_v3.rb +31 -0
  241. data/generated/google/apis/kgsearch_v1/classes.rb +59 -0
  242. data/generated/google/apis/kgsearch_v1/representations.rb +39 -0
  243. data/generated/google/apis/kgsearch_v1/service.rb +111 -0
  244. data/{spec/google/api_client/request_spec.rb → generated/google/apis/kgsearch_v1.rb} +16 -13
  245. data/generated/google/apis/licensing_v1/classes.rb +132 -0
  246. data/generated/google/apis/licensing_v1/representations.rb +68 -0
  247. data/generated/google/apis/licensing_v1/service.rb +369 -0
  248. data/generated/google/apis/licensing_v1.rb +34 -0
  249. data/generated/google/apis/logging_v1beta3/classes.rb +1079 -0
  250. data/generated/google/apis/logging_v1beta3/representations.rb +366 -0
  251. data/generated/google/apis/logging_v1beta3/service.rb +1001 -0
  252. data/generated/google/apis/logging_v1beta3.rb +47 -0
  253. data/generated/google/apis/manager_v1beta2/classes.rb +1287 -0
  254. data/generated/google/apis/manager_v1beta2/representations.rb +536 -0
  255. data/generated/google/apis/manager_v1beta2/service.rb +372 -0
  256. data/generated/google/apis/manager_v1beta2.rb +53 -0
  257. data/generated/google/apis/mapsengine_v1/classes.rb +2873 -0
  258. data/generated/google/apis/mapsengine_v1/representations.rb +1235 -0
  259. data/generated/google/apis/mapsengine_v1/service.rb +3388 -0
  260. data/generated/google/apis/mapsengine_v1.rb +38 -0
  261. data/generated/google/apis/mirror_v1/classes.rb +1072 -0
  262. data/generated/google/apis/mirror_v1/representations.rb +350 -0
  263. data/generated/google/apis/mirror_v1/service.rb +977 -0
  264. data/generated/google/apis/mirror_v1.rb +37 -0
  265. data/generated/google/apis/oauth2_v2/classes.rb +245 -0
  266. data/generated/google/apis/oauth2_v2/representations.rb +94 -0
  267. data/generated/google/apis/oauth2_v2/service.rb +199 -0
  268. data/generated/google/apis/oauth2_v2.rb +43 -0
  269. data/generated/google/apis/pagespeedonline_v2/classes.rb +614 -0
  270. data/generated/google/apis/pagespeedonline_v2/representations.rb +244 -0
  271. data/generated/google/apis/pagespeedonline_v2/service.rb +119 -0
  272. data/generated/google/apis/pagespeedonline_v2.rb +32 -0
  273. data/generated/google/apis/partners_v2/classes.rb +942 -0
  274. data/generated/google/apis/partners_v2/representations.rb +402 -0
  275. data/generated/google/apis/partners_v2/service.rb +400 -0
  276. data/generated/google/apis/partners_v2.rb +32 -0
  277. data/generated/google/apis/plus_domains_v1/classes.rb +2609 -0
  278. data/generated/google/apis/plus_domains_v1/representations.rb +987 -0
  279. data/generated/google/apis/plus_domains_v1/service.rb +904 -0
  280. data/generated/google/apis/plus_domains_v1.rb +61 -0
  281. data/generated/google/apis/plus_v1/classes.rb +2094 -0
  282. data/generated/google/apis/plus_v1/representations.rb +805 -0
  283. data/generated/google/apis/plus_v1/service.rb +470 -0
  284. data/generated/google/apis/plus_v1.rb +43 -0
  285. data/generated/google/apis/prediction_v1_6/classes.rb +751 -0
  286. data/generated/google/apis/prediction_v1_6/representations.rb +327 -0
  287. data/generated/google/apis/prediction_v1_6/service.rb +380 -0
  288. data/generated/google/apis/prediction_v1_6.rb +44 -0
  289. data/generated/google/apis/proximitybeacon_v1beta1/classes.rb +639 -0
  290. data/generated/google/apis/proximitybeacon_v1beta1/representations.rb +274 -0
  291. data/generated/google/apis/proximitybeacon_v1beta1/service.rb +591 -0
  292. data/generated/google/apis/proximitybeacon_v1beta1.rb +31 -0
  293. data/generated/google/apis/pubsub_v1/classes.rb +614 -0
  294. data/generated/google/apis/pubsub_v1/representations.rb +281 -0
  295. data/generated/google/apis/pubsub_v1/service.rb +774 -0
  296. data/generated/google/apis/pubsub_v1.rb +37 -0
  297. data/generated/google/apis/pubsub_v1beta2/classes.rb +620 -0
  298. data/generated/google/apis/pubsub_v1beta2/representations.rb +282 -0
  299. data/generated/google/apis/pubsub_v1beta2/service.rb +774 -0
  300. data/generated/google/apis/pubsub_v1beta2.rb +37 -0
  301. data/generated/google/apis/qpx_express_v1/classes.rb +1268 -0
  302. data/generated/google/apis/qpx_express_v1/representations.rb +424 -0
  303. data/generated/google/apis/qpx_express_v1/service.rb +100 -0
  304. data/generated/google/apis/qpx_express_v1.rb +31 -0
  305. data/generated/google/apis/replicapool_v1beta2/classes.rb +631 -0
  306. data/generated/google/apis/replicapool_v1beta2/representations.rb +236 -0
  307. data/generated/google/apis/replicapool_v1beta2/service.rb +608 -0
  308. data/generated/google/apis/replicapool_v1beta2.rb +44 -0
  309. data/generated/google/apis/replicapoolupdater_v1beta1/classes.rb +733 -0
  310. data/generated/google/apis/replicapoolupdater_v1beta1/representations.rb +264 -0
  311. data/generated/google/apis/replicapoolupdater_v1beta1/service.rb +508 -0
  312. data/generated/google/apis/replicapoolupdater_v1beta1.rb +44 -0
  313. data/generated/google/apis/reseller_v1/classes.rb +520 -0
  314. data/generated/google/apis/reseller_v1/representations.rb +200 -0
  315. data/generated/google/apis/reseller_v1/service.rb +623 -0
  316. data/generated/google/apis/reseller_v1.rb +37 -0
  317. data/generated/google/apis/resourceviews_v1beta2/classes.rb +660 -0
  318. data/generated/google/apis/resourceviews_v1beta2/representations.rb +269 -0
  319. data/generated/google/apis/resourceviews_v1beta2/service.rb +563 -0
  320. data/generated/google/apis/resourceviews_v1beta2.rb +50 -0
  321. data/generated/google/apis/script_v1/classes.rb +259 -0
  322. data/generated/google/apis/script_v1/representations.rb +106 -0
  323. data/generated/google/apis/script_v1/service.rb +98 -0
  324. data/generated/google/apis/script_v1.rb +61 -0
  325. data/generated/google/apis/site_verification_v1/classes.rb +185 -0
  326. data/generated/google/apis/site_verification_v1/representations.rb +101 -0
  327. data/generated/google/apis/site_verification_v1/service.rb +315 -0
  328. data/generated/google/apis/site_verification_v1.rb +37 -0
  329. data/generated/google/apis/sqladmin_v1beta4/classes.rb +2001 -0
  330. data/generated/google/apis/sqladmin_v1beta4/representations.rb +758 -0
  331. data/generated/google/apis/sqladmin_v1beta4/service.rb +1625 -0
  332. data/generated/google/apis/sqladmin_v1beta4.rb +37 -0
  333. data/generated/google/apis/storage_v1/classes.rb +1222 -0
  334. data/generated/google/apis/storage_v1/representations.rb +445 -0
  335. data/generated/google/apis/storage_v1/service.rb +1903 -0
  336. data/generated/google/apis/storage_v1.rb +46 -0
  337. data/generated/google/apis/storagetransfer_v1/classes.rb +1046 -0
  338. data/generated/google/apis/storagetransfer_v1/representations.rb +370 -0
  339. data/generated/google/apis/storagetransfer_v1/service.rb +473 -0
  340. data/generated/google/apis/storagetransfer_v1.rb +35 -0
  341. data/generated/google/apis/tagmanager_v1/classes.rb +1384 -0
  342. data/generated/google/apis/tagmanager_v1/representations.rb +515 -0
  343. data/generated/google/apis/tagmanager_v1/service.rb +1817 -0
  344. data/generated/google/apis/tagmanager_v1.rb +52 -0
  345. data/generated/google/apis/taskqueue_v1beta2/classes.rb +254 -0
  346. data/generated/google/apis/taskqueue_v1beta2/representations.rb +114 -0
  347. data/generated/google/apis/taskqueue_v1beta2/service.rb +408 -0
  348. data/generated/google/apis/taskqueue_v1beta2.rb +37 -0
  349. data/generated/google/apis/tasks_v1/classes.rb +296 -0
  350. data/generated/google/apis/tasks_v1/representations.rb +115 -0
  351. data/generated/google/apis/tasks_v1/service.rb +643 -0
  352. data/generated/google/apis/tasks_v1.rb +37 -0
  353. data/generated/google/apis/translate_v2/classes.rb +168 -0
  354. data/generated/google/apis/translate_v2/representations.rb +109 -0
  355. data/generated/google/apis/translate_v2/service.rb +182 -0
  356. data/generated/google/apis/translate_v2.rb +31 -0
  357. data/generated/google/apis/urlshortener_v1/classes.rb +246 -0
  358. data/generated/google/apis/urlshortener_v1/representations.rb +111 -0
  359. data/generated/google/apis/urlshortener_v1/service.rb +176 -0
  360. data/generated/google/apis/urlshortener_v1.rb +34 -0
  361. data/generated/google/apis/webmasters_v3/classes.rb +563 -0
  362. data/generated/google/apis/webmasters_v3/representations.rb +250 -0
  363. data/generated/google/apis/webmasters_v3/service.rb +573 -0
  364. data/generated/google/apis/webmasters_v3.rb +37 -0
  365. data/generated/google/apis/youtube_analytics_v1/classes.rb +546 -0
  366. data/generated/google/apis/youtube_analytics_v1/representations.rb +243 -0
  367. data/generated/google/apis/youtube_analytics_v1/service.rb +562 -0
  368. data/generated/google/apis/youtube_analytics_v1.rb +46 -0
  369. data/generated/google/apis/youtube_v3/classes.rb +8136 -0
  370. data/generated/google/apis/youtube_v3/representations.rb +2838 -0
  371. data/generated/google/apis/youtube_v3/service.rb +4403 -0
  372. data/generated/google/apis/youtube_v3.rb +49 -0
  373. data/generated/google/apis/youtubereporting_v1/classes.rb +258 -0
  374. data/generated/google/apis/youtubereporting_v1/representations.rb +128 -0
  375. data/generated/google/apis/youtubereporting_v1/service.rb +364 -0
  376. data/generated/google/apis/youtubereporting_v1.rb +38 -0
  377. data/google-api-client.gemspec +27 -39
  378. data/lib/google/api_client/auth/installed_app.rb +7 -5
  379. data/lib/google/api_client/auth/key_utils.rb +1 -0
  380. data/lib/google/api_client/auth/storage.rb +4 -2
  381. data/lib/google/api_client/auth/storages/file_store.rb +2 -3
  382. data/lib/google/api_client/auth/storages/redis_store.rb +7 -2
  383. data/lib/google/api_client/client_secrets.rb +4 -5
  384. data/lib/google/apis/core/api_command.rb +135 -0
  385. data/lib/google/apis/core/base_service.rb +317 -0
  386. data/lib/google/apis/core/batch.rb +239 -0
  387. data/lib/google/apis/core/download.rb +94 -0
  388. data/lib/google/apis/core/hashable.rb +44 -0
  389. data/lib/google/apis/core/http_client_adapter.rb +82 -0
  390. data/lib/google/apis/core/http_command.rb +312 -0
  391. data/lib/google/apis/core/json_representation.rb +127 -0
  392. data/lib/google/{api_client/version.rb → apis/core/logging.rb} +12 -8
  393. data/lib/google/apis/core/multipart.rb +187 -0
  394. data/lib/google/apis/core/upload.rb +288 -0
  395. data/lib/google/{api_client → apis}/errors.rb +39 -28
  396. data/lib/google/apis/generator/annotator.rb +295 -0
  397. data/lib/google/apis/generator/helpers.rb +74 -0
  398. data/lib/google/apis/generator/model.rb +143 -0
  399. data/lib/google/apis/generator/template.rb +124 -0
  400. data/lib/google/apis/generator/templates/_class.tmpl +40 -0
  401. data/lib/google/apis/generator/templates/_method.tmpl +92 -0
  402. data/lib/google/apis/generator/templates/_representation.tmpl +51 -0
  403. data/lib/google/apis/generator/templates/_representation_stub.tmpl +15 -0
  404. data/lib/google/apis/generator/templates/_representation_type.tmpl +10 -0
  405. data/lib/google/{api_client/reference.rb → apis/generator/templates/classes.rb.tmpl} +11 -9
  406. data/lib/google/apis/generator/templates/module.rb.tmpl +40 -0
  407. data/lib/google/apis/generator/templates/representations.rb.tmpl +32 -0
  408. data/lib/google/apis/generator/templates/service.rb.tmpl +60 -0
  409. data/lib/google/apis/generator.rb +70 -0
  410. data/lib/google/apis/options.rb +85 -0
  411. data/lib/google/apis/version.rb +39 -0
  412. data/lib/google/apis.rb +48 -0
  413. data/rakelib/metrics.rake +22 -0
  414. data/rakelib/rubocop.rake +10 -0
  415. data/rakelib/spec.rake +11 -0
  416. data/rakelib/yard.rake +11 -0
  417. data/samples/Gemfile +7 -0
  418. data/samples/README.md +51 -0
  419. data/samples/google-api-samples +32 -0
  420. data/samples/lib/base_cli.rb +94 -0
  421. data/samples/lib/samples/analytics.rb +62 -0
  422. data/samples/lib/samples/calendar.rb +83 -0
  423. data/samples/lib/samples/drive.rb +82 -0
  424. data/samples/lib/samples/gmail.rb +50 -0
  425. data/samples/lib/samples/pubsub.rb +114 -0
  426. data/samples/lib/samples/translate.rb +44 -0
  427. data/samples/lib/samples/you_tube.rb +44 -0
  428. data/script/generate +95 -0
  429. data/script/package +8 -0
  430. data/script/release +15 -0
  431. data/spec/fixtures/files/api_names.yaml +3 -0
  432. data/spec/fixtures/files/auth_stored_credentials.json +8 -0
  433. data/spec/fixtures/files/child/.gitignore +0 -0
  434. data/spec/fixtures/files/client_secrets.json +1 -0
  435. data/spec/fixtures/files/invalid.json +1 -0
  436. data/spec/fixtures/files/test.blah +1 -0
  437. data/spec/fixtures/files/test.txt +1 -0
  438. data/spec/fixtures/files/test_api.json +440 -0
  439. data/spec/google/api_client/auth/storage_spec.rb +1 -3
  440. data/spec/google/api_client/auth/storages/file_store_spec.rb +1 -2
  441. data/spec/google/api_client/auth/storages/redis_store_spec.rb +1 -3
  442. data/spec/google/api_client/client_secrets_spec.rb +38 -1
  443. data/spec/google/apis/core/api_command_spec.rb +209 -0
  444. data/spec/google/apis/core/batch_spec.rb +142 -0
  445. data/spec/google/apis/core/download_spec.rb +103 -0
  446. data/spec/google/apis/core/hashable_spec.rb +60 -0
  447. data/spec/google/apis/core/http_command_spec.rb +284 -0
  448. data/spec/google/apis/core/json_representation_spec.rb +192 -0
  449. data/spec/google/apis/core/service_spec.rb +247 -0
  450. data/spec/google/apis/core/upload_spec.rb +300 -0
  451. data/{lib/google/api_client/discovery.rb → spec/google/apis/generated_spec.rb} +13 -5
  452. data/spec/google/apis/generator/generator_spec.rb +272 -0
  453. data/spec/google/apis/logging_spec.rb +45 -0
  454. data/spec/google/apis/options_spec.rb +40 -0
  455. data/spec/integration_tests/adsense_spec.rb +29 -0
  456. data/spec/integration_tests/drive_spec.rb +35 -0
  457. data/spec/integration_tests/pubsub_spec.rb +48 -0
  458. data/spec/integration_tests/url_shortener_spec.rb +45 -0
  459. data/spec/spec_helper/load_path_spec.rb +33 -0
  460. data/spec/spec_helper.rb +131 -44
  461. data/third_party/hurley_patches.rb +103 -0
  462. metadata +533 -175
  463. data/lib/compat/multi_json.rb +0 -19
  464. data/lib/google/api_client/auth/file_storage.rb +0 -59
  465. data/lib/google/api_client/auth/jwt_asserter.rb +0 -126
  466. data/lib/google/api_client/auth/pkcs12.rb +0 -41
  467. data/lib/google/api_client/batch.rb +0 -326
  468. data/lib/google/api_client/charset.rb +0 -33
  469. data/lib/google/api_client/discovery/api.rb +0 -310
  470. data/lib/google/api_client/discovery/media.rb +0 -77
  471. data/lib/google/api_client/discovery/method.rb +0 -363
  472. data/lib/google/api_client/discovery/resource.rb +0 -156
  473. data/lib/google/api_client/discovery/schema.rb +0 -117
  474. data/lib/google/api_client/environment.rb +0 -42
  475. data/lib/google/api_client/gzip.rb +0 -28
  476. data/lib/google/api_client/logging.rb +0 -32
  477. data/lib/google/api_client/media.rb +0 -259
  478. data/lib/google/api_client/railtie.rb +0 -18
  479. data/lib/google/api_client/request.rb +0 -350
  480. data/lib/google/api_client/result.rb +0 -255
  481. data/lib/google/api_client/service/batch.rb +0 -110
  482. data/lib/google/api_client/service/request.rb +0 -144
  483. data/lib/google/api_client/service/resource.rb +0 -40
  484. data/lib/google/api_client/service/result.rb +0 -162
  485. data/lib/google/api_client/service/simple_file_store.rb +0 -151
  486. data/lib/google/api_client/service/stub_generator.rb +0 -61
  487. data/lib/google/api_client/service.rb +0 -233
  488. data/lib/google/api_client.rb +0 -750
  489. data/spec/google/api_client/batch_spec.rb +0 -248
  490. data/spec/google/api_client/discovery_spec.rb +0 -708
  491. data/spec/google/api_client/gzip_spec.rb +0 -98
  492. data/spec/google/api_client/media_spec.rb +0 -178
  493. data/spec/google/api_client/result_spec.rb +0 -207
  494. data/spec/google/api_client/service_account_spec.rb +0 -169
  495. data/spec/google/api_client/service_spec.rb +0 -618
  496. data/spec/google/api_client/simple_file_store_spec.rb +0 -133
  497. data/spec/google/api_client_spec.rb +0 -352
@@ -0,0 +1,94 @@
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
+
15
+ require 'google/apis/core/multipart'
16
+ require 'google/apis/core/api_command'
17
+ require 'google/apis/errors'
18
+ require 'addressable/uri'
19
+
20
+ module Google
21
+ module Apis
22
+ module Core
23
+ # Streaming/resumable media download support
24
+ class DownloadCommand < ApiCommand
25
+ RANGE_HEADER = 'range'
26
+
27
+ # File or IO to write content to
28
+ # @return [String, File, #write]
29
+ attr_accessor :download_dest
30
+
31
+ # Ensure the download destination is a writable stream.
32
+ #
33
+ # @return [void]
34
+ def prepare!
35
+ @state = :start
36
+ @download_url = nil
37
+ @offset = 0
38
+ if download_dest.respond_to?(:write)
39
+ @download_io = download_dest
40
+ @close_io_on_finish = false
41
+ elsif download_dest.is_a?(String)
42
+ @download_io = File.open(download_dest, 'wb')
43
+ @close_io_on_finish = true
44
+ else
45
+ @download_io = StringIO.new('', 'wb')
46
+ @close_io_on_finish = false
47
+ end
48
+ super
49
+ end
50
+
51
+ # Close IO stream when command done. Only closes the stream if it was opened by the command.
52
+ def release!
53
+ @download_io.close if @close_io_on_finish
54
+ end
55
+
56
+ # Execute the upload request once. Overrides the default implementation to handle streaming/chunking
57
+ # of file content.
58
+ #
59
+ # @private
60
+ # @param [Hurley::Client] client
61
+ # HTTP client
62
+ # @yield [result, err] Result or error if block supplied
63
+ # @return [Object]
64
+ # @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
65
+ # @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
66
+ # @raise [Google::Apis::AuthorizationError] Authorization is required
67
+ def execute_once(client, &block)
68
+ client.get(@download_url || url) do |req|
69
+ apply_request_options(req)
70
+ if @offset > 0
71
+ logger.debug { sprintf('Resuming download from offset %d', @offset) }
72
+ req.header[RANGE_HEADER] = sprintf('bytes=%d-', @offset)
73
+ end
74
+ req.on_body(200, 201) do |res, chunk|
75
+ check_status(res.status_code, chunk) unless res.status_code.nil?
76
+ logger.debug { sprintf('Writing chunk (%d bytes)', chunk.length) }
77
+ @offset += chunk.length
78
+ @download_io.write(chunk)
79
+ @download_io.flush
80
+ end
81
+ end
82
+ if @close_io_on_finish
83
+ result = nil
84
+ else
85
+ result = @download_io
86
+ end
87
+ success(result, &block)
88
+ rescue => e
89
+ error(e, rethrow: true, &block)
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,44 @@
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
+
15
+ module Google
16
+ module Apis
17
+ module Core
18
+ # Adds to_hash to objects
19
+ module Hashable
20
+ # Convert object to hash representation
21
+ #
22
+ # @return [Hash]
23
+ def to_h
24
+ Hash[instance_variables.map { |k| [k[1..-1].to_sym, Hashable.process_value(instance_variable_get(k))] }]
25
+ end
26
+
27
+ # Recursively serialize an object
28
+ #
29
+ # @param [Object] val
30
+ # @return [Hash]
31
+ def self.process_value(val)
32
+ case val
33
+ when Hash
34
+ Hash[val.map {|k, v| [k.to_sym, Hashable.process_value(v)] }]
35
+ when Array
36
+ val.map{ |v| Hashable.process_value(v) }
37
+ else
38
+ val.respond_to?(:to_h) ? val.to_h : val
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,82 @@
1
+ require 'httpclient'
2
+ require 'hurley'
3
+ require 'hurley/client'
4
+
5
+ module Google
6
+ module Apis
7
+ module Core
8
+ # HTTPClient adapter for Hurley.
9
+ class HttpClientAdapter
10
+
11
+ def call(request)
12
+ client = ::HTTPClient.new
13
+ configure_client(client, request)
14
+
15
+ begin
16
+ ::Hurley::Response.new(request) do |res|
17
+ http_res = client.request(request.verb.to_s.upcase, request.url.to_s, nil, request.body_io, request.header.to_hash, false) do |http_res, chunk|
18
+ copy_response(http_res, res)
19
+ res.receive_body(chunk)
20
+ end
21
+ copy_response(http_res, res)
22
+ end
23
+ rescue ::HTTPClient::TimeoutError, Errno::ETIMEDOUT
24
+ raise ::Hurley::Timeout, $!
25
+ rescue ::HTTPClient::BadResponseError => err
26
+ if err.message.include?('status 407')
27
+ raise ::Hurley::ConnectionFailed, %{407 "Proxy Authentication Required "}
28
+ else
29
+ raise Hurley::ClientError, $!
30
+ end
31
+ rescue Errno::ECONNREFUSED, EOFError
32
+ raise ::Hurley::ConnectionFailed, $!
33
+ rescue => err
34
+ if defined?(OpenSSL) && OpenSSL::SSL::SSLError === err
35
+ raise Hurley::SSLError, err
36
+ else
37
+ raise
38
+ end
39
+ end
40
+ end
41
+
42
+ def copy_response(http_res, res)
43
+ unless res.status_code
44
+ res.status_code = http_res.status.to_i
45
+ http_res.header.all.each do |(k,v)|
46
+ res.header[k] = v
47
+ end
48
+ end
49
+ end
50
+
51
+ def configure_client(client, request)
52
+ client.transparent_gzip_decompression = true
53
+ if request.options.proxy
54
+ proxy = request.options.proxy
55
+ client.proxy = sprintf('%s:%d', proxy.host, proxy.port)
56
+ if proxy.user && proxy.password
57
+ client.set_proxy_auth proxy.user, proxy.password
58
+ end
59
+ end
60
+ if request.options.timeout
61
+ client.connect_timeout = request.options.timeout
62
+ client.receive_timeout = request.options.timeout
63
+ client.send_timeout = request.options.timeout
64
+ end
65
+ if request.options.open_timeout
66
+ client.connect_timeout = request.options.open_timeout
67
+ client.send_timeout = request.options.open_timeout
68
+ end
69
+ ssl_config = client.ssl_config
70
+ ssl_opts = request.ssl_options
71
+ ssl_config.verify_mode = ssl_opts.openssl_verify_mode
72
+ ssl_config.cert_store = ssl_opts.openssl_cert_store
73
+ ssl_config.add_trust_ca ssl_opts.ca_file if ssl_opts.ca_file
74
+ ssl_config.add_trust_ca ssl_opts.ca_path if ssl_opts.ca_path
75
+ ssl_config.client_cert = ssl_opts.openssl_client_cert if ssl_opts.openssl_client_cert
76
+ ssl_config.client_key = ssl_opts.openssl_client_key if ssl_opts.openssl_client_key
77
+ ssl_config.verify_depth = ssl_opts.verify_depth if ssl_opts.verify_depth
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,312 @@
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
+
15
+ require 'addressable/uri'
16
+ require 'addressable/template'
17
+ require 'google/apis/options'
18
+ require 'google/apis/errors'
19
+ require 'retriable'
20
+ require 'hurley'
21
+ require 'hurley/addressable'
22
+ require 'hurley_patches'
23
+ require 'google/apis/core/logging'
24
+ require 'pp'
25
+
26
+ module Google
27
+ module Apis
28
+ module Core
29
+ # Command for HTTP request/response.
30
+ class HttpCommand
31
+ include Logging
32
+
33
+ RETRIABLE_ERRORS = [Google::Apis::ServerError, Google::Apis::RateLimitError, Google::Apis::TransmissionError]
34
+
35
+ # Request options
36
+ # @return [Google::Apis::RequestOptions]
37
+ attr_accessor :options
38
+
39
+ # HTTP request URL
40
+ # @return [String, Addressable::URI]
41
+ attr_accessor :url
42
+
43
+ # HTTP headers
44
+ # @return [Hurley::Header]
45
+ attr_accessor :header
46
+
47
+ # Request body
48
+ # @return [#read]
49
+ attr_accessor :body
50
+
51
+ # HTTP method
52
+ # @return [symbol]
53
+ attr_accessor :method
54
+
55
+ # HTTP Client
56
+ # @return [Hurley::Client]
57
+ attr_accessor :connection
58
+
59
+ # Query params
60
+ # @return [Hash]
61
+ attr_accessor :query
62
+
63
+ # Path params for URL Template
64
+ # @return [Hash]
65
+ attr_accessor :params
66
+
67
+ # @param [symbol] method
68
+ # HTTP method
69
+ # @param [String,Addressable::URI, Addressable::Template] url
70
+ # HTTP URL or template
71
+ # @param [String, #read] body
72
+ # Request body
73
+ def initialize(method, url, body: nil)
74
+ self.options = Google::Apis::RequestOptions.default.dup
75
+ self.url = url
76
+ self.url = Addressable::Template.new(url) if url.is_a?(String)
77
+ self.method = method
78
+ self.header = Hurley::Header.new
79
+ self.body = body
80
+ self.query = {}
81
+ self.params = {}
82
+ end
83
+
84
+ # Execute the command, retrying as necessary
85
+ #
86
+ # @param [Hurley::Client] client
87
+ # HTTP client
88
+ # @yield [result, err] Result or error if block supplied
89
+ # @return [Object]
90
+ # @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
91
+ # @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
92
+ # @raise [Google::Apis::AuthorizationError] Authorization is required
93
+ def execute(client)
94
+ prepare!
95
+ begin
96
+ Retriable.retriable tries: options.retries + 1,
97
+ base_interval: 1,
98
+ multiplier: 2,
99
+ on: RETRIABLE_ERRORS do |try|
100
+ # This 2nd level retriable only catches auth errors, and supports 1 retry, which allows
101
+ # auth to be re-attempted without having to retry all sorts of other failures like
102
+ # NotFound, etc
103
+ auth_tries = (try == 1 && authorization_refreshable? ? 2 : 1)
104
+ Retriable.retriable tries: auth_tries,
105
+ on: [Google::Apis::AuthorizationError],
106
+ on_retry: proc { |*| refresh_authorization } do
107
+ execute_once(client).tap do |result|
108
+ if block_given?
109
+ yield result, nil
110
+ end
111
+ end
112
+ end
113
+ end
114
+ rescue => e
115
+ if block_given?
116
+ yield nil, e
117
+ else
118
+ raise e
119
+ end
120
+ end
121
+ ensure
122
+ release!
123
+ end
124
+
125
+ # Refresh the authorization authorization after a 401 error
126
+ #
127
+ # @private
128
+ # @return [void]
129
+ def refresh_authorization
130
+ # Handled implicitly by auth lib, here in case need to override
131
+ logger.debug('Retrying after authentication failure')
132
+ end
133
+
134
+ # Check if attached credentials can be automatically refreshed
135
+ # @return [Boolean]
136
+ def authorization_refreshable?
137
+ options.authorization.respond_to?(:apply!)
138
+ end
139
+
140
+ # Prepare the request (e.g. calculate headers, serialize data, etc) before sending
141
+ #
142
+ # @private
143
+ # @return [void]
144
+ def prepare!
145
+ header.update(options.header) if options && options.header
146
+ self.url = url.expand(params) if url.is_a?(Addressable::Template)
147
+ url.query_values = query.merge(url.query_values || {})
148
+ end
149
+
150
+ # Release any resources used by this command
151
+ # @private
152
+ # @return [void]
153
+ def release!
154
+ end
155
+
156
+ # Check the response and either decode body or raise error
157
+ #
158
+ # @param [Fixnum] status
159
+ # HTTP status code of response
160
+ # @param [Hurley::Header] header
161
+ # Response headers
162
+ # @param [String, #read] body
163
+ # Response body
164
+ # @return [Object]
165
+ # Response object
166
+ # @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
167
+ # @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
168
+ # @raise [Google::Apis::AuthorizationError] Authorization is required
169
+ def process_response(status, header, body)
170
+ check_status(status, header, body)
171
+ decode_response_body(header[:content_type], body)
172
+ end
173
+
174
+ # Check the response and raise error if needed
175
+ #
176
+ # @param [Fixnum] status
177
+ # HTTP status code of response
178
+ # @param
179
+ # @param [Hurley::Header] header
180
+ # HTTP response headers
181
+ # @param [String] body
182
+ # HTTP response body
183
+ # @param [String] message
184
+ # Error message text
185
+ # @return [void]
186
+ # @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
187
+ # @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
188
+ # @raise [Google::Apis::AuthorizationError] Authorization is required
189
+ def check_status(status, header = nil, body = nil, message = nil)
190
+ # TODO: 304 Not Modified depends on context...
191
+ case status
192
+ when 200...300
193
+ nil
194
+ when 301, 302, 303, 307
195
+ message ||= sprintf('Redirect to %s', header[:location])
196
+ raise Google::Apis::RedirectError.new(message, status_code: status, header: header, body: body)
197
+ when 401
198
+ message ||= 'Unauthorized'
199
+ raise Google::Apis::AuthorizationError.new(message, status_code: status, header: header, body: body)
200
+ when 304, 400, 402...500
201
+ message ||= 'Invalid request'
202
+ raise Google::Apis::ClientError.new(message, status_code: status, header: header, body: body)
203
+ when 500...600
204
+ message ||= 'Server error'
205
+ raise Google::Apis::ServerError.new(message, status_code: status, header: header, body: body)
206
+ else
207
+ logger.warn(sprintf('Encountered unexpected status code %s', status))
208
+ message ||= 'Unknown error'
209
+ raise Google::Apis::TransmissionError.new(message, status_code: status, header: header, body: body)
210
+ end
211
+ end
212
+
213
+ # Process the actual response body. Intended to be overridden by subclasses
214
+ #
215
+ # @param [String] _content_type
216
+ # Content type of body
217
+ # @param [String, #read] body
218
+ # Response body
219
+ # @return [Object]
220
+ def decode_response_body(_content_type, body)
221
+ body
222
+ end
223
+
224
+ # Process a success response
225
+ # @param [Object] result
226
+ # Result object
227
+ # @return [Object] result if no block given
228
+ # @yield [result, nil] if block given
229
+ def success(result, &block)
230
+ logger.debug { sprintf('Success - %s', PP.pp(result, '')) }
231
+ block.call(result, nil) if block_given?
232
+ result
233
+ end
234
+
235
+ # Process an error response
236
+ # @param [StandardError] err
237
+ # Error object
238
+ # @param [Boolean] rethrow
239
+ # True if error should be raised again after handling
240
+ # @return [void]
241
+ # @yield [nil, err] if block given
242
+ # @raise [StandardError] if no block
243
+ def error(err, rethrow: false, &block)
244
+ logger.debug { sprintf('Error - %s', PP.pp(err, '')) }
245
+ err = Google::Apis::TransmissionError.new(err) if err.is_a?(Hurley::ClientError)
246
+ block.call(nil, err) if block_given?
247
+ fail err if rethrow || block.nil?
248
+ end
249
+
250
+ # Execute the command once.
251
+ #
252
+ # @private
253
+ # @param [Hurley::Client] client
254
+ # HTTP client
255
+ # @return [Object]
256
+ # @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
257
+ # @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
258
+ # @raise [Google::Apis::AuthorizationError] Authorization is required
259
+ def execute_once(client)
260
+ body.rewind if body.respond_to?(:rewind)
261
+ begin
262
+ logger.debug { sprintf('Sending HTTP %s %s', method, url) }
263
+ response = client.send(method, url, body) do |req|
264
+ # Temporary workaround for Hurley bug where the connection preference
265
+ # is ignored and it uses nested anyway
266
+ req.url.query_class = Hurley::Query::Flat
267
+ query.each do | k, v|
268
+ req.url.query[k] = normalize_query_value(v)
269
+ end
270
+ # End workaround
271
+ apply_request_options(req)
272
+ end
273
+ logger.debug { response.status_code }
274
+ logger.debug { response.inspect }
275
+ response = process_response(response.status_code, response.header, response.body)
276
+ success(response)
277
+ rescue => e
278
+ logger.debug { sprintf('Caught error %s', e) }
279
+ error(e, rethrow: true)
280
+ end
281
+ end
282
+
283
+ # Update the request with any specified options.
284
+ # @param [Hurley::Request] req
285
+ # HTTP request
286
+ # @return [void]
287
+ def apply_request_options(req)
288
+ if options.authorization.respond_to?(:apply!)
289
+ options.authorization.apply!(req.header)
290
+ elsif options.authorization.is_a?(String)
291
+ req.header[:authorization] = sprintf('Bearer %s', options.authorization)
292
+ end
293
+ req.header.update(header)
294
+ req.options.timeout = options.timeout_sec
295
+ end
296
+
297
+ private
298
+
299
+ def normalize_query_value(v)
300
+ case v
301
+ when Array
302
+ v.map { |v2| normalize_query_value(v2) }
303
+ when nil
304
+ nil
305
+ else
306
+ v.to_s
307
+ end
308
+ end
309
+ end
310
+ end
311
+ end
312
+ end
@@ -0,0 +1,127 @@
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
+
15
+ require 'representable/json'
16
+ require 'representable/json/hash'
17
+ require 'base64'
18
+ require 'date'
19
+
20
+ module Google
21
+ module Apis
22
+ module Core
23
+ # Support for serializing hashes + propery value/nil/unset tracking
24
+ # To be included in representers as a feature.
25
+ # @private
26
+ module JsonRepresentationSupport
27
+ def self.included(base)
28
+ base.extend(JsonSupport)
29
+ end
30
+
31
+ # @private
32
+ module JsonSupport
33
+ # Returns a customized getter function for Representable. Allows
34
+ # indifferent hash/attribute access.
35
+ #
36
+ # @param [String] name Property name
37
+ # @return [Proc]
38
+ def getter_fn(name)
39
+ ivar_name = "@#{name}".to_sym
40
+ lambda do |_|
41
+ if respond_to?(:[])
42
+ self[name] || instance_variable_get(ivar_name)
43
+ else
44
+ instance_variable_get(ivar_name)
45
+ end
46
+ end
47
+ end
48
+
49
+ # Returns a customized function for Representable that checks whether or not
50
+ # an attribute should be serialized. Allows proper patch semantics by distinguishing
51
+ # between nil & unset values
52
+ #
53
+ # @param [String] name Property name
54
+ # @return [Proc]
55
+ def if_fn(name)
56
+ ivar_name = "@#{name}".to_sym
57
+ lambda do |opts|
58
+ if opts[:skip_undefined]
59
+ if respond_to?(:key?)
60
+ self.key?(name) || instance_variable_defined?(ivar_name)
61
+ else
62
+ instance_variable_defined?(ivar_name)
63
+ end
64
+ else
65
+ true
66
+ end
67
+ end
68
+ end
69
+
70
+ def set_default_options(name, options)
71
+ if options[:base64]
72
+ options[:render_filter] = ->(value, _doc, *_args) { Base64.urlsafe_encode64(value) }
73
+ options[:parse_filter] = ->(fragment, _doc, *_args) { Base64.urlsafe_decode64(fragment) }
74
+ end
75
+ if options[:type] == DateTime
76
+ options[:render_filter] = ->(value, _doc, *_args) { value.is_a?(DateTime) ? value.rfc3339(3) : value.to_s }
77
+ options[:parse_filter] = ->(fragment, _doc, *_args) { DateTime.parse(fragment) }
78
+ end
79
+
80
+ options[:render_nil] = true
81
+ options[:getter] = getter_fn(name)
82
+ options[:if] = if_fn(name)
83
+ end
84
+
85
+ # Define a single value property
86
+ #
87
+ # @param [String] name
88
+ # Property name
89
+ # @param [Hash] options
90
+ def property(name, options = {})
91
+ set_default_options(name, options)
92
+ super(name, options)
93
+ end
94
+
95
+ # Define a collection property
96
+ #
97
+ # @param [String] name
98
+ # Property name
99
+ # @param [Hash] options
100
+ def collection(name, options = {})
101
+ set_default_options(name, options)
102
+ super(name, options)
103
+ end
104
+
105
+ # Define a hash property
106
+ #
107
+ # @param [String] name
108
+ # Property name
109
+ # @param [Hash] options
110
+ def hash(name = nil, options = nil)
111
+ return super() unless name # Allow Object.hash
112
+ set_default_options(name, options)
113
+ super(name, options)
114
+ end
115
+ end
116
+ end
117
+
118
+ # Base decorator for JSON representers
119
+ #
120
+ # @see https://github.com/apotonick/representable
121
+ class JsonRepresentation < Representable::Decorator
122
+ include Representable::JSON
123
+ feature JsonRepresentationSupport
124
+ end
125
+ end
126
+ end
127
+ end
@@ -1,4 +1,4 @@
1
- # Copyright 2010 Google Inc.
1
+ # Copyright 2015 Google Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -12,15 +12,19 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
+ require 'google/apis'
15
16
 
16
17
  module Google
17
- class APIClient
18
- module VERSION
19
- MAJOR = 0
20
- MINOR = 8
21
- TINY = 7
22
- PATCH = nil
23
- STRING = [MAJOR, MINOR, TINY, PATCH].compact.join('.')
18
+ module Apis
19
+ module Core
20
+ # Logging support
21
+ module Logging
22
+ # Get the logger instance
23
+ # @return [Logger]
24
+ def logger
25
+ Google::Apis.logger
26
+ end
27
+ end
24
28
  end
25
29
  end
26
30
  end