google-api-client 0.8.6 → 0.9.3

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 (537) 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 +23 -0
  7. data/.yardopts +12 -0
  8. data/CHANGELOG.md +58 -2
  9. data/CONTRIBUTING.md +31 -0
  10. data/Gemfile +38 -2
  11. data/MIGRATING.md +171 -0
  12. data/README.md +189 -147
  13. data/Rakefile +1 -40
  14. data/api_names.yaml +1088 -0
  15. data/api_names_out.yaml +26978 -0
  16. data/bin/generate-api +109 -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/adexchangebuyer_v1_4/classes.rb +3025 -0
  22. data/generated/google/apis/adexchangebuyer_v1_4/representations.rb +1240 -0
  23. data/generated/google/apis/adexchangebuyer_v1_4/service.rb +1446 -0
  24. data/generated/google/apis/adexchangebuyer_v1_4.rb +35 -0
  25. data/generated/google/apis/adexchangeseller_v2_0/classes.rb +792 -0
  26. data/generated/google/apis/adexchangeseller_v2_0/representations.rb +347 -0
  27. data/generated/google/apis/adexchangeseller_v2_0/service.rb +668 -0
  28. data/generated/google/apis/adexchangeseller_v2_0.rb +38 -0
  29. data/generated/google/apis/admin_datatransfer_v1/classes.rb +267 -0
  30. data/generated/google/apis/admin_datatransfer_v1/representations.rb +130 -0
  31. data/generated/google/apis/admin_datatransfer_v1/service.rb +262 -0
  32. data/generated/google/apis/admin_datatransfer_v1.rb +37 -0
  33. data/generated/google/apis/admin_directory_v1/classes.rb +3141 -0
  34. data/generated/google/apis/admin_directory_v1/representations.rb +1147 -0
  35. data/generated/google/apis/admin_directory_v1/service.rb +3818 -0
  36. data/generated/google/apis/admin_directory_v1.rb +113 -0
  37. data/generated/google/apis/admin_reports_v1/classes.rb +582 -0
  38. data/generated/google/apis/admin_reports_v1/representations.rb +257 -0
  39. data/generated/google/apis/admin_reports_v1/service.rb +336 -0
  40. data/generated/google/apis/admin_reports_v1.rb +38 -0
  41. data/generated/google/apis/adsense_v1_4/classes.rb +1280 -0
  42. data/generated/google/apis/adsense_v1_4/representations.rb +555 -0
  43. data/generated/google/apis/adsense_v1_4/service.rb +1714 -0
  44. data/generated/google/apis/adsense_v1_4.rb +38 -0
  45. data/generated/google/apis/adsensehost_v4_1/classes.rb +837 -0
  46. data/generated/google/apis/adsensehost_v4_1/representations.rb +367 -0
  47. data/generated/google/apis/adsensehost_v4_1/service.rb +1164 -0
  48. data/generated/google/apis/adsensehost_v4_1.rb +35 -0
  49. data/generated/google/apis/analytics_v3/classes.rb +5118 -0
  50. data/generated/google/apis/analytics_v3/representations.rb +1850 -0
  51. data/generated/google/apis/analytics_v3/service.rb +3568 -0
  52. data/generated/google/apis/analytics_v3.rb +49 -0
  53. data/generated/google/apis/androidenterprise_v1/classes.rb +1443 -0
  54. data/generated/google/apis/androidenterprise_v1/representations.rb +614 -0
  55. data/generated/google/apis/androidenterprise_v1/service.rb +2607 -0
  56. data/generated/google/apis/androidenterprise_v1.rb +35 -0
  57. data/generated/google/apis/androidpublisher_v2/classes.rb +1411 -0
  58. data/generated/google/apis/androidpublisher_v2/representations.rb +738 -0
  59. data/generated/google/apis/androidpublisher_v2/service.rb +2338 -0
  60. data/generated/google/apis/androidpublisher_v2.rb +34 -0
  61. data/generated/google/apis/appengine_v1beta4/classes.rb +1585 -0
  62. data/generated/google/apis/appengine_v1beta4/representations.rb +542 -0
  63. data/generated/google/apis/appengine_v1beta4/service.rb +477 -0
  64. data/generated/google/apis/appengine_v1beta4.rb +35 -0
  65. data/generated/google/apis/appengine_v1beta5/classes.rb +1544 -0
  66. data/generated/google/apis/appengine_v1beta5/representations.rb +594 -0
  67. data/generated/google/apis/appengine_v1beta5/service.rb +521 -0
  68. data/generated/google/apis/appengine_v1beta5.rb +35 -0
  69. data/generated/google/apis/appsactivity_v1/classes.rb +392 -0
  70. data/generated/google/apis/appsactivity_v1/representations.rb +206 -0
  71. data/generated/google/apis/appsactivity_v1/service.rb +128 -0
  72. data/generated/google/apis/appsactivity_v1.rb +46 -0
  73. data/generated/google/apis/appstate_v1/classes.rb +154 -0
  74. data/generated/google/apis/appstate_v1/representations.rb +87 -0
  75. data/generated/google/apis/appstate_v1/service.rb +260 -0
  76. data/generated/google/apis/appstate_v1.rb +34 -0
  77. data/generated/google/apis/autoscaler_v1beta2/classes.rb +747 -0
  78. data/generated/google/apis/autoscaler_v1beta2/representations.rb +313 -0
  79. data/generated/google/apis/autoscaler_v1beta2/service.rb +478 -0
  80. data/generated/google/apis/autoscaler_v1beta2.rb +38 -0
  81. data/generated/google/apis/bigquery_v2/classes.rb +2503 -0
  82. data/generated/google/apis/bigquery_v2/representations.rb +914 -0
  83. data/generated/google/apis/bigquery_v2/service.rb +982 -0
  84. data/generated/google/apis/bigquery_v2.rb +52 -0
  85. data/generated/google/apis/blogger_v3/classes.rb +1354 -0
  86. data/generated/google/apis/blogger_v3/representations.rb +632 -0
  87. data/generated/google/apis/blogger_v3/service.rb +1587 -0
  88. data/generated/google/apis/blogger_v3.rb +37 -0
  89. data/generated/google/apis/books_v1/classes.rb +4006 -0
  90. data/generated/google/apis/books_v1/representations.rb +1742 -0
  91. data/generated/google/apis/books_v1/service.rb +2293 -0
  92. data/generated/google/apis/books_v1.rb +34 -0
  93. data/generated/google/apis/calendar_v3/classes.rb +1742 -0
  94. data/generated/google/apis/calendar_v3/representations.rb +631 -0
  95. data/generated/google/apis/calendar_v3/service.rb +1968 -0
  96. data/generated/google/apis/calendar_v3.rb +37 -0
  97. data/generated/google/apis/civicinfo_v2/classes.rb +1127 -0
  98. data/generated/google/apis/civicinfo_v2/representations.rb +423 -0
  99. data/generated/google/apis/civicinfo_v2/service.rb +279 -0
  100. data/generated/google/apis/civicinfo_v2.rb +31 -0
  101. data/generated/google/apis/classroom_v1/classes.rb +512 -0
  102. data/generated/google/apis/classroom_v1/representations.rb +245 -0
  103. data/generated/google/apis/classroom_v1/service.rb +970 -0
  104. data/generated/google/apis/classroom_v1.rb +49 -0
  105. data/generated/google/apis/classroom_v1beta1/classes.rb +447 -0
  106. data/generated/google/apis/classroom_v1beta1/representations.rb +190 -0
  107. data/generated/google/apis/classroom_v1beta1/service.rb +791 -0
  108. data/generated/google/apis/classroom_v1beta1.rb +49 -0
  109. data/generated/google/apis/cloudbilling_v1/classes.rb +169 -0
  110. data/generated/google/apis/cloudbilling_v1/representations.rb +87 -0
  111. data/generated/google/apis/cloudbilling_v1/service.rb +258 -0
  112. data/generated/google/apis/cloudbilling_v1.rb +35 -0
  113. data/generated/google/apis/cloudbuild_v1/classes.rb +521 -0
  114. data/generated/google/apis/cloudbuild_v1/representations.rb +214 -0
  115. data/generated/google/apis/cloudbuild_v1/service.rb +278 -0
  116. data/generated/google/apis/cloudbuild_v1.rb +35 -0
  117. data/generated/google/apis/clouddebugger_v2/classes.rb +1004 -0
  118. data/generated/google/apis/clouddebugger_v2/representations.rb +464 -0
  119. data/generated/google/apis/clouddebugger_v2/service.rb +370 -0
  120. data/generated/google/apis/clouddebugger_v2.rb +41 -0
  121. data/generated/google/apis/cloudlatencytest_v2/classes.rb +195 -0
  122. data/generated/google/apis/cloudlatencytest_v2/representations.rb +127 -0
  123. data/generated/google/apis/cloudlatencytest_v2/service.rb +135 -0
  124. data/generated/google/apis/cloudlatencytest_v2.rb +34 -0
  125. data/generated/google/apis/cloudmonitoring_v2beta2/classes.rb +679 -0
  126. data/generated/google/apis/cloudmonitoring_v2beta2/representations.rb +353 -0
  127. data/generated/google/apis/cloudmonitoring_v2beta2/service.rb +452 -0
  128. data/generated/google/apis/cloudmonitoring_v2beta2.rb +37 -0
  129. data/generated/google/apis/cloudresourcemanager_v1beta1/classes.rb +450 -0
  130. data/generated/google/apis/cloudresourcemanager_v1beta1/representations.rb +226 -0
  131. data/generated/google/apis/cloudresourcemanager_v1beta1/service.rb +626 -0
  132. data/generated/google/apis/cloudresourcemanager_v1beta1.rb +38 -0
  133. data/generated/google/apis/cloudtrace_v1/classes.rb +188 -0
  134. data/generated/google/apis/cloudtrace_v1/representations.rb +102 -0
  135. data/generated/google/apis/cloudtrace_v1/service.rb +190 -0
  136. data/generated/google/apis/cloudtrace_v1.rb +35 -0
  137. data/generated/google/apis/clouduseraccounts_beta/classes.rb +823 -0
  138. data/generated/google/apis/clouduseraccounts_beta/representations.rb +351 -0
  139. data/generated/google/apis/clouduseraccounts_beta/service.rb +854 -0
  140. data/generated/google/apis/clouduseraccounts_beta.rb +43 -0
  141. data/generated/google/apis/compute_beta/classes.rb +9741 -0
  142. data/generated/google/apis/compute_beta/representations.rb +3649 -0
  143. data/generated/google/apis/compute_beta/service.rb +10636 -0
  144. data/generated/google/apis/compute_beta.rb +49 -0
  145. data/generated/google/apis/compute_v1/classes.rb +9095 -0
  146. data/generated/google/apis/compute_v1/representations.rb +3389 -0
  147. data/generated/google/apis/compute_v1/service.rb +9627 -0
  148. data/generated/google/apis/compute_v1.rb +49 -0
  149. data/generated/google/apis/container_v1/classes.rb +463 -0
  150. data/generated/google/apis/container_v1/representations.rb +195 -0
  151. data/generated/google/apis/container_v1/service.rb +367 -0
  152. data/generated/google/apis/container_v1.rb +35 -0
  153. data/generated/google/apis/container_v1beta1/classes.rb +466 -0
  154. data/generated/google/apis/container_v1beta1/representations.rb +177 -0
  155. data/generated/google/apis/container_v1beta1/service.rb +394 -0
  156. data/generated/google/apis/container_v1beta1.rb +35 -0
  157. data/generated/google/apis/content_v2/classes.rb +6114 -0
  158. data/generated/google/apis/content_v2/representations.rb +2624 -0
  159. data/generated/google/apis/content_v2/service.rb +2338 -0
  160. data/generated/google/apis/content_v2.rb +35 -0
  161. data/generated/google/apis/coordinate_v1/classes.rb +669 -0
  162. data/generated/google/apis/coordinate_v1/representations.rb +321 -0
  163. data/generated/google/apis/coordinate_v1/service.rb +678 -0
  164. data/generated/google/apis/coordinate_v1.rb +37 -0
  165. data/generated/google/apis/customsearch_v1/classes.rb +771 -0
  166. data/generated/google/apis/customsearch_v1/representations.rb +302 -0
  167. data/generated/google/apis/customsearch_v1/service.rb +207 -0
  168. data/{lib/google/api_client/auth/compute_service_account.rb → generated/google/apis/customsearch_v1.rb} +13 -10
  169. data/generated/google/apis/dataproc_v1/classes.rb +1590 -0
  170. data/generated/google/apis/dataproc_v1/representations.rb +653 -0
  171. data/generated/google/apis/dataproc_v1/service.rb +719 -0
  172. data/generated/google/apis/dataproc_v1.rb +43 -0
  173. data/generated/google/apis/datastore_v1beta2/classes.rb +1186 -0
  174. data/generated/google/apis/datastore_v1beta2/representations.rb +594 -0
  175. data/generated/google/apis/datastore_v1beta2/service.rb +294 -0
  176. data/generated/google/apis/datastore_v1beta2.rb +40 -0
  177. data/generated/google/apis/deploymentmanager_v2/classes.rb +1162 -0
  178. data/generated/google/apis/deploymentmanager_v2/representations.rb +508 -0
  179. data/generated/google/apis/deploymentmanager_v2/service.rb +862 -0
  180. data/generated/google/apis/deploymentmanager_v2.rb +44 -0
  181. data/generated/google/apis/deploymentmanager_v2beta2/classes.rb +843 -0
  182. data/generated/google/apis/deploymentmanager_v2beta2/representations.rb +306 -0
  183. data/generated/google/apis/deploymentmanager_v2beta2/service.rb +689 -0
  184. data/generated/google/apis/deploymentmanager_v2beta2.rb +44 -0
  185. data/generated/google/apis/dfareporting_v2_1/classes.rb +10770 -0
  186. data/generated/google/apis/dfareporting_v2_1/representations.rb +3438 -0
  187. data/generated/google/apis/dfareporting_v2_1/service.rb +8585 -0
  188. data/generated/google/apis/dfareporting_v2_1.rb +37 -0
  189. data/generated/google/apis/dfareporting_v2_3/classes.rb +10830 -0
  190. data/generated/google/apis/dfareporting_v2_3/representations.rb +3829 -0
  191. data/generated/google/apis/dfareporting_v2_3/service.rb +8581 -0
  192. data/generated/google/apis/dfareporting_v2_3.rb +37 -0
  193. data/generated/google/apis/discovery_v1/classes.rb +961 -0
  194. data/generated/google/apis/discovery_v1/representations.rb +397 -0
  195. data/generated/google/apis/discovery_v1/service.rb +142 -0
  196. data/generated/google/apis/discovery_v1.rb +32 -0
  197. data/generated/google/apis/dns_v1/classes.rb +406 -0
  198. data/generated/google/apis/dns_v1/representations.rb +167 -0
  199. data/generated/google/apis/dns_v1/service.rb +454 -0
  200. data/generated/google/apis/dns_v1.rb +44 -0
  201. data/generated/google/apis/doubleclickbidmanager_v1/classes.rb +802 -0
  202. data/generated/google/apis/doubleclickbidmanager_v1/representations.rb +371 -0
  203. data/generated/google/apis/doubleclickbidmanager_v1/service.rb +374 -0
  204. data/generated/google/apis/doubleclickbidmanager_v1.rb +31 -0
  205. data/generated/google/apis/doubleclicksearch_v2/classes.rb +958 -0
  206. data/generated/google/apis/doubleclicksearch_v2/representations.rb +350 -0
  207. data/generated/google/apis/doubleclicksearch_v2/service.rb +480 -0
  208. data/generated/google/apis/doubleclicksearch_v2.rb +35 -0
  209. data/generated/google/apis/drive_v2/classes.rb +2569 -0
  210. data/generated/google/apis/drive_v2/representations.rb +878 -0
  211. data/generated/google/apis/drive_v2/service.rb +2740 -0
  212. data/generated/google/apis/drive_v2.rb +58 -0
  213. data/generated/google/apis/drive_v3/classes.rb +1541 -0
  214. data/generated/google/apis/drive_v3/representations.rb +548 -0
  215. data/generated/google/apis/drive_v3/service.rb +1542 -0
  216. data/generated/google/apis/drive_v3.rb +55 -0
  217. data/generated/google/apis/fitness_v1/classes.rb +885 -0
  218. data/generated/google/apis/fitness_v1/representations.rb +360 -0
  219. data/generated/google/apis/fitness_v1/service.rb +675 -0
  220. data/generated/google/apis/fitness_v1.rb +49 -0
  221. data/generated/google/apis/fusiontables_v2/classes.rb +1048 -0
  222. data/generated/google/apis/fusiontables_v2/representations.rb +457 -0
  223. data/generated/google/apis/fusiontables_v2/service.rb +1463 -0
  224. data/generated/google/apis/fusiontables_v2.rb +37 -0
  225. data/generated/google/apis/games_configuration_v1configuration/classes.rb +506 -0
  226. data/generated/google/apis/games_configuration_v1configuration/representations.rb +228 -0
  227. data/generated/google/apis/games_configuration_v1configuration/service.rb +565 -0
  228. data/generated/google/apis/games_configuration_v1configuration.rb +34 -0
  229. data/generated/google/apis/games_management_v1management/classes.rb +533 -0
  230. data/generated/google/apis/games_management_v1management/representations.rb +262 -0
  231. data/generated/google/apis/games_management_v1management/service.rb +994 -0
  232. data/generated/google/apis/games_management_v1management.rb +37 -0
  233. data/generated/google/apis/games_v1/classes.rb +4626 -0
  234. data/generated/google/apis/games_v1/representations.rb +1783 -0
  235. data/generated/google/apis/games_v1/service.rb +2290 -0
  236. data/generated/google/apis/games_v1.rb +40 -0
  237. data/generated/google/apis/gan_v1beta1/classes.rb +1428 -0
  238. data/generated/google/apis/gan_v1beta1/representations.rb +462 -0
  239. data/generated/google/apis/gan_v1beta1/service.rb +682 -0
  240. data/generated/google/apis/gan_v1beta1.rb +31 -0
  241. data/generated/google/apis/genomics_v1/classes.rb +2609 -0
  242. data/generated/google/apis/genomics_v1/representations.rb +1029 -0
  243. data/generated/google/apis/genomics_v1/service.rb +1676 -0
  244. data/generated/google/apis/genomics_v1.rb +49 -0
  245. data/generated/google/apis/genomics_v1beta2/classes.rb +3288 -0
  246. data/generated/google/apis/genomics_v1beta2/representations.rb +1194 -0
  247. data/generated/google/apis/genomics_v1beta2/service.rb +2392 -0
  248. data/generated/google/apis/genomics_v1beta2.rb +46 -0
  249. data/generated/google/apis/gmail_v1/classes.rb +794 -0
  250. data/generated/google/apis/gmail_v1/representations.rb +383 -0
  251. data/generated/google/apis/gmail_v1/service.rb +1470 -0
  252. data/generated/google/apis/gmail_v1.rb +52 -0
  253. data/generated/google/apis/groupsmigration_v1/classes.rb +51 -0
  254. data/generated/google/apis/groupsmigration_v1/representations.rb +40 -0
  255. data/generated/google/apis/groupsmigration_v1/service.rb +110 -0
  256. data/generated/google/apis/groupsmigration_v1.rb +34 -0
  257. data/generated/google/apis/groupssettings_v1/classes.rb +221 -0
  258. data/generated/google/apis/groupssettings_v1/representations.rb +66 -0
  259. data/generated/google/apis/groupssettings_v1/service.rb +179 -0
  260. data/generated/google/apis/groupssettings_v1.rb +34 -0
  261. data/generated/google/apis/identitytoolkit_v3/classes.rb +1637 -0
  262. data/generated/google/apis/identitytoolkit_v3/representations.rb +618 -0
  263. data/generated/google/apis/identitytoolkit_v3/service.rb +616 -0
  264. data/generated/google/apis/identitytoolkit_v3.rb +31 -0
  265. data/generated/google/apis/kgsearch_v1/classes.rb +59 -0
  266. data/generated/google/apis/kgsearch_v1/representations.rb +41 -0
  267. data/generated/google/apis/kgsearch_v1/service.rb +111 -0
  268. data/{spec/google/api_client/request_spec.rb → generated/google/apis/kgsearch_v1.rb} +16 -13
  269. data/generated/google/apis/licensing_v1/classes.rb +132 -0
  270. data/generated/google/apis/licensing_v1/representations.rb +74 -0
  271. data/generated/google/apis/licensing_v1/service.rb +369 -0
  272. data/generated/google/apis/licensing_v1.rb +34 -0
  273. data/generated/google/apis/logging_v1beta3/classes.rb +1079 -0
  274. data/generated/google/apis/logging_v1beta3/representations.rb +366 -0
  275. data/generated/google/apis/logging_v1beta3/service.rb +1001 -0
  276. data/generated/google/apis/logging_v1beta3.rb +47 -0
  277. data/generated/google/apis/logging_v2beta1/classes.rb +990 -0
  278. data/generated/google/apis/logging_v2beta1/representations.rb +377 -0
  279. data/generated/google/apis/logging_v2beta1/service.rb +547 -0
  280. data/generated/google/apis/logging_v2beta1.rb +47 -0
  281. data/generated/google/apis/manager_v1beta2/classes.rb +1287 -0
  282. data/generated/google/apis/manager_v1beta2/representations.rb +606 -0
  283. data/generated/google/apis/manager_v1beta2/service.rb +372 -0
  284. data/generated/google/apis/manager_v1beta2.rb +53 -0
  285. data/generated/google/apis/mirror_v1/classes.rb +1072 -0
  286. data/generated/google/apis/mirror_v1/representations.rb +390 -0
  287. data/generated/google/apis/mirror_v1/service.rb +977 -0
  288. data/generated/google/apis/mirror_v1.rb +37 -0
  289. data/generated/google/apis/oauth2_v2/classes.rb +245 -0
  290. data/generated/google/apis/oauth2_v2/representations.rb +102 -0
  291. data/generated/google/apis/oauth2_v2/service.rb +199 -0
  292. data/generated/google/apis/oauth2_v2.rb +43 -0
  293. data/generated/google/apis/pagespeedonline_v2/classes.rb +614 -0
  294. data/generated/google/apis/pagespeedonline_v2/representations.rb +272 -0
  295. data/generated/google/apis/pagespeedonline_v2/service.rb +119 -0
  296. data/generated/google/apis/pagespeedonline_v2.rb +32 -0
  297. data/generated/google/apis/partners_v2/classes.rb +942 -0
  298. data/generated/google/apis/partners_v2/representations.rb +454 -0
  299. data/generated/google/apis/partners_v2/service.rb +400 -0
  300. data/generated/google/apis/partners_v2.rb +32 -0
  301. data/generated/google/apis/people_v1/classes.rb +1521 -0
  302. data/generated/google/apis/people_v1/representations.rb +663 -0
  303. data/generated/google/apis/people_v1/service.rb +189 -0
  304. data/generated/google/apis/people_v1.rb +59 -0
  305. data/generated/google/apis/plus_domains_v1/classes.rb +2609 -0
  306. data/generated/google/apis/plus_domains_v1/representations.rb +1111 -0
  307. data/generated/google/apis/plus_domains_v1/service.rb +904 -0
  308. data/generated/google/apis/plus_domains_v1.rb +61 -0
  309. data/generated/google/apis/plus_v1/classes.rb +2094 -0
  310. data/generated/google/apis/plus_v1/representations.rb +907 -0
  311. data/generated/google/apis/plus_v1/service.rb +470 -0
  312. data/generated/google/apis/plus_v1.rb +43 -0
  313. data/generated/google/apis/prediction_v1_6/classes.rb +751 -0
  314. data/generated/google/apis/prediction_v1_6/representations.rb +369 -0
  315. data/generated/google/apis/prediction_v1_6/service.rb +380 -0
  316. data/generated/google/apis/prediction_v1_6.rb +44 -0
  317. data/generated/google/apis/proximitybeacon_v1beta1/classes.rb +639 -0
  318. data/generated/google/apis/proximitybeacon_v1beta1/representations.rb +312 -0
  319. data/generated/google/apis/proximitybeacon_v1beta1/service.rb +591 -0
  320. data/generated/google/apis/proximitybeacon_v1beta1.rb +31 -0
  321. data/generated/google/apis/pubsub_v1/classes.rb +614 -0
  322. data/generated/google/apis/pubsub_v1/representations.rb +323 -0
  323. data/generated/google/apis/pubsub_v1/service.rb +774 -0
  324. data/generated/google/apis/pubsub_v1.rb +37 -0
  325. data/generated/google/apis/pubsub_v1beta2/classes.rb +620 -0
  326. data/generated/google/apis/pubsub_v1beta2/representations.rb +282 -0
  327. data/generated/google/apis/pubsub_v1beta2/service.rb +774 -0
  328. data/generated/google/apis/pubsub_v1beta2.rb +37 -0
  329. data/generated/google/apis/qpx_express_v1/classes.rb +1268 -0
  330. data/generated/google/apis/qpx_express_v1/representations.rb +472 -0
  331. data/generated/google/apis/qpx_express_v1/service.rb +100 -0
  332. data/generated/google/apis/qpx_express_v1.rb +31 -0
  333. data/generated/google/apis/replicapool_v1beta2/classes.rb +631 -0
  334. data/generated/google/apis/replicapool_v1beta2/representations.rb +264 -0
  335. data/generated/google/apis/replicapool_v1beta2/service.rb +608 -0
  336. data/generated/google/apis/replicapool_v1beta2.rb +44 -0
  337. data/generated/google/apis/replicapoolupdater_v1beta1/classes.rb +733 -0
  338. data/generated/google/apis/replicapoolupdater_v1beta1/representations.rb +294 -0
  339. data/generated/google/apis/replicapoolupdater_v1beta1/service.rb +508 -0
  340. data/generated/google/apis/replicapoolupdater_v1beta1.rb +44 -0
  341. data/generated/google/apis/reseller_v1/classes.rb +526 -0
  342. data/generated/google/apis/reseller_v1/representations.rb +223 -0
  343. data/generated/google/apis/reseller_v1/service.rb +623 -0
  344. data/generated/google/apis/reseller_v1.rb +37 -0
  345. data/generated/google/apis/resourceviews_v1beta2/classes.rb +660 -0
  346. data/generated/google/apis/resourceviews_v1beta2/representations.rb +301 -0
  347. data/generated/google/apis/resourceviews_v1beta2/service.rb +563 -0
  348. data/generated/google/apis/resourceviews_v1beta2.rb +50 -0
  349. data/generated/google/apis/script_v1/classes.rb +259 -0
  350. data/generated/google/apis/script_v1/representations.rb +118 -0
  351. data/generated/google/apis/script_v1/service.rb +98 -0
  352. data/generated/google/apis/script_v1.rb +61 -0
  353. data/generated/google/apis/site_verification_v1/classes.rb +185 -0
  354. data/generated/google/apis/site_verification_v1/representations.rb +113 -0
  355. data/generated/google/apis/site_verification_v1/service.rb +315 -0
  356. data/generated/google/apis/site_verification_v1.rb +37 -0
  357. data/generated/google/apis/sqladmin_v1beta4/classes.rb +2030 -0
  358. data/generated/google/apis/sqladmin_v1beta4/representations.rb +856 -0
  359. data/generated/google/apis/sqladmin_v1beta4/service.rb +1625 -0
  360. data/generated/google/apis/sqladmin_v1beta4.rb +37 -0
  361. data/generated/google/apis/storage_v1/classes.rb +1222 -0
  362. data/generated/google/apis/storage_v1/representations.rb +497 -0
  363. data/generated/google/apis/storage_v1/service.rb +1903 -0
  364. data/generated/google/apis/storage_v1.rb +46 -0
  365. data/generated/google/apis/storagetransfer_v1/classes.rb +1046 -0
  366. data/generated/google/apis/storagetransfer_v1/representations.rb +418 -0
  367. data/generated/google/apis/storagetransfer_v1/service.rb +473 -0
  368. data/generated/google/apis/storagetransfer_v1.rb +35 -0
  369. data/generated/google/apis/tagmanager_v1/classes.rb +1494 -0
  370. data/generated/google/apis/tagmanager_v1/representations.rb +611 -0
  371. data/generated/google/apis/tagmanager_v1/service.rb +2119 -0
  372. data/generated/google/apis/tagmanager_v1.rb +52 -0
  373. data/generated/google/apis/taskqueue_v1beta2/classes.rb +254 -0
  374. data/generated/google/apis/taskqueue_v1beta2/representations.rb +126 -0
  375. data/generated/google/apis/taskqueue_v1beta2/service.rb +408 -0
  376. data/generated/google/apis/taskqueue_v1beta2.rb +37 -0
  377. data/generated/google/apis/tasks_v1/classes.rb +296 -0
  378. data/generated/google/apis/tasks_v1/representations.rb +125 -0
  379. data/generated/google/apis/tasks_v1/service.rb +643 -0
  380. data/generated/google/apis/tasks_v1.rb +37 -0
  381. data/generated/google/apis/translate_v2/classes.rb +168 -0
  382. data/generated/google/apis/translate_v2/representations.rb +121 -0
  383. data/generated/google/apis/translate_v2/service.rb +182 -0
  384. data/generated/google/apis/translate_v2.rb +31 -0
  385. data/generated/google/apis/urlshortener_v1/classes.rb +246 -0
  386. data/generated/google/apis/urlshortener_v1/representations.rb +121 -0
  387. data/generated/google/apis/urlshortener_v1/service.rb +176 -0
  388. data/generated/google/apis/urlshortener_v1.rb +34 -0
  389. data/generated/google/apis/vision_v1/classes.rb +1259 -0
  390. data/generated/google/apis/vision_v1/representations.rb +418 -0
  391. data/generated/google/apis/vision_v1/service.rb +91 -0
  392. data/generated/google/apis/vision_v1.rb +37 -0
  393. data/generated/google/apis/webmasters_v3/classes.rb +563 -0
  394. data/generated/google/apis/webmasters_v3/representations.rb +282 -0
  395. data/generated/google/apis/webmasters_v3/service.rb +573 -0
  396. data/generated/google/apis/webmasters_v3.rb +37 -0
  397. data/generated/google/apis/youtube_analytics_v1/classes.rb +546 -0
  398. data/generated/google/apis/youtube_analytics_v1/representations.rb +273 -0
  399. data/generated/google/apis/youtube_analytics_v1/service.rb +562 -0
  400. data/generated/google/apis/youtube_analytics_v1.rb +46 -0
  401. data/generated/google/apis/youtube_v3/classes.rb +8071 -0
  402. data/generated/google/apis/youtube_v3/representations.rb +3134 -0
  403. data/generated/google/apis/youtube_v3/service.rb +4403 -0
  404. data/generated/google/apis/youtube_v3.rb +49 -0
  405. data/generated/google/apis/youtubereporting_v1/classes.rb +258 -0
  406. data/generated/google/apis/youtubereporting_v1/representations.rb +144 -0
  407. data/generated/google/apis/youtubereporting_v1/service.rb +364 -0
  408. data/generated/google/apis/youtubereporting_v1.rb +38 -0
  409. data/google-api-client.gemspec +25 -39
  410. data/lib/google/api_client/auth/installed_app.rb +7 -5
  411. data/lib/google/api_client/auth/key_utils.rb +1 -0
  412. data/lib/google/api_client/auth/storage.rb +4 -2
  413. data/lib/google/api_client/auth/storages/file_store.rb +2 -3
  414. data/lib/google/api_client/auth/storages/redis_store.rb +7 -2
  415. data/lib/google/api_client/client_secrets.rb +7 -9
  416. data/lib/google/apis/core/api_command.rb +136 -0
  417. data/lib/google/apis/core/base_service.rb +317 -0
  418. data/lib/google/apis/core/batch.rb +239 -0
  419. data/lib/google/apis/core/download.rb +94 -0
  420. data/lib/google/apis/core/hashable.rb +44 -0
  421. data/lib/google/apis/core/http_client_adapter.rb +82 -0
  422. data/lib/google/apis/core/http_command.rb +328 -0
  423. data/lib/google/apis/core/json_representation.rb +145 -0
  424. data/lib/google/{api_client/version.rb → apis/core/logging.rb} +12 -8
  425. data/lib/google/apis/core/multipart.rb +187 -0
  426. data/lib/google/apis/core/upload.rb +289 -0
  427. data/lib/google/{api_client → apis}/errors.rb +39 -28
  428. data/lib/google/apis/generator/annotator.rb +295 -0
  429. data/lib/google/apis/generator/helpers.rb +74 -0
  430. data/lib/google/apis/generator/model.rb +143 -0
  431. data/lib/google/apis/generator/template.rb +124 -0
  432. data/lib/google/apis/generator/templates/_class.tmpl +40 -0
  433. data/lib/google/apis/generator/templates/_method.tmpl +92 -0
  434. data/lib/google/apis/generator/templates/_representation.tmpl +51 -0
  435. data/lib/google/apis/generator/templates/_representation_stub.tmpl +17 -0
  436. data/lib/google/apis/generator/templates/_representation_type.tmpl +10 -0
  437. data/lib/google/{api_client/reference.rb → apis/generator/templates/classes.rb.tmpl} +11 -9
  438. data/lib/google/apis/generator/templates/module.rb.tmpl +40 -0
  439. data/lib/google/apis/generator/templates/representations.rb.tmpl +32 -0
  440. data/lib/google/apis/generator/templates/service.rb.tmpl +60 -0
  441. data/lib/google/apis/generator.rb +70 -0
  442. data/lib/google/apis/options.rb +85 -0
  443. data/lib/google/apis/version.rb +39 -0
  444. data/lib/google/apis.rb +48 -0
  445. data/rakelib/metrics.rake +22 -0
  446. data/rakelib/rubocop.rake +10 -0
  447. data/rakelib/spec.rake +11 -0
  448. data/rakelib/yard.rake +11 -0
  449. data/samples/cli/Gemfile +7 -0
  450. data/samples/cli/README.md +51 -0
  451. data/samples/cli/google-api-samples +32 -0
  452. data/samples/cli/lib/base_cli.rb +95 -0
  453. data/samples/cli/lib/samples/analytics.rb +62 -0
  454. data/samples/cli/lib/samples/androidpublisher.rb +47 -0
  455. data/samples/cli/lib/samples/calendar.rb +83 -0
  456. data/samples/cli/lib/samples/drive.rb +82 -0
  457. data/samples/cli/lib/samples/gmail.rb +50 -0
  458. data/samples/cli/lib/samples/pubsub.rb +114 -0
  459. data/samples/cli/lib/samples/translate.rb +44 -0
  460. data/samples/cli/lib/samples/you_tube.rb +44 -0
  461. data/samples/web/Gemfile +7 -0
  462. data/samples/web/README.md +44 -0
  463. data/samples/web/app.rb +120 -0
  464. data/samples/web/views/calendar.erb +34 -0
  465. data/{lib/google/api_client/service_account.rb → samples/web/views/drive.erb} +20 -8
  466. data/samples/web/views/home.erb +35 -0
  467. data/samples/web/views/layout.erb +40 -0
  468. data/script/generate +100 -0
  469. data/script/package +8 -0
  470. data/script/release +15 -0
  471. data/spec/fixtures/files/api_names.yaml +3 -0
  472. data/spec/fixtures/files/auth_stored_credentials.json +8 -0
  473. data/spec/fixtures/files/child/.gitignore +0 -0
  474. data/spec/fixtures/files/client_secrets.json +1 -0
  475. data/spec/fixtures/files/invalid.json +1 -0
  476. data/spec/fixtures/files/test.blah +1 -0
  477. data/spec/fixtures/files/test.txt +1 -0
  478. data/spec/fixtures/files/test_api.json +440 -0
  479. data/spec/google/api_client/auth/storage_spec.rb +1 -3
  480. data/spec/google/api_client/auth/storages/file_store_spec.rb +1 -2
  481. data/spec/google/api_client/auth/storages/redis_store_spec.rb +1 -3
  482. data/spec/google/api_client/client_secrets_spec.rb +338 -2
  483. data/spec/google/apis/core/api_command_spec.rb +209 -0
  484. data/spec/google/apis/core/batch_spec.rb +142 -0
  485. data/spec/google/apis/core/download_spec.rb +103 -0
  486. data/spec/google/apis/core/hashable_spec.rb +60 -0
  487. data/spec/google/apis/core/http_command_spec.rb +303 -0
  488. data/spec/google/apis/core/json_representation_spec.rb +199 -0
  489. data/spec/google/apis/core/service_spec.rb +247 -0
  490. data/spec/google/apis/core/upload_spec.rb +300 -0
  491. data/{lib/google/api_client/discovery.rb → spec/google/apis/generated_spec.rb} +13 -5
  492. data/spec/google/apis/generator/generator_spec.rb +324 -0
  493. data/spec/google/apis/logging_spec.rb +45 -0
  494. data/spec/google/apis/options_spec.rb +40 -0
  495. data/spec/integration_tests/adsense_spec.rb +29 -0
  496. data/spec/integration_tests/drive_spec.rb +35 -0
  497. data/spec/integration_tests/pubsub_spec.rb +48 -0
  498. data/spec/integration_tests/url_shortener_spec.rb +45 -0
  499. data/spec/spec_helper/load_path_spec.rb +33 -0
  500. data/spec/spec_helper.rb +131 -44
  501. data/third_party/hurley_patches.rb +103 -0
  502. metadata +563 -188
  503. data/lib/compat/multi_json.rb +0 -19
  504. data/lib/google/api_client/auth/file_storage.rb +0 -59
  505. data/lib/google/api_client/auth/jwt_asserter.rb +0 -126
  506. data/lib/google/api_client/auth/pkcs12.rb +0 -41
  507. data/lib/google/api_client/batch.rb +0 -326
  508. data/lib/google/api_client/charset.rb +0 -33
  509. data/lib/google/api_client/discovery/api.rb +0 -310
  510. data/lib/google/api_client/discovery/media.rb +0 -77
  511. data/lib/google/api_client/discovery/method.rb +0 -363
  512. data/lib/google/api_client/discovery/resource.rb +0 -156
  513. data/lib/google/api_client/discovery/schema.rb +0 -117
  514. data/lib/google/api_client/environment.rb +0 -42
  515. data/lib/google/api_client/gzip.rb +0 -28
  516. data/lib/google/api_client/logging.rb +0 -32
  517. data/lib/google/api_client/media.rb +0 -259
  518. data/lib/google/api_client/railtie.rb +0 -18
  519. data/lib/google/api_client/request.rb +0 -350
  520. data/lib/google/api_client/result.rb +0 -255
  521. data/lib/google/api_client/service/batch.rb +0 -110
  522. data/lib/google/api_client/service/request.rb +0 -144
  523. data/lib/google/api_client/service/resource.rb +0 -40
  524. data/lib/google/api_client/service/result.rb +0 -162
  525. data/lib/google/api_client/service/simple_file_store.rb +0 -151
  526. data/lib/google/api_client/service/stub_generator.rb +0 -61
  527. data/lib/google/api_client/service.rb +0 -233
  528. data/lib/google/api_client.rb +0 -750
  529. data/spec/google/api_client/batch_spec.rb +0 -248
  530. data/spec/google/api_client/discovery_spec.rb +0 -708
  531. data/spec/google/api_client/gzip_spec.rb +0 -98
  532. data/spec/google/api_client/media_spec.rb +0 -178
  533. data/spec/google/api_client/result_spec.rb +0 -207
  534. data/spec/google/api_client/service_account_spec.rb +0 -169
  535. data/spec/google/api_client/service_spec.rb +0 -618
  536. data/spec/google/api_client/simple_file_store_spec.rb +0 -133
  537. data/spec/google/api_client_spec.rb +0 -352
@@ -0,0 +1,289 @@
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/http_command'
17
+ require 'google/apis/core/api_command'
18
+ require 'google/apis/errors'
19
+ require 'addressable/uri'
20
+ require 'mime-types'
21
+ require 'tempfile'
22
+
23
+ module Google
24
+ module Apis
25
+ module Core
26
+ # Extension of Hurley's UploadIO to add length accessor
27
+ class UploadIO < Hurley::UploadIO
28
+ OCTET_STREAM_CONTENT_TYPE = 'application/octet-stream'
29
+
30
+ # Get the length of the stream
31
+ # @return [Fixnum]
32
+ def length
33
+ io.respond_to?(:length) ? io.length : File.size(local_path)
34
+ end
35
+
36
+ # Create a new instance given a file path
37
+ # @param [String, File] file_name
38
+ # Path to file
39
+ # @param [String] content_type
40
+ # Optional content type. If nil, will attempt to auto-detect
41
+ # @return [Google::Apis::Core::UploadIO]
42
+ def self.from_file(file_name, content_type: nil)
43
+ if content_type.nil?
44
+ type = MIME::Types.of(file_name)
45
+ content_type = type.first.content_type unless type.nil? || type.empty?
46
+ end
47
+ new(file_name, content_type || OCTET_STREAM_CONTENT_TYPE)
48
+ end
49
+
50
+ # Wraps an IO stream in UploadIO
51
+ # @param [#read] io
52
+ # IO to wrap
53
+ # @param [String] content_type
54
+ # Optional content type.
55
+ # @return [Google::Apis::Core::UploadIO]
56
+ def self.from_io(io, content_type: OCTET_STREAM_CONTENT_TYPE)
57
+ new(io, content_type)
58
+ end
59
+ end
60
+
61
+ # Base upload command. Not intended to be used directly
62
+ # @private
63
+ class BaseUploadCommand < ApiCommand
64
+ UPLOAD_PROTOCOL_HEADER = 'X-Goog-Upload-Protocol'
65
+ UPLOAD_CONTENT_TYPE_HEADER = 'X-Goog-Upload-Header-Content-Type'
66
+ UPLOAD_CONTENT_LENGTH = 'X-Goog-Upload-Header-Content-Length'
67
+
68
+ # File name or IO containing the content to upload
69
+ # @return [String, File, #read]
70
+ attr_accessor :upload_source
71
+
72
+ # Content type of the upload material
73
+ # @return [String]
74
+ attr_accessor :upload_content_type
75
+
76
+ # Content, as UploadIO
77
+ # @return [Google::Apis::Core::UploadIO]
78
+ attr_accessor :upload_io
79
+
80
+ # Ensure the content is readable and wrapped in an {{Google::Apis::Core::UploadIO}} instance.
81
+ #
82
+ # @return [void]
83
+ # @raise [Google::Apis::ClientError] if upload source is invalid
84
+ def prepare!
85
+ super
86
+ if streamable?(upload_source)
87
+ self.upload_io = UploadIO.from_io(upload_source, content_type: upload_content_type)
88
+ @close_io_on_finish = false
89
+ elsif upload_source.is_a?(String)
90
+ self.upload_io = UploadIO.from_file(upload_source, content_type: upload_content_type)
91
+ @close_io_on_finish = true
92
+ else
93
+ fail Google::Apis::ClientError, 'Invalid upload source'
94
+ end
95
+ end
96
+
97
+ # Close IO stream when command done. Only closes the stream if it was opened by the command.
98
+ def release!
99
+ upload_io.close if @close_io_on_finish
100
+ end
101
+
102
+ private
103
+
104
+ def streamable?(upload_source)
105
+ upload_source.is_a?(IO) || upload_source.is_a?(StringIO) || upload_source.is_a?(Tempfile)
106
+ end
107
+ end
108
+
109
+ # Implementation of the raw upload protocol
110
+ class RawUploadCommand < BaseUploadCommand
111
+ RAW_PROTOCOL = 'raw'
112
+
113
+ # Ensure the content is readable and wrapped in an {{Google::Apis::Core::UploadIO}} instance.
114
+ #
115
+ # @return [void]
116
+ # @raise [Google::Apis::ClientError] if upload source is invalid
117
+ def prepare!
118
+ super
119
+ self.body = upload_io
120
+ header[UPLOAD_PROTOCOL_HEADER] = RAW_PROTOCOL
121
+ header[UPLOAD_CONTENT_TYPE_HEADER] = upload_io.content_type
122
+ end
123
+ end
124
+
125
+ # Implementation of the multipart upload protocol
126
+ class MultipartUploadCommand < BaseUploadCommand
127
+ UPLOAD_BOUNDARY = 'RubyApiClientUpload'
128
+ MULTIPART_PROTOCOL = 'multipart'
129
+ MULTIPART_RELATED = 'multipart/related'
130
+
131
+ # Encode the multipart request
132
+ #
133
+ # @return [void]
134
+ # @raise [Google::Apis::ClientError] if upload source is invalid
135
+ def prepare!
136
+ super
137
+ @multipart = Multipart.new(boundary: UPLOAD_BOUNDARY, content_type: MULTIPART_RELATED)
138
+ @multipart.add_json(body)
139
+ @multipart.add_upload(upload_io)
140
+ self.body = @multipart.assemble
141
+ header[:content_type] = @multipart.content_type
142
+ header[UPLOAD_PROTOCOL_HEADER] = MULTIPART_PROTOCOL
143
+ end
144
+ end
145
+
146
+ # Implementation of the resumable upload protocol
147
+ class ResumableUploadCommand < BaseUploadCommand
148
+ UPLOAD_COMMAND_HEADER = 'X-Goog-Upload-Command'
149
+ UPLOAD_OFFSET_HEADER = 'X-Goog-Upload-Offset'
150
+ BYTES_RECEIVED_HEADER = 'X-Goog-Upload-Size-Received'
151
+ UPLOAD_URL_HEADER = 'X-Goog-Upload-URL'
152
+ UPLOAD_STATUS_HEADER = 'X-Goog-Upload-Status'
153
+ STATUS_ACTIVE = 'active'
154
+ STATUS_FINAL = 'final'
155
+ STATUS_CANCELLED = 'cancelled'
156
+ RESUMABLE = 'resumable'
157
+ START_COMMAND = 'start'
158
+ QUERY_COMMAND = 'query'
159
+ UPLOAD_COMMAND = 'upload, finalize'
160
+
161
+ # Reset upload to initial state.
162
+ #
163
+ # @return [void]
164
+ # @raise [Google::Apis::ClientError] if upload source is invalid
165
+ def prepare!
166
+ @state = :start
167
+ @upload_url = nil
168
+ @offset = 0
169
+ super
170
+ end
171
+
172
+ # Check the to see if the upload is complete or needs to be resumed.
173
+ #
174
+ # @param [Fixnum] status
175
+ # HTTP status code of response
176
+ # @param [Hurley::Header] header
177
+ # Response headers
178
+ # @param [String, #read] body
179
+ # Response body
180
+ # @return [Object]
181
+ # Response object
182
+ # @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
183
+ # @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
184
+ # @raise [Google::Apis::AuthorizationError] Authorization is required
185
+ def process_response(status, header, body)
186
+ @offset = Integer(header[BYTES_RECEIVED_HEADER]) if header.key?(BYTES_RECEIVED_HEADER)
187
+ @upload_url = header[UPLOAD_URL_HEADER] if header.key?(UPLOAD_URL_HEADER)
188
+ upload_status = header[UPLOAD_STATUS_HEADER]
189
+ logger.debug { sprintf('Upload status %s', upload_status) }
190
+ if upload_status == STATUS_ACTIVE
191
+ @state = :active
192
+ elsif upload_status == STATUS_FINAL
193
+ @state = :final
194
+ elsif upload_status == STATUS_CANCELLED
195
+ @state = :cancelled
196
+ fail Google::Apis::ClientError, body
197
+ end
198
+ super(status, header, body)
199
+ end
200
+
201
+ # Send the start command to initiate the upload
202
+ #
203
+ # @param [Hurley::Client] client
204
+ # HTTP client
205
+ # @return [Hurley::Response]
206
+ # @raise [Google::Apis::ServerError] Unable to send the request
207
+ def send_start_command(client)
208
+ logger.debug { sprintf('Sending upload start command to %s', url) }
209
+ client.send(method, url, body) do |req|
210
+ apply_request_options(req)
211
+ req.header[UPLOAD_PROTOCOL_HEADER] = RESUMABLE
212
+ req.header[UPLOAD_COMMAND_HEADER] = START_COMMAND
213
+ req.header[UPLOAD_CONTENT_LENGTH] = upload_io.length.to_s
214
+ req.header[UPLOAD_CONTENT_TYPE_HEADER] = upload_io.content_type
215
+ end
216
+ rescue => e
217
+ raise Google::Apis::ServerError, e.message
218
+ end
219
+
220
+ # Query for the status of an incomplete upload
221
+ #
222
+ # @param [Hurley::Client] client
223
+ # HTTP client
224
+ # @return [Hurley::Response]
225
+ # @raise [Google::Apis::ServerError] Unable to send the request
226
+ def send_query_command(client)
227
+ logger.debug { sprintf('Sending upload query command to %s', @upload_url) }
228
+ client.post(@upload_url, nil) do |req|
229
+ apply_request_options(req)
230
+ req.header[UPLOAD_COMMAND_HEADER] = QUERY_COMMAND
231
+ end
232
+ end
233
+
234
+ # Send the actual content
235
+ #
236
+ # @param [Hurley::Client] client
237
+ # HTTP client
238
+ # @return [Hurley::Response]
239
+ # @raise [Google::Apis::ServerError] Unable to send the request
240
+ def send_upload_command(client)
241
+ logger.debug { sprintf('Sending upload command to %s', @upload_url) }
242
+ content = upload_io
243
+ content.pos = @offset
244
+ client.post(@upload_url, content) do |req|
245
+ apply_request_options(req)
246
+ req.header[UPLOAD_COMMAND_HEADER] = UPLOAD_COMMAND
247
+ req.header[UPLOAD_OFFSET_HEADER] = @offset.to_s
248
+ end
249
+ end
250
+
251
+ # Execute the upload request once. This will typically perform two HTTP requests -- one to initiate or query
252
+ # for the status of the upload, the second to send the (remaining) content.
253
+ #
254
+ # @private
255
+ # @param [Hurley::Client] client
256
+ # HTTP client
257
+ # @yield [result, err] Result or error if block supplied
258
+ # @return [Object]
259
+ # @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
260
+ # @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
261
+ # @raise [Google::Apis::AuthorizationError] Authorization is required
262
+ def execute_once(client, &block)
263
+ case @state
264
+ when :start
265
+ response = send_start_command(client)
266
+ result = process_response(response.status_code, response.header, response.body)
267
+ when :active
268
+ response = send_query_command(client)
269
+ result = process_response(response.status_code, response.header, response.body)
270
+ when :cancelled, :final
271
+ error(@last_error, rethrow: true, &block)
272
+ end
273
+ if @state == :active
274
+ response = send_upload_command(client)
275
+ result = process_response(response.status_code, response.header, response.body)
276
+ end
277
+
278
+ success(result, &block) if @state == :final
279
+ rescue => e
280
+ # Some APIs like Youtube generate non-retriable 401 errors and mark
281
+ # the upload as finalized. Save the error just in case we get
282
+ # retried.
283
+ @last_error = e
284
+ error(e, rethrow: true, &block)
285
+ end
286
+ end
287
+ end
288
+ end
289
+ 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,54 +12,65 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
-
16
15
  module Google
17
- class APIClient
18
- ##
16
+ module Apis
17
+ # Base error, capable of wrapping another
18
+ class Error < StandardError
19
+ attr_reader :status_code
20
+ attr_reader :header
21
+ attr_reader :body
22
+
23
+ def initialize(err, status_code: nil, header: nil, body: nil)
24
+ @cause = nil
25
+
26
+ if err.respond_to?(:backtrace)
27
+ super(err.message)
28
+ @cause = err
29
+ else
30
+ super(err.to_s)
31
+ end
32
+ @status_code = status_code
33
+ @header = header.dup unless header.nil?
34
+ @body = body
35
+ end
36
+
37
+ def backtrace
38
+ if @cause
39
+ @cause.backtrace
40
+ else
41
+ super
42
+ end
43
+ end
44
+ end
45
+
19
46
  # An error which is raised when there is an unexpected response or other
20
47
  # transport error that prevents an operation from succeeding.
21
- class TransmissionError < StandardError
22
- attr_reader :result
23
- def initialize(message = nil, result = nil)
24
- super(message)
25
- @result = result
26
- end
48
+ class TransmissionError < Error
27
49
  end
28
50
 
29
- ##
30
51
  # An exception that is raised if a redirect is required
31
52
  #
32
- class RedirectError < TransmissionError
53
+ class RedirectError < Error
33
54
  end
34
55
 
35
- ##
36
- # An exception that is raised if a method is called with missing or
37
- # invalid parameter values.
38
- class ValidationError < StandardError
56
+ # A 4xx class HTTP error occurred.
57
+ class ClientError < Error
39
58
  end
40
59
 
41
- ##
42
60
  # A 4xx class HTTP error occurred.
43
- class ClientError < TransmissionError
61
+ class RateLimitError < Error
44
62
  end
45
63
 
46
- ##
47
64
  # A 401 HTTP error occurred.
48
- class AuthorizationError < ClientError
65
+ class AuthorizationError < Error
49
66
  end
50
67
 
51
- ##
52
68
  # A 5xx class HTTP error occurred.
53
- class ServerError < TransmissionError
54
- end
55
-
56
- ##
57
- # An exception that is raised if an ID token could not be validated.
58
- class InvalidIDTokenError < StandardError
69
+ class ServerError < Error
59
70
  end
60
71
 
61
72
  # Error class for problems in batch requests.
62
- class BatchError < StandardError
73
+ class BatchError < Error
63
74
  end
64
75
  end
65
76
  end
@@ -0,0 +1,295 @@
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 'logger'
16
+ require 'erb'
17
+ require 'yaml'
18
+ require 'json'
19
+ require 'active_support/inflector'
20
+ require 'google/apis/core/logging'
21
+ require 'google/apis/generator/template'
22
+ require 'google/apis/generator/model'
23
+ require 'google/apis/generator/helpers'
24
+ require 'addressable/uri'
25
+
26
+ module Google
27
+ module Apis
28
+ # @private
29
+ class Generator
30
+ # Helper for picking names for methods, properties, types, etc. Performs various normaliations
31
+ # as well as allows for overriding individual names from a configuration file for cases
32
+ # where algorithmic approaches produce poor APIs.
33
+ class Names
34
+ include Google::Apis::Core::Logging
35
+ include NameHelpers
36
+
37
+ def initialize(file_path = nil)
38
+ if file_path
39
+ logger.info { sprintf('Loading API names from %s', file_path) }
40
+ @names = YAML.load(File.read(file_path)) || {}
41
+ else
42
+ @names = {}
43
+ end
44
+ @path = []
45
+ end
46
+
47
+ def with_path(path)
48
+ @path.push(path)
49
+ begin
50
+ yield
51
+ ensure
52
+ @path.pop
53
+ end
54
+ end
55
+
56
+ def infer_parameter_name
57
+ pick_name(normalize_param_name(@path.last))
58
+ end
59
+
60
+ # Determine the ruby method name to generate for a given method in discovery.
61
+ # @param [Google::Apis::DiscoveryV1::RestMethod] method
62
+ # Fragment of the discovery doc describing the method
63
+ def infer_method_name(method)
64
+ pick_name(infer_method_name_for_rpc(method) || infer_method_name_from_id(method))
65
+ end
66
+
67
+ def infer_property_name
68
+ pick_name(normalize_property_name(@path.last))
69
+ end
70
+
71
+ def pick_name(alt_name)
72
+ preferred_name = @names[key]
73
+ if preferred_name && preferred_name == alt_name
74
+ logger.warn { sprintf("Unnecessary name override '%s': %s", key, alt_name) }
75
+ elsif preferred_name.nil?
76
+ preferred_name = @names[key] = alt_name
77
+ end
78
+ preferred_name
79
+ end
80
+
81
+ def []=(key, value)
82
+ @names[key] = value
83
+ end
84
+
85
+ def dump
86
+ YAML.dump(@names)
87
+ end
88
+
89
+ def key
90
+ @path.reduce('') { |a, e| a + '/' + e }
91
+ end
92
+
93
+ def option(opt_name)
94
+ @names[sprintf('%s?%s', key, opt_name)]
95
+ end
96
+
97
+ private
98
+
99
+ # For RPC style methods, pick a name based off the request objects.
100
+ # @param [Google::Apis::DiscoveryV1::RestMethod] method
101
+ # Fragment of the discovery doc describing the method
102
+ def infer_method_name_for_rpc(method)
103
+ return nil if method.request.nil?
104
+ parts = method.id.split('.')
105
+ parts.shift
106
+ verb = ActiveSupport::Inflector.underscore(parts.pop)
107
+ match = method.request._ref.match(/(.*)(?i:request)/)
108
+ return nil if match.nil?
109
+ name = ActiveSupport::Inflector.underscore(match[1])
110
+ return nil unless name == verb || name.start_with?(verb + '_')
111
+ if !parts.empty?
112
+ resource_name = ActiveSupport::Inflector.singularize(parts.pop)
113
+ resource_name = ActiveSupport::Inflector.underscore(resource_name)
114
+ if !name.include?(resource_name)
115
+ name = name.split('_').insert(1, resource_name).join('_')
116
+ end
117
+ end
118
+ name
119
+ end
120
+
121
+ # For REST style methods, build a method name from the verb/resource(s) in the method
122
+ # id. IDs are in the form <api>.<resource>.<verb>
123
+ # @param [Google::Apis::DiscoveryV1::RestMethod] method
124
+ # Fragment of the discovery doc describing the method
125
+ def infer_method_name_from_id(method)
126
+ parts = method.id.split('.')
127
+ parts.shift
128
+ verb = ActiveSupport::Inflector.underscore(parts.pop)
129
+ return verb if parts.empty?
130
+ resource_name = ActiveSupport::Inflector.underscore(parts.pop)
131
+ if pluralize_method?(verb)
132
+ resource_name = ActiveSupport::Inflector.pluralize(resource_name)
133
+ else
134
+ resource_name = ActiveSupport::Inflector.singularize(resource_name)
135
+ end
136
+ if parts.empty?
137
+ resource_path = resource_name
138
+ else
139
+ resource_path = parts.map do |p|
140
+ p = ActiveSupport::Inflector.singularize(p)
141
+ ActiveSupport::Inflector.underscore(p)
142
+ end.join('_') + '_' + resource_name
143
+ end
144
+ method_name = verb.split('_').insert(1, resource_path.split('_')).join('_')
145
+ method_name
146
+ end
147
+ end
148
+
149
+ # Modifies an API description to support ruby code generation. Primarily does:
150
+ # - Ensure all names follow appopriate ruby conventions
151
+ # - Maps types to ruby types, classes, and resolves $refs
152
+ # - Attempts to simplify names where possible to make APIs more sensible
153
+ class Annotator
154
+ include NameHelpers
155
+ include Google::Apis::Core::Logging
156
+
157
+ # Don't expose these in the API directly.
158
+ PARAMETER_BLACKLIST = %w(alt access_token bearer_token oauth_token pp prettyPrint
159
+ $.xgafv callback upload_protocol uploadType)
160
+
161
+ # Prepare the API for the templates.
162
+ # @param [Google::Apis::DiscoveryV1::RestDescription] description
163
+ # API Description
164
+ def self.process(description, api_names = nil)
165
+ Annotator.new(description, api_names).annotate_api
166
+ end
167
+
168
+ # @param [Google::Apis::DiscoveryV1::RestDescription] description
169
+ # API Description
170
+ # @param [Google::Api::Generator::Names] api_names
171
+ # Name helper instanace
172
+ def initialize(description, api_names = nil)
173
+ api_names = Names.new if api_names.nil?
174
+ @names = api_names
175
+ @rest_description = description
176
+ @registered_types = []
177
+ @deferred_types = []
178
+ @strip_prefixes = []
179
+ @all_methods = {}
180
+ @path = []
181
+ end
182
+
183
+ def annotate_api
184
+ @names.with_path(@rest_description.id) do
185
+ @strip_prefixes << @rest_description.name
186
+ if @rest_description.auth
187
+ @rest_description.auth.oauth2.scopes.each do |key, value|
188
+ value.constant = constantize_scope(key)
189
+ end
190
+ end
191
+ @rest_description.force_alt_json = @names.option('force_alt_json')
192
+ @rest_description.parameters.reject! { |k, _v| PARAMETER_BLACKLIST.include?(k) }
193
+ annotate_parameters(@rest_description.parameters)
194
+ annotate_resource(@rest_description.name, @rest_description)
195
+ @rest_description.schemas.each do |k, v|
196
+ annotate_type(k, v, @rest_description)
197
+ end unless @rest_description.schemas.nil?
198
+ end
199
+ resolve_type_references
200
+ resolve_variants
201
+ end
202
+
203
+ def annotate_type(name, type, parent)
204
+ @names.with_path(name) do
205
+ type.name = name
206
+ type.path = @names.key
207
+ type.generated_name = @names.infer_property_name
208
+ if type.type == 'object'
209
+ type.generated_class_name = ActiveSupport::Inflector.camelize(type.generated_name)
210
+ @registered_types << type
211
+ end
212
+ type.parent = parent
213
+ @deferred_types << type if type._ref
214
+ type.properties.each do |k, v|
215
+ annotate_type(k, v, type)
216
+ end unless type.properties.nil?
217
+ if type.additional_properties
218
+ type.type = 'hash'
219
+ annotate_type(ActiveSupport::Inflector.singularize(type.generated_name), type.additional_properties,
220
+ parent)
221
+ end
222
+ annotate_type(ActiveSupport::Inflector.singularize(type.generated_name), type.items, parent) if type.items
223
+ end
224
+ end
225
+
226
+ def annotate_resource(name, resource, parent_resource = nil)
227
+ @strip_prefixes << name
228
+ resource.parent = parent_resource unless parent_resource.nil?
229
+ resource.api_methods.each do |_k, v|
230
+ annotate_method(v, resource)
231
+ end unless resource.api_methods.nil?
232
+
233
+ resource.resources.each do |k, v|
234
+ annotate_resource(k, v, resource)
235
+ end unless resource.resources.nil?
236
+ end
237
+
238
+ def annotate_method(method, parent_resource = nil)
239
+ @names.with_path(method.id) do
240
+ method.parent = parent_resource
241
+ method.generated_name = @names.infer_method_name(method)
242
+ check_duplicate_method(method)
243
+ annotate_parameters(method.parameters)
244
+ end
245
+ end
246
+
247
+ def annotate_parameters(parameters)
248
+ parameters.each do |key, value|
249
+ @names.with_path(key) do
250
+ value.name = key
251
+ value.generated_name = @names.infer_parameter_name
252
+ @deferred_types << value if value._ref
253
+ end
254
+ end unless parameters.nil?
255
+ end
256
+
257
+ def resolve_type_references
258
+ @deferred_types.each do |type|
259
+ if type._ref
260
+ ref = @rest_description.schemas[type._ref]
261
+ ivars = ref.instance_variables - [:@name, :@generated_name]
262
+ (ivars).each do |var|
263
+ type.instance_variable_set(var, ref.instance_variable_get(var))
264
+ end
265
+ end
266
+ end
267
+ end
268
+
269
+ def resolve_variants
270
+ @deferred_types.each do |type|
271
+ if type.variant
272
+ type.variant.map.each do |v|
273
+ ref = @rest_description.schemas[v._ref]
274
+ ref.base_ref = type
275
+ ref.discriminant = type.variant.discriminant
276
+ ref.discriminant_value = v.type_value
277
+ end
278
+ end
279
+ end
280
+ end
281
+
282
+ def check_duplicate_method(m)
283
+ if @all_methods.include?(m.generated_name)
284
+ logger.error do
285
+ sprintf('Duplicate method %s generated, path %s',
286
+ m.generated_name, @names.key)
287
+ end
288
+ fail 'Duplicate name generated'
289
+ end
290
+ @all_methods[m.generated_name] = m
291
+ end
292
+ end
293
+ end
294
+ end
295
+ end