google-api-client 0.9.8 → 0.10.2

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 (320) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +15 -8
  3. data/CHANGELOG.md +84 -0
  4. data/Gemfile +10 -2
  5. data/README.md +10 -2
  6. data/api_names.yaml +37172 -135
  7. data/generated/google/apis/adexchangebuyer2_v2beta1.rb +35 -0
  8. data/generated/google/apis/adexchangebuyer2_v2beta1/classes.rb +1200 -0
  9. data/generated/google/apis/adexchangebuyer2_v2beta1/representations.rb +526 -0
  10. data/generated/google/apis/adexchangebuyer2_v2beta1/service.rb +844 -0
  11. data/generated/google/apis/adexchangebuyer_v1_4.rb +1 -1
  12. data/generated/google/apis/adexchangebuyer_v1_4/classes.rb +310 -28
  13. data/generated/google/apis/adexchangebuyer_v1_4/representations.rb +84 -0
  14. data/generated/google/apis/adexchangebuyer_v1_4/service.rb +60 -8
  15. data/generated/google/apis/adexchangeseller_v2_0.rb +2 -3
  16. data/generated/google/apis/adexchangeseller_v2_0/service.rb +1 -2
  17. data/generated/google/apis/admin_directory_v1.rb +1 -1
  18. data/generated/google/apis/admin_directory_v1/classes.rb +206 -0
  19. data/generated/google/apis/admin_directory_v1/representations.rb +63 -0
  20. data/generated/google/apis/admin_directory_v1/service.rb +41 -2
  21. data/generated/google/apis/admin_reports_v1.rb +5 -5
  22. data/generated/google/apis/admin_reports_v1/service.rb +6 -6
  23. data/generated/google/apis/adsense_v1_4.rb +1 -1
  24. data/generated/google/apis/adsense_v1_4/classes.rb +1 -1
  25. data/generated/google/apis/adsensehost_v4_1.rb +1 -1
  26. data/generated/google/apis/adsensehost_v4_1/classes.rb +1 -2
  27. data/generated/google/apis/analytics_v3.rb +1 -1
  28. data/generated/google/apis/analytics_v3/classes.rb +379 -3
  29. data/generated/google/apis/analytics_v3/representations.rb +136 -0
  30. data/generated/google/apis/analytics_v3/service.rb +256 -0
  31. data/generated/google/apis/analyticsreporting_v4.rb +1 -1
  32. data/generated/google/apis/analyticsreporting_v4/classes.rb +858 -823
  33. data/generated/google/apis/analyticsreporting_v4/representations.rb +194 -193
  34. data/generated/google/apis/analyticsreporting_v4/service.rb +4 -4
  35. data/generated/google/apis/androidenterprise_v1.rb +1 -1
  36. data/generated/google/apis/androidenterprise_v1/classes.rb +913 -220
  37. data/generated/google/apis/androidenterprise_v1/representations.rb +337 -30
  38. data/generated/google/apis/androidenterprise_v1/service.rb +1163 -561
  39. data/generated/google/apis/androidpublisher_v2.rb +1 -1
  40. data/generated/google/apis/androidpublisher_v2/classes.rb +230 -8
  41. data/generated/google/apis/androidpublisher_v2/representations.rb +90 -0
  42. data/generated/google/apis/androidpublisher_v2/service.rb +116 -3
  43. data/generated/google/apis/appengine_v1beta5.rb +7 -1
  44. data/generated/google/apis/appengine_v1beta5/classes.rb +810 -395
  45. data/generated/google/apis/appengine_v1beta5/representations.rb +188 -22
  46. data/generated/google/apis/appengine_v1beta5/service.rb +343 -39
  47. data/generated/google/apis/appsactivity_v1.rb +3 -3
  48. data/generated/google/apis/appsactivity_v1/classes.rb +7 -0
  49. data/generated/google/apis/appsactivity_v1/representations.rb +1 -0
  50. data/generated/google/apis/appsactivity_v1/service.rb +1 -1
  51. data/generated/google/apis/appstate_v1.rb +1 -1
  52. data/generated/google/apis/bigquery_v2.rb +1 -1
  53. data/generated/google/apis/bigquery_v2/classes.rb +360 -38
  54. data/generated/google/apis/bigquery_v2/representations.rb +106 -0
  55. data/generated/google/apis/bigquery_v2/service.rb +18 -4
  56. data/generated/google/apis/books_v1.rb +2 -2
  57. data/generated/google/apis/books_v1/classes.rb +83 -0
  58. data/generated/google/apis/books_v1/representations.rb +35 -0
  59. data/generated/google/apis/books_v1/service.rb +7 -3
  60. data/generated/google/apis/calendar_v3.rb +1 -1
  61. data/generated/google/apis/calendar_v3/classes.rb +208 -5
  62. data/generated/google/apis/calendar_v3/representations.rb +97 -0
  63. data/generated/google/apis/civicinfo_v2.rb +3 -2
  64. data/generated/google/apis/civicinfo_v2/classes.rb +377 -5
  65. data/generated/google/apis/civicinfo_v2/representations.rb +149 -0
  66. data/generated/google/apis/civicinfo_v2/service.rb +27 -6
  67. data/generated/google/apis/classroom_v1.rb +22 -25
  68. data/generated/google/apis/classroom_v1/classes.rb +998 -761
  69. data/generated/google/apis/classroom_v1/representations.rb +263 -198
  70. data/generated/google/apis/classroom_v1/service.rb +1349 -672
  71. data/generated/google/apis/cloudbilling_v1.rb +3 -3
  72. data/generated/google/apis/cloudbilling_v1/classes.rb +76 -75
  73. data/generated/google/apis/cloudbilling_v1/representations.rb +17 -17
  74. data/generated/google/apis/cloudbilling_v1/service.rb +117 -110
  75. data/generated/google/apis/cloudbuild_v1.rb +1 -1
  76. data/generated/google/apis/cloudbuild_v1/classes.rb +661 -264
  77. data/generated/google/apis/cloudbuild_v1/representations.rb +198 -48
  78. data/generated/google/apis/cloudbuild_v1/service.rb +259 -44
  79. data/generated/google/apis/clouddebugger_v2.rb +5 -8
  80. data/generated/google/apis/clouddebugger_v2/classes.rb +686 -616
  81. data/generated/google/apis/clouddebugger_v2/representations.rb +151 -151
  82. data/generated/google/apis/clouddebugger_v2/service.rb +165 -159
  83. data/generated/google/apis/cloudkms_v1.rb +35 -0
  84. data/generated/google/apis/cloudkms_v1/classes.rb +1022 -0
  85. data/generated/google/apis/cloudkms_v1/representations.rb +448 -0
  86. data/generated/google/apis/cloudkms_v1/service.rb +933 -0
  87. data/generated/google/apis/cloudkms_v1beta1.rb +35 -0
  88. data/generated/google/apis/cloudkms_v1beta1/classes.rb +1039 -0
  89. data/generated/google/apis/cloudkms_v1beta1/representations.rb +448 -0
  90. data/generated/google/apis/cloudkms_v1beta1/service.rb +933 -0
  91. data/generated/google/apis/cloudmonitoring_v2beta2.rb +1 -1
  92. data/generated/google/apis/cloudresourcemanager_v1.rb +4 -4
  93. data/generated/google/apis/cloudresourcemanager_v1/classes.rb +1529 -167
  94. data/generated/google/apis/cloudresourcemanager_v1/representations.rb +491 -26
  95. data/generated/google/apis/cloudresourcemanager_v1/service.rb +1593 -135
  96. data/generated/google/apis/cloudresourcemanager_v1beta1.rb +1 -1
  97. data/generated/google/apis/cloudresourcemanager_v1beta1/classes.rb +1155 -235
  98. data/generated/google/apis/cloudresourcemanager_v1beta1/representations.rb +344 -44
  99. data/generated/google/apis/cloudresourcemanager_v1beta1/service.rb +702 -310
  100. data/generated/google/apis/cloudtrace_v1.rb +9 -9
  101. data/generated/google/apis/cloudtrace_v1/classes.rb +98 -92
  102. data/generated/google/apis/cloudtrace_v1/representations.rb +24 -24
  103. data/generated/google/apis/cloudtrace_v1/service.rb +42 -37
  104. data/generated/google/apis/compute_beta.rb +1 -1
  105. data/generated/google/apis/compute_beta/classes.rb +7007 -3648
  106. data/generated/google/apis/compute_beta/representations.rb +1459 -120
  107. data/generated/google/apis/compute_beta/service.rb +7943 -3726
  108. data/generated/google/apis/compute_v1.rb +1 -1
  109. data/generated/google/apis/compute_v1/classes.rb +2567 -370
  110. data/generated/google/apis/compute_v1/representations.rb +855 -0
  111. data/generated/google/apis/compute_v1/service.rb +6388 -2908
  112. data/generated/google/apis/container_v1.rb +1 -1
  113. data/generated/google/apis/container_v1/classes.rb +287 -16
  114. data/generated/google/apis/container_v1/representations.rb +113 -2
  115. data/generated/google/apis/container_v1/service.rb +130 -0
  116. data/generated/google/apis/content_v2.rb +1 -1
  117. data/generated/google/apis/content_v2/classes.rb +778 -10
  118. data/generated/google/apis/content_v2/representations.rb +339 -0
  119. data/generated/google/apis/content_v2/service.rb +364 -49
  120. data/generated/google/apis/dataflow_v1b3.rb +37 -0
  121. data/generated/google/apis/dataflow_v1b3/classes.rb +4941 -0
  122. data/generated/google/apis/dataflow_v1b3/representations.rb +2037 -0
  123. data/generated/google/apis/dataflow_v1b3/service.rb +957 -0
  124. data/generated/google/apis/dataproc_v1.rb +1 -1
  125. data/generated/google/apis/dataproc_v1/classes.rb +1235 -963
  126. data/generated/google/apis/dataproc_v1/representations.rb +299 -225
  127. data/generated/google/apis/dataproc_v1/service.rb +277 -192
  128. data/generated/google/apis/datastore_v1.rb +38 -0
  129. data/generated/google/apis/datastore_v1/classes.rb +1289 -0
  130. data/generated/google/apis/datastore_v1/representations.rb +572 -0
  131. data/generated/google/apis/datastore_v1/service.rb +259 -0
  132. data/generated/google/apis/datastore_v1beta3.rb +38 -0
  133. data/generated/google/apis/datastore_v1beta3/classes.rb +1284 -0
  134. data/generated/google/apis/datastore_v1beta3/representations.rb +572 -0
  135. data/generated/google/apis/datastore_v1beta3/service.rb +259 -0
  136. data/generated/google/apis/deploymentmanager_v2.rb +1 -1
  137. data/generated/google/apis/deploymentmanager_v2/classes.rb +436 -3
  138. data/generated/google/apis/deploymentmanager_v2/representations.rb +178 -0
  139. data/generated/google/apis/deploymentmanager_v2/service.rb +226 -61
  140. data/generated/google/apis/dfareporting_v2_5.rb +40 -0
  141. data/generated/google/apis/dfareporting_v2_5/classes.rb +11225 -0
  142. data/generated/google/apis/dfareporting_v2_5/representations.rb +3982 -0
  143. data/generated/google/apis/dfareporting_v2_5/service.rb +8755 -0
  144. data/generated/google/apis/dfareporting_v2_6.rb +40 -0
  145. data/generated/google/apis/dfareporting_v2_6/classes.rb +11586 -0
  146. data/generated/google/apis/dfareporting_v2_6/representations.rb +4119 -0
  147. data/generated/google/apis/dfareporting_v2_6/service.rb +9025 -0
  148. data/generated/google/apis/dfareporting_v2_7.rb +40 -0
  149. data/generated/google/apis/dfareporting_v2_7/classes.rb +11876 -0
  150. data/generated/google/apis/dfareporting_v2_7/representations.rb +4243 -0
  151. data/generated/google/apis/dfareporting_v2_7/service.rb +9095 -0
  152. data/generated/google/apis/dns_v1.rb +1 -1
  153. data/generated/google/apis/dns_v1/classes.rb +1 -1
  154. data/generated/google/apis/dns_v2beta1.rb +43 -0
  155. data/generated/google/apis/dns_v2beta1/classes.rb +915 -0
  156. data/generated/google/apis/dns_v2beta1/representations.rb +368 -0
  157. data/generated/google/apis/dns_v2beta1/service.rb +768 -0
  158. data/generated/google/apis/doubleclickbidmanager_v1.rb +1 -1
  159. data/generated/google/apis/doubleclickbidmanager_v1/classes.rb +79 -86
  160. data/generated/google/apis/doubleclickbidmanager_v1/representations.rb +25 -28
  161. data/generated/google/apis/doubleclickbidmanager_v1/service.rb +10 -8
  162. data/generated/google/apis/doubleclicksearch_v2.rb +1 -1
  163. data/generated/google/apis/doubleclicksearch_v2/classes.rb +6 -4
  164. data/generated/google/apis/drive_v2.rb +1 -1
  165. data/generated/google/apis/drive_v2/classes.rb +595 -37
  166. data/generated/google/apis/drive_v2/representations.rb +140 -0
  167. data/generated/google/apis/drive_v2/service.rb +406 -40
  168. data/generated/google/apis/drive_v3.rb +1 -1
  169. data/generated/google/apis/drive_v3/classes.rb +507 -40
  170. data/generated/google/apis/drive_v3/representations.rb +105 -0
  171. data/generated/google/apis/drive_v3/service.rb +326 -29
  172. data/generated/google/apis/fitness_v1.rb +38 -2
  173. data/generated/google/apis/fitness_v1/classes.rb +65 -7
  174. data/generated/google/apis/fitness_v1/representations.rb +20 -0
  175. data/generated/google/apis/fitness_v1/service.rb +17 -18
  176. data/generated/google/apis/fusiontables_v2.rb +1 -1
  177. data/generated/google/apis/fusiontables_v2/classes.rb +4 -3
  178. data/generated/google/apis/games_configuration_v1configuration.rb +1 -1
  179. data/generated/google/apis/games_management_v1management.rb +1 -1
  180. data/generated/google/apis/games_v1.rb +1 -1
  181. data/generated/google/apis/genomics_v1.rb +10 -12
  182. data/generated/google/apis/genomics_v1/classes.rb +2276 -2165
  183. data/generated/google/apis/genomics_v1/representations.rb +468 -496
  184. data/generated/google/apis/genomics_v1/service.rb +978 -882
  185. data/generated/google/apis/gmail_v1.rb +11 -2
  186. data/generated/google/apis/gmail_v1/classes.rb +655 -5
  187. data/generated/google/apis/gmail_v1/representations.rb +261 -0
  188. data/generated/google/apis/gmail_v1/service.rb +1211 -48
  189. data/generated/google/apis/groupssettings_v1.rb +2 -2
  190. data/generated/google/apis/groupssettings_v1/classes.rb +12 -0
  191. data/generated/google/apis/groupssettings_v1/representations.rb +2 -0
  192. data/generated/google/apis/iam_v1.rb +2 -2
  193. data/generated/google/apis/iam_v1/classes.rb +446 -368
  194. data/generated/google/apis/iam_v1/representations.rb +109 -91
  195. data/generated/google/apis/iam_v1/service.rb +249 -162
  196. data/generated/google/apis/identitytoolkit_v3.rb +7 -1
  197. data/generated/google/apis/identitytoolkit_v3/classes.rb +254 -2
  198. data/generated/google/apis/identitytoolkit_v3/representations.rb +38 -0
  199. data/generated/google/apis/kgsearch_v1.rb +2 -3
  200. data/generated/google/apis/kgsearch_v1/classes.rb +13 -13
  201. data/generated/google/apis/kgsearch_v1/representations.rb +2 -2
  202. data/generated/google/apis/kgsearch_v1/service.rb +26 -24
  203. data/generated/google/apis/language_v1beta1.rb +36 -0
  204. data/generated/google/apis/language_v1beta1/classes.rb +757 -0
  205. data/generated/google/apis/language_v1beta1/representations.rb +339 -0
  206. data/generated/google/apis/language_v1beta1/service.rb +185 -0
  207. data/generated/google/apis/licensing_v1.rb +3 -3
  208. data/generated/google/apis/licensing_v1/classes.rb +14 -2
  209. data/generated/google/apis/licensing_v1/representations.rb +2 -0
  210. data/generated/google/apis/licensing_v1/service.rb +1 -1
  211. data/generated/google/apis/logging_v2beta1.rb +6 -6
  212. data/generated/google/apis/logging_v2beta1/classes.rb +900 -775
  213. data/generated/google/apis/logging_v2beta1/representations.rb +163 -142
  214. data/generated/google/apis/logging_v2beta1/service.rb +427 -155
  215. data/generated/google/apis/manufacturers_v1.rb +34 -0
  216. data/generated/google/apis/manufacturers_v1/classes.rb +605 -0
  217. data/generated/google/apis/manufacturers_v1/representations.rb +223 -0
  218. data/generated/google/apis/manufacturers_v1/service.rb +138 -0
  219. data/generated/google/apis/mirror_v1.rb +2 -2
  220. data/generated/google/apis/mirror_v1/service.rb +1 -1
  221. data/generated/google/apis/monitoring_v3.rb +45 -0
  222. data/generated/google/apis/monitoring_v3/classes.rb +1333 -0
  223. data/generated/google/apis/monitoring_v3/representations.rb +516 -0
  224. data/generated/google/apis/monitoring_v3/service.rb +706 -0
  225. data/generated/google/apis/oauth2_v2.rb +1 -1
  226. data/generated/google/apis/pagespeedonline_v2.rb +1 -1
  227. data/generated/google/apis/partners_v2.rb +3 -3
  228. data/generated/google/apis/partners_v2/classes.rb +1831 -477
  229. data/generated/google/apis/partners_v2/representations.rb +571 -114
  230. data/generated/google/apis/partners_v2/service.rb +898 -167
  231. data/generated/google/apis/people_v1.rb +15 -16
  232. data/generated/google/apis/people_v1/classes.rb +1047 -859
  233. data/generated/google/apis/people_v1/representations.rb +252 -213
  234. data/generated/google/apis/people_v1/service.rb +75 -62
  235. data/generated/google/apis/plus_domains_v1.rb +1 -1
  236. data/generated/google/apis/plus_v1.rb +1 -1
  237. data/generated/google/apis/proximitybeacon_v1beta1.rb +1 -1
  238. data/generated/google/apis/proximitybeacon_v1beta1/classes.rb +527 -456
  239. data/generated/google/apis/proximitybeacon_v1beta1/representations.rb +101 -100
  240. data/generated/google/apis/proximitybeacon_v1beta1/service.rb +467 -343
  241. data/generated/google/apis/pubsub_v1.rb +1 -1
  242. data/generated/google/apis/pubsub_v1/classes.rb +363 -310
  243. data/generated/google/apis/pubsub_v1/representations.rb +76 -76
  244. data/generated/google/apis/pubsub_v1/service.rb +464 -335
  245. data/generated/google/apis/qpx_express_v1.rb +1 -1
  246. data/generated/google/apis/qpx_express_v1/classes.rb +6 -0
  247. data/generated/google/apis/qpx_express_v1/representations.rb +1 -0
  248. data/generated/google/apis/replicapool_v1beta2.rb +1 -1
  249. data/generated/google/apis/replicapoolupdater_v1beta1.rb +4 -2
  250. data/generated/google/apis/replicapoolupdater_v1beta1/service.rb +3 -1
  251. data/generated/google/apis/reseller_v1.rb +1 -1
  252. data/generated/google/apis/reseller_v1/classes.rb +222 -61
  253. data/generated/google/apis/reseller_v1/representations.rb +28 -0
  254. data/generated/google/apis/reseller_v1/service.rb +240 -47
  255. data/generated/google/apis/script_v1.rb +19 -19
  256. data/generated/google/apis/script_v1/classes.rb +151 -137
  257. data/generated/google/apis/script_v1/representations.rb +26 -26
  258. data/generated/google/apis/script_v1/service.rb +9 -8
  259. data/generated/google/apis/sheets_v4.rb +7 -7
  260. data/generated/google/apis/sheets_v4/classes.rb +4530 -3506
  261. data/generated/google/apis/sheets_v4/representations.rb +988 -737
  262. data/generated/google/apis/sheets_v4/service.rb +266 -99
  263. data/generated/google/apis/site_verification_v1.rb +1 -1
  264. data/generated/google/apis/slides_v1.rb +49 -0
  265. data/generated/google/apis/slides_v1/classes.rb +4480 -0
  266. data/generated/google/apis/slides_v1/representations.rb +1926 -0
  267. data/generated/google/apis/slides_v1/service.rb +245 -0
  268. data/generated/google/apis/speech_v1beta1.rb +34 -0
  269. data/generated/google/apis/speech_v1beta1/classes.rb +498 -0
  270. data/generated/google/apis/speech_v1beta1/representations.rb +206 -0
  271. data/generated/google/apis/speech_v1beta1/service.rb +270 -0
  272. data/generated/google/apis/sqladmin_v1beta4.rb +1 -1
  273. data/generated/google/apis/sqladmin_v1beta4/classes.rb +131 -10
  274. data/generated/google/apis/sqladmin_v1beta4/representations.rb +50 -0
  275. data/generated/google/apis/sqladmin_v1beta4/service.rb +92 -2
  276. data/generated/google/apis/storage_v1.rb +1 -1
  277. data/generated/google/apis/storage_v1/classes.rb +205 -21
  278. data/generated/google/apis/storage_v1/representations.rb +51 -1
  279. data/generated/google/apis/storage_v1/service.rb +263 -9
  280. data/generated/google/apis/tagmanager_v1.rb +5 -5
  281. data/generated/google/apis/translate_v2.rb +2 -2
  282. data/generated/google/apis/translate_v2/service.rb +1 -1
  283. data/generated/google/apis/vision_v1.rb +1 -1
  284. data/generated/google/apis/vision_v1/classes.rb +1275 -731
  285. data/generated/google/apis/vision_v1/representations.rb +378 -111
  286. data/generated/google/apis/vision_v1/service.rb +4 -4
  287. data/generated/google/apis/webmasters_v3.rb +1 -1
  288. data/generated/google/apis/youtube_analytics_v1.rb +1 -1
  289. data/generated/google/apis/youtube_analytics_v1/classes.rb +0 -209
  290. data/generated/google/apis/youtube_analytics_v1/representations.rb +0 -99
  291. data/generated/google/apis/youtube_analytics_v1/service.rb +5 -77
  292. data/generated/google/apis/youtube_partner_v1.rb +1 -1
  293. data/generated/google/apis/youtube_partner_v1/classes.rb +155 -0
  294. data/generated/google/apis/youtube_partner_v1/representations.rb +69 -0
  295. data/generated/google/apis/youtube_partner_v1/service.rb +107 -3
  296. data/generated/google/apis/youtube_v3.rb +1 -1
  297. data/generated/google/apis/youtube_v3/classes.rb +430 -22
  298. data/generated/google/apis/youtube_v3/representations.rb +171 -4
  299. data/generated/google/apis/youtube_v3/service.rb +100 -9
  300. data/generated/google/apis/youtubereporting_v1.rb +4 -4
  301. data/generated/google/apis/youtubereporting_v1/classes.rb +140 -131
  302. data/generated/google/apis/youtubereporting_v1/representations.rb +37 -37
  303. data/generated/google/apis/youtubereporting_v1/service.rb +139 -135
  304. data/google-api-client.gemspec +4 -3
  305. data/lib/google/apis/core/api_command.rb +16 -6
  306. data/lib/google/apis/core/base_service.rb +17 -9
  307. data/lib/google/apis/core/download.rb +7 -2
  308. data/lib/google/apis/core/http_command.rb +5 -1
  309. data/lib/google/apis/core/json_representation.rb +2 -2
  310. data/lib/google/apis/core/upload.rb +7 -1
  311. data/lib/google/apis/errors.rb +6 -2
  312. data/lib/google/apis/generator/annotator.rb +6 -0
  313. data/lib/google/apis/version.rb +1 -1
  314. data/samples/cli/lib/samples/bigquery.rb +101 -0
  315. data/samples/cli/lib/samples/calendar.rb +1 -1
  316. data/samples/cli/lib/samples/gmail.rb +74 -0
  317. data/samples/cli/lib/samples/sheets.rb +61 -0
  318. data/samples/cli/lib/samples/you_tube.rb +4 -1
  319. data/sync.rb +71 -0
  320. metadata +86 -18
@@ -20,13 +20,14 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.required_ruby_version = '~> 2.0'
22
22
 
23
- spec.add_runtime_dependency 'representable', '~> 2.3.0'
24
- spec.add_runtime_dependency 'retriable', '~> 2.0'
23
+ spec.add_runtime_dependency 'representable', '~> 3.0'
24
+ spec.add_runtime_dependency 'retriable', '>= 2.0', '< 4.0'
25
25
  spec.add_runtime_dependency 'addressable', '~> 2.3'
26
26
  spec.add_runtime_dependency 'mime-types', '>= 1.6'
27
27
  spec.add_runtime_dependency 'hurley', '~> 0.1'
28
28
  spec.add_runtime_dependency 'googleauth', '~> 0.5'
29
- spec.add_runtime_dependency 'thor', '~> 0.19'
30
29
  spec.add_runtime_dependency 'httpclient', '~> 2.7'
31
30
  spec.add_runtime_dependency 'memoist', '~> 0.11'
31
+
32
+ spec.add_development_dependency 'thor', '~> 0.19'
32
33
  end
@@ -26,7 +26,11 @@ module Google
26
26
  class ApiCommand < HttpCommand
27
27
  JSON_CONTENT_TYPE = 'application/json'
28
28
  FIELDS_PARAM = 'fields'
29
- RATE_LIMIT_ERRORS = %w(rateLimitExceeded userRateLimitExceeded)
29
+ ERROR_REASON_MAPPING = {
30
+ 'rateLimitExceeded' => Google::Apis::RateLimitError,
31
+ 'userRateLimitExceeded' => Google::Apis::RateLimitError,
32
+ 'projectNotLinked' => Google::Apis::ProjectNotLinkedError
33
+ }
30
34
 
31
35
  # JSON serializer for request objects
32
36
  # @return [Google::Apis::Core::JsonRepresentation]
@@ -51,7 +55,7 @@ module Google
51
55
  query[FIELDS_PARAM] = normalize_fields_param(query[FIELDS_PARAM]) if query.key?(FIELDS_PARAM)
52
56
  if request_representation && request_object
53
57
  header[:content_type] ||= JSON_CONTENT_TYPE
54
- self.body = request_representation.new(request_object).to_json(skip_undefined: true)
58
+ self.body = request_representation.new(request_object).to_json(user_options: { skip_undefined: true })
55
59
  end
56
60
  super
57
61
  end
@@ -94,10 +98,12 @@ module Google
94
98
  error = parse_error(body)
95
99
  if error
96
100
  message = sprintf('%s: %s', error['reason'], error['message'])
97
- raise Google::Apis::RateLimitError.new(message,
98
- status_code: status,
99
- header: header,
100
- body: body) if RATE_LIMIT_ERRORS.include?(error['reason'])
101
+ raise ERROR_REASON_MAPPING[error['reason']].new(
102
+ message,
103
+ status_code: status,
104
+ header: header,
105
+ body: body
106
+ ) if ERROR_REASON_MAPPING.key?(error['reason'])
101
107
  end
102
108
  super(status, header, body, message)
103
109
  else
@@ -105,6 +111,10 @@ module Google
105
111
  end
106
112
  end
107
113
 
114
+ def allow_form_encoding?
115
+ request_representation.nil? && super
116
+ end
117
+
108
118
  private
109
119
 
110
120
  # Attempt to parse a JSON error message, returning the first found error
@@ -42,11 +42,12 @@ module Google
42
42
  # True (default) if results should be cached so multiple iterations can be used.
43
43
  # @param [Symbol] items
44
44
  # Name of the field in the result containing the items. Defaults to :items
45
- def initialize(service, max: nil, items: :items, cache: true, &block)
45
+ def initialize(service, max: nil, items: :items, cache: true, response_page_token: :next_page_token, &block)
46
46
  @service = service
47
47
  @block = block
48
48
  @max = max
49
49
  @items_field = items
50
+ @response_page_token_field = response_page_token
50
51
  if cache
51
52
  @result_cache = Hash.new do |h, k|
52
53
  h[k] = @block.call(k, @service)
@@ -63,14 +64,21 @@ module Google
63
64
  item_count = 0
64
65
  loop do
65
66
  @last_result = @fetch_proc.call(page_token)
66
- for item in @last_result.send(@items_field)
67
- item_count = item_count + 1
68
- break if @max && item_count > @max
69
- yield item
67
+ items = @last_result.send(@items_field)
68
+ if items.kind_of?(Array)
69
+ for item in items
70
+ item_count = item_count + 1
71
+ break if @max && item_count > @max
72
+ yield item
73
+ end
74
+ elsif items
75
+ # yield singular non-nil items (for genomics API)
76
+ yield items
70
77
  end
71
78
  break if @max && item_count >= @max
72
- break if @last_result.next_page_token.nil? || @last_result.next_page_token == page_token
73
- page_token = @last_result.next_page_token
79
+ next_page_token = @last_result.send(@response_page_token_field)
80
+ break if next_page_token.nil? || next_page_token == page_token
81
+ page_token = next_page_token
74
82
  end
75
83
  end
76
84
  end
@@ -264,9 +272,9 @@ module Google
264
272
  # @example Retrieve all files,
265
273
  # file_list = service.fetch_all { |token, s| s.list_files(page_token: token) }
266
274
  # file_list.each { |f| ... }
267
- def fetch_all(max: nil, items: :items, cache: true, &block)
275
+ def fetch_all(max: nil, items: :items, cache: true, response_page_token: :next_page_token, &block)
268
276
  fail "fetch_all may not be used inside a batch" if batch?
269
- return PagedResults.new(self, max: max, items: items, cache: cache, &block)
277
+ return PagedResults.new(self, max: max, items: items, cache: cache, response_page_token: response_page_token, &block)
270
278
  end
271
279
 
272
280
  protected
@@ -23,6 +23,7 @@ module Google
23
23
  # Streaming/resumable media download support
24
24
  class DownloadCommand < ApiCommand
25
25
  RANGE_HEADER = 'range'
26
+ OK_STATUS = [200, 201, 206]
26
27
 
27
28
  # File or IO to write content to
28
29
  # @return [String, File, #write]
@@ -65,7 +66,7 @@ module Google
65
66
  # @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
66
67
  # @raise [Google::Apis::AuthorizationError] Authorization is required
67
68
  def execute_once(client, &block)
68
- client.get(@download_url || url) do |req|
69
+ response = client.get(@download_url || url) do |req|
69
70
  apply_request_options(req)
70
71
  check_if_rewind_needed = false
71
72
  if @offset > 0
@@ -73,7 +74,7 @@ module Google
73
74
  req.header[RANGE_HEADER] = sprintf('bytes=%d-', @offset)
74
75
  check_if_rewind_needed = true
75
76
  end
76
- req.on_body(200, 201, 206) do |res, chunk|
77
+ req.on_body(*OK_STATUS) do |res, chunk|
77
78
  check_status(res.status_code, chunk) unless res.status_code.nil?
78
79
  if check_if_rewind_needed && res.status_code != 206
79
80
  # Oh no! Requested a chunk, but received the entire content
@@ -88,6 +89,10 @@ module Google
88
89
  @download_io.flush
89
90
  end
90
91
  end
92
+
93
+ # Since the on_body block only runs on success, check status again just in case it failed
94
+ check_status(response.status_code, response.body) unless OK_STATUS.include?(response.status_code.to_i)
95
+
91
96
  if @close_io_on_finish
92
97
  result = nil
93
98
  else
@@ -146,7 +146,7 @@ module Google
146
146
  self.url = url.expand(params) if url.is_a?(Addressable::Template)
147
147
  url.query_values = query.merge(url.query_values || {})
148
148
 
149
- if [:post, :put].include?(method) && body.nil?
149
+ if allow_form_encoding?
150
150
  @form_encoded = true
151
151
  self.body = Addressable::URI.form_encode(url.query_values(Array))
152
152
  self.header['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8'
@@ -306,6 +306,10 @@ module Google
306
306
  req.options.open_timeout = options.open_timeout_sec
307
307
  end
308
308
 
309
+ def allow_form_encoding?
310
+ [:post, :put].include?(method) && body.nil?
311
+ end
312
+
309
313
  private
310
314
 
311
315
  def form_encoded?
@@ -55,7 +55,7 @@ module Google
55
55
  def if_fn(name)
56
56
  ivar_name = "@#{name}".to_sym
57
57
  lambda do |opts|
58
- if opts[:skip_undefined]
58
+ if opts[:options][:user_options] and opts[:options][:user_options][:skip_undefined]
59
59
  if respond_to?(:key?)
60
60
  self.key?(name) || instance_variable_defined?(ivar_name)
61
61
  else
@@ -137,7 +137,7 @@ module Google
137
137
 
138
138
  def to_json
139
139
  representation = self.class.const_get(:Representation)
140
- representation.new(self).to_json(skip_undefined: true)
140
+ representation.new(self).to_json(user_options: { skip_undefined: true })
141
141
  end
142
142
  end
143
143
  end
@@ -17,8 +17,14 @@ require 'google/apis/core/http_command'
17
17
  require 'google/apis/core/api_command'
18
18
  require 'google/apis/errors'
19
19
  require 'addressable/uri'
20
- require 'mime-types'
21
20
  require 'tempfile'
21
+ begin
22
+ require 'mime/types/columnar'
23
+ rescue LoadError
24
+ # Temporary until next major bump when we can tighten
25
+ # dependency to mime-types >-=3.0
26
+ require 'mime-types'
27
+ end
22
28
 
23
29
  module Google
24
30
  module Apis
@@ -19,7 +19,7 @@ module Google
19
19
  attr_reader :status_code
20
20
  attr_reader :header
21
21
  attr_reader :body
22
-
22
+
23
23
  def initialize(err, status_code: nil, header: nil, body: nil)
24
24
  @cause = nil
25
25
 
@@ -42,7 +42,7 @@ module Google
42
42
  end
43
43
  end
44
44
  end
45
-
45
+
46
46
  # An error which is raised when there is an unexpected response or other
47
47
  # transport error that prevents an operation from succeeding.
48
48
  class TransmissionError < Error
@@ -61,6 +61,10 @@ module Google
61
61
  class RateLimitError < Error
62
62
  end
63
63
 
64
+ # A 403 HTTP error occurred.
65
+ class ProjectNotLinkedError < Error
66
+ end
67
+
64
68
  # A 401 HTTP error occurred.
65
69
  class AuthorizationError < Error
66
70
  end
@@ -25,12 +25,18 @@ require 'addressable/uri'
25
25
 
26
26
  module Google
27
27
  module Apis
28
+
28
29
  # @private
29
30
  class Generator
31
+
30
32
  # Helper for picking names for methods, properties, types, etc. Performs various normaliations
31
33
  # as well as allows for overriding individual names from a configuration file for cases
32
34
  # where algorithmic approaches produce poor APIs.
33
35
  class Names
36
+ ActiveSupport::Inflector.inflections do |inflections|
37
+ u = inflections.uncountable('send_as', 'as')
38
+ end
39
+
34
40
  include Google::Apis::Core::Logging
35
41
  include NameHelpers
36
42
 
@@ -15,7 +15,7 @@
15
15
  module Google
16
16
  module Apis
17
17
  # Client library version
18
- VERSION = '0.9.8'
18
+ VERSION = '0.10.2'
19
19
 
20
20
  # Current operating system
21
21
  # @private
@@ -0,0 +1,101 @@
1
+ # Copyright 2016 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/bigquery_v2'
16
+ require 'base_cli'
17
+
18
+
19
+ module Samples
20
+ # Examples for the Google BigQuery API
21
+ #
22
+ # Sample usage:
23
+ #
24
+ # $ ./google-api-samples bigquery list_datasets --project_id=publicdata
25
+ # $ ./google-api-samples bigquery list_tables --project_id=publicdata --dataset_id=samples
26
+ # $ ./google-api-samples bigquery list_table_data --project_id=publicdata --dataset_id=samples --table_id=wikipedia --max_results=10
27
+ class Bigquery < BaseCli
28
+ Bigquery = Google::Apis::BigqueryV2
29
+
30
+ desc 'list datasets', 'List datasets'
31
+ method_option :project_id, type: :string
32
+ def list_datasets
33
+ bigquery = Bigquery::BigqueryService.new
34
+ bigquery.authorization = user_credentials_for(Bigquery::AUTH_BIGQUERY)
35
+
36
+ begin
37
+ project_id = options[:project_id] || 'publicdata'
38
+ result = bigquery.list_datasets(project_id)
39
+ data = []
40
+ data << ['id','kind']
41
+ result.datasets.each do |dataset|
42
+ data << [
43
+ dataset.id,
44
+ dataset.kind,
45
+ ]
46
+ end
47
+ print_table(data)
48
+ end
49
+ end
50
+
51
+ desc 'list tables', 'List tables'
52
+ method_option :project_id, type: :string
53
+ method_option :dataset_id, type: :string
54
+ def list_tables
55
+ bigquery = Bigquery::BigqueryService.new
56
+ bigquery.authorization = user_credentials_for(Bigquery::AUTH_BIGQUERY)
57
+
58
+ begin
59
+ project_id = options[:project_id] || 'publicdata'
60
+ dataset_id = options[:dataset_id] || 'samples'
61
+ result = bigquery.list_tables(project_id, dataset_id)
62
+ data = []
63
+ data << ['id','kind']
64
+ result.tables.each do |table|
65
+ data << [
66
+ table.id,
67
+ table.kind,
68
+ ]
69
+ end
70
+ print_table(data)
71
+ end
72
+ end
73
+
74
+ desc 'list table data', 'List table data'
75
+ method_option :project_id, type: :string
76
+ method_option :dataset_id, type: :string
77
+ method_option :table_id, type: :string
78
+ def list_table_data
79
+ bigquery = Bigquery::BigqueryService.new
80
+ bigquery.authorization = user_credentials_for(Bigquery::AUTH_BIGQUERY)
81
+
82
+ begin
83
+ project_id = options[:project_id] || 'publicdata'
84
+ dataset_id = options[:dataset_id] || 'samples'
85
+ table_id = options[:table_id] || 'wikipedia'
86
+ max_results = options[:max_results] || 10
87
+ result = bigquery.list_table_data(project_id, dataset_id, table_id, max_results: max_results)
88
+
89
+ datas = []
90
+ result.rows.each do |row|
91
+ data = []
92
+ row.f.each do |field|
93
+ data << field.v
94
+ end
95
+ datas << data
96
+ end
97
+ print_table(datas)
98
+ end
99
+ end
100
+ end
101
+ end
@@ -36,7 +36,7 @@ module Samples
36
36
 
37
37
  event = {
38
38
  summary: options[:summary],
39
- attendees: Array(options[:attenddes]).map { |email| { email: email } },
39
+ attendees: Array(options[:attendees]).map { |email| { email: email } },
40
40
  start: {
41
41
  date_time: DateTime.parse(options[:start])
42
42
  },
@@ -28,6 +28,33 @@ module Samples
28
28
  class Gmail < BaseCli
29
29
  Gmail = Google::Apis::GmailV1
30
30
 
31
+ desc 'get ID', 'Get a message for an id with the gmail API'
32
+ def get(id)
33
+ gmail = Gmail::GmailService.new
34
+ gmail.authorization = user_credentials_for(Gmail::AUTH_SCOPE)
35
+
36
+ result = gmail.get_user_message('me', id)
37
+ payload = result.payload
38
+ headers = payload.headers
39
+
40
+ date = headers.any? { |h| h.name == 'Date' } ? headers.find { |h| h.name == 'Date' }.value : ''
41
+ from = headers.any? { |h| h.name == 'From' } ? headers.find { |h| h.name == 'From' }.value : ''
42
+ to = headers.any? { |h| h.name == 'To' } ? headers.find { |h| h.name == 'To' }.value : ''
43
+ subject = headers.any? { |h| h.name == 'Subject' } ? headers.find { |h| h.name == 'Subject' }.value : ''
44
+
45
+ body = payload.body.data
46
+ if body.nil? && payload.parts.any?
47
+ body = payload.parts.map { |part| part.body.data }.join
48
+ end
49
+
50
+ puts "id: #{result.id}"
51
+ puts "date: #{date}"
52
+ puts "from: #{from}"
53
+ puts "to: #{to}"
54
+ puts "subject: #{subject}"
55
+ puts "body: #{body}"
56
+ end
57
+
31
58
  desc 'send TEXT', 'Send a message with the gmail API'
32
59
  method_option :to, type: :string, required: true
33
60
  method_option :from, type: :string, required: true
@@ -46,5 +73,52 @@ module Samples
46
73
  upload_source: StringIO.new(message.to_s),
47
74
  content_type: 'message/rfc822')
48
75
  end
76
+
77
+ desc 'list', 'list messages with the gmail API'
78
+ method_option :limit, type: :numeric, default: 100
79
+ def list
80
+ gmail = Gmail::GmailService.new
81
+ gmail.authorization = user_credentials_for(Gmail::AUTH_SCOPE)
82
+
83
+ messages = []
84
+ next_page = nil
85
+ begin
86
+ result = gmail.list_user_messages('me', max_results: [options[:limit], 500].min, page_token: next_page)
87
+ messages += result.messages
88
+ break if messages.size >= options[:limit]
89
+ next_page = result.next_page_token
90
+ end while next_page
91
+
92
+ puts "Found #{messages.size} messages"
93
+ end
94
+
95
+ desc 'search QUERY', 'Search messages matching the specified query with the gmail API'
96
+ method_option :limit, type: :numeric, default: 100
97
+ def search(query)
98
+ gmail = Gmail::GmailService.new
99
+ gmail.authorization = user_credentials_for(Gmail::AUTH_SCOPE)
100
+
101
+ ids =
102
+ gmail.fetch_all(max: options[:limit], items: :messages) do |token|
103
+ gmail.list_user_messages('me', max_results: [options[:limit], 500].min, q: query, page_token: token)
104
+ end.map(&:id)
105
+
106
+ callback = lambda do |result, err|
107
+ if err
108
+ puts "error: #{err.inspect}"
109
+ else
110
+ headers = result.payload.headers
111
+ date = headers.any? { |h| h.name == 'Date' } ? headers.find { |h| h.name == 'Date' }.value : ''
112
+ subject = headers.any? { |h| h.name == 'Subject' } ? headers.find { |h| h.name == 'Subject' }.value : ''
113
+ puts "#{result.id}, #{date}, #{subject}"
114
+ end
115
+ end
116
+
117
+ ids.each_slice(1000) do |ids_array|
118
+ gmail.batch do |gm|
119
+ ids_array.each { |id| gm.get_user_message('me', id, &callback) }
120
+ end
121
+ end
122
+ end
49
123
  end
50
124
  end