google-api-client 0.8.6 → 0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (497) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +20 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +7 -0
  5. data/.rubocop_todo.yml +63 -0
  6. data/.travis.yml +22 -0
  7. data/.yardopts +12 -0
  8. data/CHANGELOG.md +41 -2
  9. data/CONTRIBUTING.md +31 -0
  10. data/Gemfile +32 -2
  11. data/MIGRATING.md +171 -0
  12. data/README.md +181 -148
  13. data/Rakefile +1 -40
  14. data/api_names.yaml +1036 -0
  15. data/api_names_out.yaml +26053 -0
  16. data/bin/generate-api +95 -0
  17. data/generated/google/apis/adexchangebuyer_v1_3.rb +35 -0
  18. data/generated/google/apis/adexchangebuyer_v1_3/classes.rb +1335 -0
  19. data/generated/google/apis/adexchangebuyer_v1_3/representations.rb +446 -0
  20. data/generated/google/apis/adexchangebuyer_v1_3/service.rb +872 -0
  21. data/generated/google/apis/adexchangeseller_v2_0.rb +38 -0
  22. data/generated/google/apis/adexchangeseller_v2_0/classes.rb +792 -0
  23. data/generated/google/apis/adexchangeseller_v2_0/representations.rb +309 -0
  24. data/generated/google/apis/adexchangeseller_v2_0/service.rb +668 -0
  25. data/generated/google/apis/admin_datatransfer_v1.rb +37 -0
  26. data/generated/google/apis/admin_datatransfer_v1/classes.rb +267 -0
  27. data/generated/google/apis/admin_datatransfer_v1/representations.rb +118 -0
  28. data/generated/google/apis/admin_datatransfer_v1/service.rb +262 -0
  29. data/generated/google/apis/admin_directory_v1.rb +113 -0
  30. data/generated/google/apis/admin_directory_v1/classes.rb +3141 -0
  31. data/generated/google/apis/admin_directory_v1/representations.rb +1029 -0
  32. data/generated/google/apis/admin_directory_v1/service.rb +3818 -0
  33. data/generated/google/apis/admin_reports_v1.rb +38 -0
  34. data/generated/google/apis/admin_reports_v1/classes.rb +582 -0
  35. data/generated/google/apis/admin_reports_v1/representations.rb +231 -0
  36. data/generated/google/apis/admin_reports_v1/service.rb +336 -0
  37. data/generated/google/apis/adsense_v1_4.rb +38 -0
  38. data/generated/google/apis/adsense_v1_4/classes.rb +1285 -0
  39. data/generated/google/apis/adsense_v1_4/representations.rb +494 -0
  40. data/generated/google/apis/adsense_v1_4/service.rb +1714 -0
  41. data/generated/google/apis/adsensehost_v4_1.rb +35 -0
  42. data/generated/google/apis/adsensehost_v4_1/classes.rb +834 -0
  43. data/generated/google/apis/adsensehost_v4_1/representations.rb +327 -0
  44. data/generated/google/apis/adsensehost_v4_1/service.rb +1164 -0
  45. data/generated/google/apis/analytics_v3.rb +49 -0
  46. data/generated/google/apis/analytics_v3/classes.rb +5118 -0
  47. data/generated/google/apis/analytics_v3/representations.rb +1662 -0
  48. data/generated/google/apis/analytics_v3/service.rb +3568 -0
  49. data/generated/google/apis/androidenterprise_v1.rb +35 -0
  50. data/generated/google/apis/androidenterprise_v1/classes.rb +1443 -0
  51. data/generated/google/apis/androidenterprise_v1/representations.rb +538 -0
  52. data/generated/google/apis/androidenterprise_v1/service.rb +2602 -0
  53. data/generated/google/apis/androidpublisher_v2.rb +34 -0
  54. data/generated/google/apis/androidpublisher_v2/classes.rb +1411 -0
  55. data/generated/google/apis/androidpublisher_v2/representations.rb +646 -0
  56. data/generated/google/apis/androidpublisher_v2/service.rb +2338 -0
  57. data/generated/google/apis/appengine_v1beta4.rb +35 -0
  58. data/generated/google/apis/appengine_v1beta4/classes.rb +1532 -0
  59. data/generated/google/apis/appengine_v1beta4/representations.rb +526 -0
  60. data/generated/google/apis/appengine_v1beta4/service.rb +476 -0
  61. data/generated/google/apis/appsactivity_v1.rb +46 -0
  62. data/generated/google/apis/appsactivity_v1/classes.rb +392 -0
  63. data/generated/google/apis/appsactivity_v1/representations.rb +184 -0
  64. data/generated/google/apis/appsactivity_v1/service.rb +128 -0
  65. data/generated/google/apis/appstate_v1.rb +34 -0
  66. data/generated/google/apis/appstate_v1/classes.rb +154 -0
  67. data/generated/google/apis/appstate_v1/representations.rb +79 -0
  68. data/generated/google/apis/appstate_v1/service.rb +260 -0
  69. data/generated/google/apis/autoscaler_v1beta2.rb +38 -0
  70. data/generated/google/apis/autoscaler_v1beta2/classes.rb +747 -0
  71. data/generated/google/apis/autoscaler_v1beta2/representations.rb +281 -0
  72. data/generated/google/apis/autoscaler_v1beta2/service.rb +478 -0
  73. data/generated/google/apis/bigquery_v2.rb +52 -0
  74. data/generated/google/apis/bigquery_v2/classes.rb +2471 -0
  75. data/generated/google/apis/bigquery_v2/representations.rb +816 -0
  76. data/generated/google/apis/bigquery_v2/service.rb +982 -0
  77. data/generated/google/apis/blogger_v3.rb +37 -0
  78. data/generated/google/apis/blogger_v3/classes.rb +1354 -0
  79. data/generated/google/apis/blogger_v3/representations.rb +562 -0
  80. data/generated/google/apis/blogger_v3/service.rb +1587 -0
  81. data/generated/google/apis/books_v1.rb +34 -0
  82. data/generated/google/apis/books_v1/classes.rb +3956 -0
  83. data/generated/google/apis/books_v1/representations.rb +1538 -0
  84. data/generated/google/apis/books_v1/service.rb +2290 -0
  85. data/generated/google/apis/calendar_v3.rb +37 -0
  86. data/generated/google/apis/calendar_v3/classes.rb +1742 -0
  87. data/generated/google/apis/calendar_v3/representations.rb +567 -0
  88. data/generated/google/apis/calendar_v3/service.rb +1968 -0
  89. data/{lib/google/api_client/service_account.rb → generated/google/apis/civicinfo_v2.rb} +18 -8
  90. data/generated/google/apis/civicinfo_v2/classes.rb +1127 -0
  91. data/generated/google/apis/civicinfo_v2/representations.rb +383 -0
  92. data/generated/google/apis/civicinfo_v2/service.rb +279 -0
  93. data/generated/google/apis/classroom_v1.rb +49 -0
  94. data/generated/google/apis/classroom_v1/classes.rb +512 -0
  95. data/generated/google/apis/classroom_v1/representations.rb +217 -0
  96. data/generated/google/apis/classroom_v1/service.rb +970 -0
  97. data/generated/google/apis/classroom_v1beta1.rb +49 -0
  98. data/generated/google/apis/classroom_v1beta1/classes.rb +447 -0
  99. data/generated/google/apis/classroom_v1beta1/representations.rb +190 -0
  100. data/generated/google/apis/classroom_v1beta1/service.rb +791 -0
  101. data/generated/google/apis/cloudbilling_v1.rb +35 -0
  102. data/generated/google/apis/cloudbilling_v1/classes.rb +169 -0
  103. data/generated/google/apis/cloudbilling_v1/representations.rb +79 -0
  104. data/generated/google/apis/cloudbilling_v1/service.rb +258 -0
  105. data/generated/google/apis/clouddebugger_v2.rb +41 -0
  106. data/generated/google/apis/clouddebugger_v2/classes.rb +1004 -0
  107. data/generated/google/apis/clouddebugger_v2/representations.rb +410 -0
  108. data/generated/google/apis/clouddebugger_v2/service.rb +370 -0
  109. data/generated/google/apis/cloudmonitoring_v2beta2.rb +37 -0
  110. data/generated/google/apis/cloudmonitoring_v2beta2/classes.rb +679 -0
  111. data/generated/google/apis/cloudmonitoring_v2beta2/representations.rb +311 -0
  112. data/generated/google/apis/cloudmonitoring_v2beta2/service.rb +452 -0
  113. data/generated/google/apis/cloudresourcemanager_v1beta1.rb +38 -0
  114. data/generated/google/apis/cloudresourcemanager_v1beta1/classes.rb +437 -0
  115. data/generated/google/apis/cloudresourcemanager_v1beta1/representations.rb +188 -0
  116. data/generated/google/apis/cloudresourcemanager_v1beta1/service.rb +623 -0
  117. data/generated/google/apis/cloudtrace_v1.rb +35 -0
  118. data/generated/google/apis/cloudtrace_v1/classes.rb +188 -0
  119. data/generated/google/apis/cloudtrace_v1/representations.rb +92 -0
  120. data/generated/google/apis/cloudtrace_v1/service.rb +190 -0
  121. data/generated/google/apis/clouduseraccounts_beta.rb +43 -0
  122. data/generated/google/apis/clouduseraccounts_beta/classes.rb +823 -0
  123. data/generated/google/apis/clouduseraccounts_beta/representations.rb +313 -0
  124. data/generated/google/apis/clouduseraccounts_beta/service.rb +854 -0
  125. data/generated/google/apis/compute_beta.rb +49 -0
  126. data/generated/google/apis/compute_beta/classes.rb +9128 -0
  127. data/generated/google/apis/compute_beta/representations.rb +3048 -0
  128. data/generated/google/apis/compute_beta/service.rb +10154 -0
  129. data/generated/google/apis/compute_v1.rb +49 -0
  130. data/generated/google/apis/compute_v1/classes.rb +8681 -0
  131. data/generated/google/apis/compute_v1/representations.rb +2895 -0
  132. data/generated/google/apis/compute_v1/service.rb +9252 -0
  133. data/generated/google/apis/container_v1.rb +35 -0
  134. data/generated/google/apis/container_v1/classes.rb +463 -0
  135. data/generated/google/apis/container_v1/representations.rb +175 -0
  136. data/generated/google/apis/container_v1/service.rb +367 -0
  137. data/generated/google/apis/container_v1beta1.rb +35 -0
  138. data/generated/google/apis/container_v1beta1/classes.rb +466 -0
  139. data/generated/google/apis/container_v1beta1/representations.rb +177 -0
  140. data/generated/google/apis/container_v1beta1/service.rb +394 -0
  141. data/generated/google/apis/content_v2.rb +35 -0
  142. data/generated/google/apis/content_v2/classes.rb +5986 -0
  143. data/generated/google/apis/content_v2/representations.rb +2288 -0
  144. data/generated/google/apis/content_v2/service.rb +2338 -0
  145. data/generated/google/apis/coordinate_v1.rb +37 -0
  146. data/generated/google/apis/coordinate_v1/classes.rb +669 -0
  147. data/generated/google/apis/coordinate_v1/representations.rb +285 -0
  148. data/generated/google/apis/coordinate_v1/service.rb +678 -0
  149. data/{lib/google/api_client/auth/compute_service_account.rb → generated/google/apis/customsearch_v1.rb} +13 -10
  150. data/generated/google/apis/customsearch_v1/classes.rb +771 -0
  151. data/generated/google/apis/customsearch_v1/representations.rb +276 -0
  152. data/generated/google/apis/customsearch_v1/service.rb +207 -0
  153. data/generated/google/apis/datastore_v1beta2.rb +40 -0
  154. data/generated/google/apis/datastore_v1beta2/classes.rb +1186 -0
  155. data/generated/google/apis/datastore_v1beta2/representations.rb +526 -0
  156. data/generated/google/apis/datastore_v1beta2/service.rb +294 -0
  157. data/generated/google/apis/deploymentmanager_v2.rb +44 -0
  158. data/generated/google/apis/deploymentmanager_v2/classes.rb +1091 -0
  159. data/generated/google/apis/deploymentmanager_v2/representations.rb +422 -0
  160. data/generated/google/apis/deploymentmanager_v2/service.rb +857 -0
  161. data/generated/google/apis/deploymentmanager_v2beta2.rb +44 -0
  162. data/generated/google/apis/deploymentmanager_v2beta2/classes.rb +843 -0
  163. data/generated/google/apis/deploymentmanager_v2beta2/representations.rb +306 -0
  164. data/generated/google/apis/deploymentmanager_v2beta2/service.rb +689 -0
  165. data/generated/google/apis/dfareporting_v2_1.rb +37 -0
  166. data/generated/google/apis/dfareporting_v2_1/classes.rb +10770 -0
  167. data/generated/google/apis/dfareporting_v2_1/representations.rb +3438 -0
  168. data/generated/google/apis/dfareporting_v2_1/service.rb +8585 -0
  169. data/generated/google/apis/discovery_v1.rb +32 -0
  170. data/generated/google/apis/discovery_v1/classes.rb +961 -0
  171. data/generated/google/apis/discovery_v1/representations.rb +357 -0
  172. data/generated/google/apis/discovery_v1/service.rb +142 -0
  173. data/generated/google/apis/dns_v1.rb +44 -0
  174. data/generated/google/apis/dns_v1/classes.rb +406 -0
  175. data/generated/google/apis/dns_v1/representations.rb +151 -0
  176. data/generated/google/apis/dns_v1/service.rb +454 -0
  177. data/generated/google/apis/doubleclickbidmanager_v1.rb +31 -0
  178. data/generated/google/apis/doubleclickbidmanager_v1/classes.rb +716 -0
  179. data/generated/google/apis/doubleclickbidmanager_v1/representations.rb +298 -0
  180. data/generated/google/apis/doubleclickbidmanager_v1/service.rb +341 -0
  181. data/generated/google/apis/doubleclicksearch_v2.rb +35 -0
  182. data/generated/google/apis/doubleclicksearch_v2/classes.rb +956 -0
  183. data/generated/google/apis/doubleclicksearch_v2/representations.rb +316 -0
  184. data/generated/google/apis/doubleclicksearch_v2/service.rb +480 -0
  185. data/generated/google/apis/drive_v2.rb +58 -0
  186. data/generated/google/apis/drive_v2/classes.rb +2562 -0
  187. data/generated/google/apis/drive_v2/representations.rb +795 -0
  188. data/generated/google/apis/drive_v2/service.rb +2696 -0
  189. data/generated/google/apis/drive_v3.rb +55 -0
  190. data/generated/google/apis/drive_v3/classes.rb +1534 -0
  191. data/generated/google/apis/drive_v3/representations.rb +497 -0
  192. data/generated/google/apis/drive_v3/service.rb +1541 -0
  193. data/generated/google/apis/fitness_v1.rb +49 -0
  194. data/generated/google/apis/fitness_v1/classes.rb +885 -0
  195. data/generated/google/apis/fitness_v1/representations.rb +320 -0
  196. data/generated/google/apis/fitness_v1/service.rb +675 -0
  197. data/generated/google/apis/fusiontables_v2.rb +37 -0
  198. data/generated/google/apis/fusiontables_v2/classes.rb +1048 -0
  199. data/generated/google/apis/fusiontables_v2/representations.rb +409 -0
  200. data/generated/google/apis/fusiontables_v2/service.rb +1463 -0
  201. data/generated/google/apis/games_configuration_v1configuration.rb +34 -0
  202. data/generated/google/apis/games_configuration_v1configuration/classes.rb +506 -0
  203. data/generated/google/apis/games_configuration_v1configuration/representations.rb +206 -0
  204. data/generated/google/apis/games_configuration_v1configuration/service.rb +565 -0
  205. data/generated/google/apis/games_management_v1management.rb +37 -0
  206. data/generated/google/apis/games_management_v1management/classes.rb +524 -0
  207. data/generated/google/apis/games_management_v1management/representations.rb +231 -0
  208. data/generated/google/apis/games_management_v1management/service.rb +994 -0
  209. data/generated/google/apis/games_v1.rb +40 -0
  210. data/generated/google/apis/games_v1/classes.rb +4617 -0
  211. data/generated/google/apis/games_v1/representations.rb +1584 -0
  212. data/generated/google/apis/games_v1/service.rb +2290 -0
  213. data/generated/google/apis/gan_v1beta1.rb +31 -0
  214. data/generated/google/apis/gan_v1beta1/classes.rb +1428 -0
  215. data/generated/google/apis/gan_v1beta1/representations.rb +428 -0
  216. data/generated/google/apis/gan_v1beta1/service.rb +682 -0
  217. data/generated/google/apis/genomics_v1.rb +49 -0
  218. data/generated/google/apis/genomics_v1/classes.rb +2609 -0
  219. data/generated/google/apis/genomics_v1/representations.rb +909 -0
  220. data/generated/google/apis/genomics_v1/service.rb +1676 -0
  221. data/generated/google/apis/genomics_v1beta2.rb +46 -0
  222. data/generated/google/apis/genomics_v1beta2/classes.rb +3288 -0
  223. data/generated/google/apis/genomics_v1beta2/representations.rb +1194 -0
  224. data/generated/google/apis/genomics_v1beta2/service.rb +2392 -0
  225. data/generated/google/apis/gmail_v1.rb +52 -0
  226. data/generated/google/apis/gmail_v1/classes.rb +794 -0
  227. data/generated/google/apis/gmail_v1/representations.rb +339 -0
  228. data/generated/google/apis/gmail_v1/service.rb +1470 -0
  229. data/generated/google/apis/groupsmigration_v1.rb +34 -0
  230. data/generated/google/apis/groupsmigration_v1/classes.rb +51 -0
  231. data/generated/google/apis/groupsmigration_v1/representations.rb +38 -0
  232. data/generated/google/apis/groupsmigration_v1/service.rb +110 -0
  233. data/generated/google/apis/groupssettings_v1.rb +34 -0
  234. data/generated/google/apis/groupssettings_v1/classes.rb +221 -0
  235. data/generated/google/apis/groupssettings_v1/representations.rb +64 -0
  236. data/generated/google/apis/groupssettings_v1/service.rb +179 -0
  237. data/generated/google/apis/identitytoolkit_v3.rb +31 -0
  238. data/generated/google/apis/identitytoolkit_v3/classes.rb +1466 -0
  239. data/generated/google/apis/identitytoolkit_v3/representations.rb +509 -0
  240. data/generated/google/apis/identitytoolkit_v3/service.rb +581 -0
  241. data/{spec/google/api_client/request_spec.rb → generated/google/apis/kgsearch_v1.rb} +16 -13
  242. data/generated/google/apis/kgsearch_v1/classes.rb +59 -0
  243. data/generated/google/apis/kgsearch_v1/representations.rb +39 -0
  244. data/generated/google/apis/kgsearch_v1/service.rb +111 -0
  245. data/generated/google/apis/licensing_v1.rb +34 -0
  246. data/generated/google/apis/licensing_v1/classes.rb +132 -0
  247. data/generated/google/apis/licensing_v1/representations.rb +68 -0
  248. data/generated/google/apis/licensing_v1/service.rb +369 -0
  249. data/generated/google/apis/logging_v1beta3.rb +47 -0
  250. data/generated/google/apis/logging_v1beta3/classes.rb +1079 -0
  251. data/generated/google/apis/logging_v1beta3/representations.rb +366 -0
  252. data/generated/google/apis/logging_v1beta3/service.rb +1001 -0
  253. data/generated/google/apis/manager_v1beta2.rb +53 -0
  254. data/generated/google/apis/manager_v1beta2/classes.rb +1287 -0
  255. data/generated/google/apis/manager_v1beta2/representations.rb +536 -0
  256. data/generated/google/apis/manager_v1beta2/service.rb +372 -0
  257. data/generated/google/apis/mapsengine_v1.rb +38 -0
  258. data/generated/google/apis/mapsengine_v1/classes.rb +2873 -0
  259. data/generated/google/apis/mapsengine_v1/representations.rb +1235 -0
  260. data/generated/google/apis/mapsengine_v1/service.rb +3388 -0
  261. data/generated/google/apis/mirror_v1.rb +37 -0
  262. data/generated/google/apis/mirror_v1/classes.rb +1072 -0
  263. data/generated/google/apis/mirror_v1/representations.rb +350 -0
  264. data/generated/google/apis/mirror_v1/service.rb +977 -0
  265. data/generated/google/apis/oauth2_v2.rb +43 -0
  266. data/generated/google/apis/oauth2_v2/classes.rb +245 -0
  267. data/generated/google/apis/oauth2_v2/representations.rb +94 -0
  268. data/generated/google/apis/oauth2_v2/service.rb +199 -0
  269. data/generated/google/apis/pagespeedonline_v2.rb +32 -0
  270. data/generated/google/apis/pagespeedonline_v2/classes.rb +614 -0
  271. data/generated/google/apis/pagespeedonline_v2/representations.rb +244 -0
  272. data/generated/google/apis/pagespeedonline_v2/service.rb +119 -0
  273. data/generated/google/apis/partners_v2.rb +32 -0
  274. data/generated/google/apis/partners_v2/classes.rb +942 -0
  275. data/generated/google/apis/partners_v2/representations.rb +402 -0
  276. data/generated/google/apis/partners_v2/service.rb +400 -0
  277. data/generated/google/apis/plus_domains_v1.rb +61 -0
  278. data/generated/google/apis/plus_domains_v1/classes.rb +2609 -0
  279. data/generated/google/apis/plus_domains_v1/representations.rb +987 -0
  280. data/generated/google/apis/plus_domains_v1/service.rb +904 -0
  281. data/generated/google/apis/plus_v1.rb +43 -0
  282. data/generated/google/apis/plus_v1/classes.rb +2094 -0
  283. data/generated/google/apis/plus_v1/representations.rb +805 -0
  284. data/generated/google/apis/plus_v1/service.rb +470 -0
  285. data/generated/google/apis/prediction_v1_6.rb +44 -0
  286. data/generated/google/apis/prediction_v1_6/classes.rb +751 -0
  287. data/generated/google/apis/prediction_v1_6/representations.rb +327 -0
  288. data/generated/google/apis/prediction_v1_6/service.rb +380 -0
  289. data/generated/google/apis/proximitybeacon_v1beta1.rb +31 -0
  290. data/generated/google/apis/proximitybeacon_v1beta1/classes.rb +639 -0
  291. data/generated/google/apis/proximitybeacon_v1beta1/representations.rb +274 -0
  292. data/generated/google/apis/proximitybeacon_v1beta1/service.rb +591 -0
  293. data/generated/google/apis/pubsub_v1.rb +37 -0
  294. data/generated/google/apis/pubsub_v1/classes.rb +614 -0
  295. data/generated/google/apis/pubsub_v1/representations.rb +281 -0
  296. data/generated/google/apis/pubsub_v1/service.rb +774 -0
  297. data/generated/google/apis/pubsub_v1beta2.rb +37 -0
  298. data/generated/google/apis/pubsub_v1beta2/classes.rb +620 -0
  299. data/generated/google/apis/pubsub_v1beta2/representations.rb +282 -0
  300. data/generated/google/apis/pubsub_v1beta2/service.rb +774 -0
  301. data/generated/google/apis/qpx_express_v1.rb +31 -0
  302. data/generated/google/apis/qpx_express_v1/classes.rb +1268 -0
  303. data/generated/google/apis/qpx_express_v1/representations.rb +424 -0
  304. data/generated/google/apis/qpx_express_v1/service.rb +100 -0
  305. data/generated/google/apis/replicapool_v1beta2.rb +44 -0
  306. data/generated/google/apis/replicapool_v1beta2/classes.rb +631 -0
  307. data/generated/google/apis/replicapool_v1beta2/representations.rb +236 -0
  308. data/generated/google/apis/replicapool_v1beta2/service.rb +608 -0
  309. data/generated/google/apis/replicapoolupdater_v1beta1.rb +44 -0
  310. data/generated/google/apis/replicapoolupdater_v1beta1/classes.rb +733 -0
  311. data/generated/google/apis/replicapoolupdater_v1beta1/representations.rb +264 -0
  312. data/generated/google/apis/replicapoolupdater_v1beta1/service.rb +508 -0
  313. data/generated/google/apis/reseller_v1.rb +37 -0
  314. data/generated/google/apis/reseller_v1/classes.rb +520 -0
  315. data/generated/google/apis/reseller_v1/representations.rb +200 -0
  316. data/generated/google/apis/reseller_v1/service.rb +623 -0
  317. data/generated/google/apis/resourceviews_v1beta2.rb +50 -0
  318. data/generated/google/apis/resourceviews_v1beta2/classes.rb +660 -0
  319. data/generated/google/apis/resourceviews_v1beta2/representations.rb +269 -0
  320. data/generated/google/apis/resourceviews_v1beta2/service.rb +563 -0
  321. data/generated/google/apis/script_v1.rb +61 -0
  322. data/generated/google/apis/script_v1/classes.rb +259 -0
  323. data/generated/google/apis/script_v1/representations.rb +106 -0
  324. data/generated/google/apis/script_v1/service.rb +98 -0
  325. data/generated/google/apis/site_verification_v1.rb +37 -0
  326. data/generated/google/apis/site_verification_v1/classes.rb +185 -0
  327. data/generated/google/apis/site_verification_v1/representations.rb +101 -0
  328. data/generated/google/apis/site_verification_v1/service.rb +315 -0
  329. data/generated/google/apis/sqladmin_v1beta4.rb +37 -0
  330. data/generated/google/apis/sqladmin_v1beta4/classes.rb +2001 -0
  331. data/generated/google/apis/sqladmin_v1beta4/representations.rb +758 -0
  332. data/generated/google/apis/sqladmin_v1beta4/service.rb +1625 -0
  333. data/generated/google/apis/storage_v1.rb +46 -0
  334. data/generated/google/apis/storage_v1/classes.rb +1222 -0
  335. data/generated/google/apis/storage_v1/representations.rb +445 -0
  336. data/generated/google/apis/storage_v1/service.rb +1903 -0
  337. data/generated/google/apis/storagetransfer_v1.rb +35 -0
  338. data/generated/google/apis/storagetransfer_v1/classes.rb +1046 -0
  339. data/generated/google/apis/storagetransfer_v1/representations.rb +370 -0
  340. data/generated/google/apis/storagetransfer_v1/service.rb +473 -0
  341. data/generated/google/apis/tagmanager_v1.rb +52 -0
  342. data/generated/google/apis/tagmanager_v1/classes.rb +1384 -0
  343. data/generated/google/apis/tagmanager_v1/representations.rb +515 -0
  344. data/generated/google/apis/tagmanager_v1/service.rb +1817 -0
  345. data/generated/google/apis/taskqueue_v1beta2.rb +37 -0
  346. data/generated/google/apis/taskqueue_v1beta2/classes.rb +254 -0
  347. data/generated/google/apis/taskqueue_v1beta2/representations.rb +114 -0
  348. data/generated/google/apis/taskqueue_v1beta2/service.rb +408 -0
  349. data/generated/google/apis/tasks_v1.rb +37 -0
  350. data/generated/google/apis/tasks_v1/classes.rb +296 -0
  351. data/generated/google/apis/tasks_v1/representations.rb +115 -0
  352. data/generated/google/apis/tasks_v1/service.rb +643 -0
  353. data/generated/google/apis/translate_v2.rb +31 -0
  354. data/generated/google/apis/translate_v2/classes.rb +168 -0
  355. data/generated/google/apis/translate_v2/representations.rb +109 -0
  356. data/generated/google/apis/translate_v2/service.rb +182 -0
  357. data/generated/google/apis/urlshortener_v1.rb +34 -0
  358. data/generated/google/apis/urlshortener_v1/classes.rb +246 -0
  359. data/generated/google/apis/urlshortener_v1/representations.rb +111 -0
  360. data/generated/google/apis/urlshortener_v1/service.rb +176 -0
  361. data/generated/google/apis/webmasters_v3.rb +37 -0
  362. data/generated/google/apis/webmasters_v3/classes.rb +563 -0
  363. data/generated/google/apis/webmasters_v3/representations.rb +250 -0
  364. data/generated/google/apis/webmasters_v3/service.rb +573 -0
  365. data/generated/google/apis/youtube_analytics_v1.rb +46 -0
  366. data/generated/google/apis/youtube_analytics_v1/classes.rb +546 -0
  367. data/generated/google/apis/youtube_analytics_v1/representations.rb +243 -0
  368. data/generated/google/apis/youtube_analytics_v1/service.rb +562 -0
  369. data/generated/google/apis/youtube_v3.rb +49 -0
  370. data/generated/google/apis/youtube_v3/classes.rb +8136 -0
  371. data/generated/google/apis/youtube_v3/representations.rb +2838 -0
  372. data/generated/google/apis/youtube_v3/service.rb +4403 -0
  373. data/generated/google/apis/youtubereporting_v1.rb +38 -0
  374. data/generated/google/apis/youtubereporting_v1/classes.rb +258 -0
  375. data/generated/google/apis/youtubereporting_v1/representations.rb +128 -0
  376. data/generated/google/apis/youtubereporting_v1/service.rb +364 -0
  377. data/google-api-client.gemspec +27 -39
  378. data/lib/google/api_client/auth/installed_app.rb +7 -5
  379. data/lib/google/api_client/auth/key_utils.rb +1 -0
  380. data/lib/google/api_client/auth/storage.rb +4 -2
  381. data/lib/google/api_client/auth/storages/file_store.rb +2 -3
  382. data/lib/google/api_client/auth/storages/redis_store.rb +7 -2
  383. data/lib/google/api_client/client_secrets.rb +4 -5
  384. data/lib/google/apis.rb +48 -0
  385. data/lib/google/apis/core/api_command.rb +135 -0
  386. data/lib/google/apis/core/base_service.rb +317 -0
  387. data/lib/google/apis/core/batch.rb +239 -0
  388. data/lib/google/apis/core/download.rb +94 -0
  389. data/lib/google/apis/core/hashable.rb +44 -0
  390. data/lib/google/apis/core/http_client_adapter.rb +82 -0
  391. data/lib/google/apis/core/http_command.rb +312 -0
  392. data/lib/google/apis/core/json_representation.rb +127 -0
  393. data/lib/google/{api_client/version.rb → apis/core/logging.rb} +12 -8
  394. data/lib/google/apis/core/multipart.rb +187 -0
  395. data/lib/google/apis/core/upload.rb +288 -0
  396. data/lib/google/{api_client → apis}/errors.rb +39 -28
  397. data/lib/google/apis/generator.rb +70 -0
  398. data/lib/google/apis/generator/annotator.rb +295 -0
  399. data/lib/google/apis/generator/helpers.rb +74 -0
  400. data/lib/google/apis/generator/model.rb +143 -0
  401. data/lib/google/apis/generator/template.rb +124 -0
  402. data/lib/google/apis/generator/templates/_class.tmpl +40 -0
  403. data/lib/google/apis/generator/templates/_method.tmpl +92 -0
  404. data/lib/google/apis/generator/templates/_representation.tmpl +51 -0
  405. data/lib/google/apis/generator/templates/_representation_stub.tmpl +15 -0
  406. data/lib/google/apis/generator/templates/_representation_type.tmpl +10 -0
  407. data/lib/google/{api_client/reference.rb → apis/generator/templates/classes.rb.tmpl} +11 -9
  408. data/lib/google/apis/generator/templates/module.rb.tmpl +40 -0
  409. data/lib/google/apis/generator/templates/representations.rb.tmpl +32 -0
  410. data/lib/google/apis/generator/templates/service.rb.tmpl +60 -0
  411. data/lib/google/apis/options.rb +85 -0
  412. data/lib/google/apis/version.rb +39 -0
  413. data/rakelib/metrics.rake +22 -0
  414. data/rakelib/rubocop.rake +10 -0
  415. data/rakelib/spec.rake +11 -0
  416. data/rakelib/yard.rake +11 -0
  417. data/samples/Gemfile +7 -0
  418. data/samples/README.md +51 -0
  419. data/samples/google-api-samples +32 -0
  420. data/samples/lib/base_cli.rb +94 -0
  421. data/samples/lib/samples/analytics.rb +62 -0
  422. data/samples/lib/samples/calendar.rb +83 -0
  423. data/samples/lib/samples/drive.rb +82 -0
  424. data/samples/lib/samples/gmail.rb +50 -0
  425. data/samples/lib/samples/pubsub.rb +114 -0
  426. data/samples/lib/samples/translate.rb +44 -0
  427. data/samples/lib/samples/you_tube.rb +44 -0
  428. data/script/generate +95 -0
  429. data/script/package +8 -0
  430. data/script/release +15 -0
  431. data/spec/fixtures/files/api_names.yaml +3 -0
  432. data/spec/fixtures/files/auth_stored_credentials.json +8 -0
  433. data/spec/fixtures/files/child/.gitignore +0 -0
  434. data/spec/fixtures/files/client_secrets.json +1 -0
  435. data/spec/fixtures/files/invalid.json +1 -0
  436. data/spec/fixtures/files/test.blah +1 -0
  437. data/spec/fixtures/files/test.txt +1 -0
  438. data/spec/fixtures/files/test_api.json +440 -0
  439. data/spec/google/api_client/auth/storage_spec.rb +1 -3
  440. data/spec/google/api_client/auth/storages/file_store_spec.rb +1 -2
  441. data/spec/google/api_client/auth/storages/redis_store_spec.rb +1 -3
  442. data/spec/google/api_client/client_secrets_spec.rb +38 -1
  443. data/spec/google/apis/core/api_command_spec.rb +209 -0
  444. data/spec/google/apis/core/batch_spec.rb +142 -0
  445. data/spec/google/apis/core/download_spec.rb +103 -0
  446. data/spec/google/apis/core/hashable_spec.rb +60 -0
  447. data/spec/google/apis/core/http_command_spec.rb +284 -0
  448. data/spec/google/apis/core/json_representation_spec.rb +192 -0
  449. data/spec/google/apis/core/service_spec.rb +247 -0
  450. data/spec/google/apis/core/upload_spec.rb +300 -0
  451. data/{lib/google/api_client/discovery.rb → spec/google/apis/generated_spec.rb} +13 -5
  452. data/spec/google/apis/generator/generator_spec.rb +272 -0
  453. data/spec/google/apis/logging_spec.rb +45 -0
  454. data/spec/google/apis/options_spec.rb +40 -0
  455. data/spec/integration_tests/adsense_spec.rb +29 -0
  456. data/spec/integration_tests/drive_spec.rb +35 -0
  457. data/spec/integration_tests/pubsub_spec.rb +48 -0
  458. data/spec/integration_tests/url_shortener_spec.rb +45 -0
  459. data/spec/spec_helper.rb +131 -44
  460. data/spec/spec_helper/load_path_spec.rb +33 -0
  461. data/third_party/hurley_patches.rb +103 -0
  462. metadata +533 -170
  463. data/lib/compat/multi_json.rb +0 -19
  464. data/lib/google/api_client.rb +0 -750
  465. data/lib/google/api_client/auth/file_storage.rb +0 -59
  466. data/lib/google/api_client/auth/jwt_asserter.rb +0 -126
  467. data/lib/google/api_client/auth/pkcs12.rb +0 -41
  468. data/lib/google/api_client/batch.rb +0 -326
  469. data/lib/google/api_client/charset.rb +0 -33
  470. data/lib/google/api_client/discovery/api.rb +0 -310
  471. data/lib/google/api_client/discovery/media.rb +0 -77
  472. data/lib/google/api_client/discovery/method.rb +0 -363
  473. data/lib/google/api_client/discovery/resource.rb +0 -156
  474. data/lib/google/api_client/discovery/schema.rb +0 -117
  475. data/lib/google/api_client/environment.rb +0 -42
  476. data/lib/google/api_client/gzip.rb +0 -28
  477. data/lib/google/api_client/logging.rb +0 -32
  478. data/lib/google/api_client/media.rb +0 -259
  479. data/lib/google/api_client/railtie.rb +0 -18
  480. data/lib/google/api_client/request.rb +0 -350
  481. data/lib/google/api_client/result.rb +0 -255
  482. data/lib/google/api_client/service.rb +0 -233
  483. data/lib/google/api_client/service/batch.rb +0 -110
  484. data/lib/google/api_client/service/request.rb +0 -144
  485. data/lib/google/api_client/service/resource.rb +0 -40
  486. data/lib/google/api_client/service/result.rb +0 -162
  487. data/lib/google/api_client/service/simple_file_store.rb +0 -151
  488. data/lib/google/api_client/service/stub_generator.rb +0 -61
  489. data/spec/google/api_client/batch_spec.rb +0 -248
  490. data/spec/google/api_client/discovery_spec.rb +0 -708
  491. data/spec/google/api_client/gzip_spec.rb +0 -98
  492. data/spec/google/api_client/media_spec.rb +0 -178
  493. data/spec/google/api_client/result_spec.rb +0 -207
  494. data/spec/google/api_client/service_account_spec.rb +0 -169
  495. data/spec/google/api_client/service_spec.rb +0 -618
  496. data/spec/google/api_client/simple_file_store_spec.rb +0 -133
  497. data/spec/google/api_client_spec.rb +0 -352
@@ -0,0 +1,247 @@
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 'spec_helper'
16
+ require 'google/apis/options'
17
+ require 'google/apis/core/base_service'
18
+ require 'google/apis/core/json_representation'
19
+ require 'hurley/test'
20
+
21
+ RSpec.describe Google::Apis::Core::BaseService do
22
+ include TestHelpers
23
+
24
+ let(:service) { Google::Apis::Core::BaseService.new('https://www.googleapis.com/', '') }
25
+
26
+ before do
27
+ Google::Apis::ClientOptions.default.application_name = 'test'
28
+ Google::Apis::ClientOptions.default.application_version = '1.0'
29
+ end
30
+
31
+ it 'should inherit default options' do
32
+ expect(service.client_options.application_name).to eql 'test'
33
+ end
34
+
35
+ it 'should include application in user agent' do
36
+ agent = service.send(:user_agent)
37
+ expect(agent).to match /^test\/1.0/
38
+ end
39
+
40
+ it 'should inherit authorization' do
41
+ Google::Apis::RequestOptions.default.authorization = 'a token'
42
+ expect(service.authorization).to eql 'a token'
43
+ end
44
+
45
+ it 'should allow overiding authorization' do
46
+ Google::Apis::RequestOptions.default.authorization = 'a token'
47
+ service.authorization = 'another token'
48
+ expect(service.authorization).to eql 'another token'
49
+ end
50
+
51
+ shared_examples 'with options' do
52
+ it 'should inherit service options' do
53
+ service.request_options.retries = 2
54
+ expect(command.options.retries).to eql 2
55
+ end
56
+
57
+ it 'should include per-request options' do
58
+ expect(command.options.authorization).to eql 'foo'
59
+ end
60
+
61
+ it 'should allow per-request options to override service options' do
62
+ service.request_options.authorization = 'bar'
63
+ expect(command.options.authorization).to eql 'foo'
64
+ end
65
+ end
66
+
67
+ context 'when making raw http requests' do
68
+ context 'with :get methods' do
69
+ before(:example) do
70
+ stub_request(:get, 'https://www.googleapis.com/zoo/animals').to_return(body: 'hello world')
71
+ end
72
+
73
+ it 'should return body for get' do
74
+ response = service.http(:get, 'https://www.googleapis.com/zoo/animals')
75
+ expect(response).to eq 'hello world'
76
+ end
77
+
78
+ it 'should return allow downloads' do
79
+ response = service.http(:get, 'https://www.googleapis.com/zoo/animals', download_dest: StringIO.new)
80
+ expect(response.string).to eq 'hello world'
81
+ end
82
+ end
83
+
84
+ context 'with :post methods' do
85
+ before(:example) do
86
+ stub_request(:post, 'https://www.googleapis.com/zoo/animals').to_return(body: '')
87
+ end
88
+
89
+ it 'should post body' do
90
+ service.http(:post, 'https://www.googleapis.com/zoo/animals', body: 'hello')
91
+ expect(a_request(:post, 'https://www.googleapis.com/zoo/animals')
92
+ .with(body: 'hello')).to have_been_made
93
+ end
94
+ end
95
+ end
96
+
97
+ context 'when making simple commands' do
98
+ let(:command) { service.send(:make_simple_command, :get, 'zoo/animals', authorization: 'foo') }
99
+
100
+ it 'should return the correct command type' do
101
+ expect(command).to be_an_instance_of(Google::Apis::Core::ApiCommand)
102
+ end
103
+
104
+ it 'should build a correct URL' do
105
+ url = command.url.expand({}).to_s
106
+ expect(url).to eql 'https://www.googleapis.com/zoo/animals'
107
+ end
108
+
109
+ include_examples 'with options'
110
+ end
111
+
112
+ context 'when making download commands' do
113
+ let(:command) { service.send(:make_download_command, :get, 'zoo/animals', authorization: 'foo') }
114
+
115
+ it 'should return the correct command type' do
116
+ expect(command).to be_an_instance_of(Google::Apis::Core::DownloadCommand)
117
+ end
118
+
119
+ it 'should build a correct URL' do
120
+ url = command.url.expand({}).to_s
121
+ expect(url).to eql 'https://www.googleapis.com/zoo/animals'
122
+ end
123
+
124
+ it 'should include alt=media in params' do
125
+ expect(command.query).to include('alt' => 'media')
126
+ end
127
+
128
+ include_examples 'with options'
129
+ end
130
+
131
+ context 'when making upload commands' do
132
+ let(:command) { service.send(:make_upload_command, :post, 'zoo/animals', authorization: 'foo') }
133
+
134
+ it 'should return the correct command type' do
135
+ expect(command).to be_an_instance_of(Google::Apis::Core::ResumableUploadCommand)
136
+ end
137
+
138
+ it 'should build a correct URL' do
139
+ url = command.url.expand({}).to_s
140
+ expect(url).to eql 'https://www.googleapis.com/upload/zoo/animals'
141
+ end
142
+
143
+ include_examples 'with options'
144
+ end
145
+
146
+ context 'with batch' do
147
+ before(:example) do
148
+ response = <<EOF.gsub(/\n/, "\r\n")
149
+ --batch123
150
+ Content-Type: application/http
151
+
152
+ HTTP/1.1 200 OK
153
+ Content-Type: text/plain; charset=UTF-8
154
+
155
+ Hello
156
+ --batch123--
157
+ EOF
158
+ stub_request(:post, 'https://www.googleapis.com/batch')
159
+ .to_return(headers: { 'Content-Type' => 'multipart/mixed; boundary=batch123' }, body: response)
160
+ end
161
+
162
+ it 'should add commands to a batch' do
163
+ expect do |b|
164
+ service.batch do |service|
165
+ command = service.send(:make_simple_command, :get, 'zoo/animals', {})
166
+ service.send(:execute_or_queue_command, command, &b)
167
+ end
168
+ end.to yield_with_args('Hello', nil)
169
+ end
170
+
171
+ it 'should disallow uploads in batch' do
172
+ expect do |b|
173
+ service.batch do |service|
174
+ command = service.send(:make_upload_command, :post, 'zoo/animals', {})
175
+ service.send(:execute_or_queue_command, command, &b)
176
+ end
177
+ end.to raise_error(Google::Apis::ClientError)
178
+ end
179
+
180
+ it 'should disallow downloads in batch' do
181
+ expect do |b|
182
+ service.batch do |service|
183
+ command = service.send(:make_download_command, :get, 'zoo/animals', {})
184
+ service.send(:execute_or_queue_command, command, &b)
185
+ end
186
+ end.to raise_error(Google::Apis::ClientError)
187
+ end
188
+ end
189
+
190
+ context 'with batch uploads' do
191
+ before(:example) do
192
+ response = <<EOF.gsub(/\n/, "\r\n")
193
+ --batch123
194
+ Content-Type: application/http
195
+
196
+ HTTP/1.1 200 OK
197
+ Content-Type: text/plain; charset=UTF-8
198
+
199
+ Hello
200
+ --batch123--
201
+ EOF
202
+ stub_request(:put, 'https://www.googleapis.com/upload/')
203
+ .to_return(headers: { 'Content-Type' => 'multipart/mixed; boundary=batch123' }, body: response)
204
+ end
205
+
206
+ it 'should add upload to a batch' do
207
+ expect do |b|
208
+ service.batch_upload do |service|
209
+ command = service.send(:make_upload_command, :post, 'zoo/animals', {})
210
+ command.upload_source = StringIO.new('test')
211
+ command.upload_content_type = 'text/plain'
212
+ service.send(:execute_or_queue_command, command, &b)
213
+ end
214
+ end.to yield_with_args('Hello', nil)
215
+ end
216
+
217
+ it 'should use multipart upload' do
218
+ expect do |b|
219
+ service.batch_upload do |service|
220
+ command = service.send(:make_upload_command, :post, 'zoo/animals', {})
221
+ command.upload_source = StringIO.new('test')
222
+ command.upload_content_type = 'text/plain'
223
+ expect(command).to be_an_instance_of(Google::Apis::Core::MultipartUploadCommand)
224
+ service.send(:execute_or_queue_command, command, &b)
225
+ end
226
+ end.to yield_with_args('Hello', nil)
227
+ end
228
+
229
+ it 'should disallow downloads in batch' do
230
+ expect do |b|
231
+ service.batch_upload do |service|
232
+ command = service.send(:make_download_command, :get, 'zoo/animals', {})
233
+ service.send(:execute_or_queue_command, command, &b)
234
+ end
235
+ end.to raise_error(Google::Apis::ClientError)
236
+ end
237
+
238
+ it 'should disallow simple commands in batch' do
239
+ expect do |b|
240
+ service.batch_upload do |service|
241
+ command = service.send(:make_simple_command, :get, 'zoo/animals', {})
242
+ service.send(:execute_or_queue_command, command, &b)
243
+ end
244
+ end.to raise_error(Google::Apis::ClientError)
245
+ end
246
+ end
247
+ end
@@ -0,0 +1,300 @@
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 'spec_helper'
16
+ require 'google/apis/core/upload'
17
+ require 'google/apis/core/json_representation'
18
+ require 'hurley/test'
19
+
20
+ # TODO: JSON Response decoding
21
+ # TODO: Upload from IO
22
+ # TODO: Upload from file
23
+
24
+ RSpec.describe Google::Apis::Core::UploadIO do
25
+ context 'from_file' do
26
+ let(:upload_io) { Google::Apis::Core::UploadIO.from_file(file) }
27
+
28
+ context 'with text file' do
29
+ let(:file) { File.join(FIXTURES_DIR, 'files', 'test.txt') }
30
+ it 'should infer content type from file' do
31
+ expect(upload_io.content_type).to eql('text/plain')
32
+ end
33
+
34
+ it 'should allow overriding the mime type' do
35
+ io = Google::Apis::Core::UploadIO.from_file(file, content_type: 'application/json')
36
+ expect(io.content_type).to eql('application/json')
37
+ end
38
+ end
39
+
40
+ context 'with unknown type' do
41
+ let(:file) { File.join(FIXTURES_DIR, 'files', 'test.blah') }
42
+ it 'should use the default mime type' do
43
+ expect(upload_io.content_type).to eql('application/octet-stream')
44
+ end
45
+
46
+ it 'should allow overriding the mime type' do
47
+ io = Google::Apis::Core::UploadIO.from_file(file, content_type: 'application/json')
48
+ expect(io.content_type).to eql('application/json')
49
+ end
50
+
51
+ it 'should setup length of the stream' do
52
+ upload_io = Google::Apis::Core::UploadIO.from_file(file)
53
+ expect(upload_io.length).to eq File.size(file)
54
+ end
55
+
56
+ end
57
+ end
58
+
59
+ context 'from_io' do
60
+
61
+ context 'with i/o stream' do
62
+ let(:io) { StringIO.new 'Hello google' }
63
+
64
+ it 'should setup default content-type' do
65
+ upload_io = Google::Apis::Core::UploadIO.from_io(io)
66
+ expect(upload_io.content_type).to eql Google::Apis::Core::UploadIO::OCTET_STREAM_CONTENT_TYPE
67
+ end
68
+
69
+ it 'should allow overring the mime type' do
70
+ upload_io = Google::Apis::Core::UploadIO.from_io(io, content_type: 'application/x-gzip')
71
+ expect(upload_io.content_type).to eq('application/x-gzip')
72
+ end
73
+
74
+ it 'should setup length of the stream' do
75
+ upload_io = Google::Apis::Core::UploadIO.from_io(io)
76
+ expect(upload_io.length).to eq 'Hello google'.length
77
+ end
78
+ end
79
+
80
+ end
81
+ end
82
+
83
+ RSpec.describe Google::Apis::Core::RawUploadCommand do
84
+ include TestHelpers
85
+ include_context 'HTTP client'
86
+
87
+ let(:command) do
88
+ command = Google::Apis::Core::RawUploadCommand.new(:post, 'https://www.googleapis.com/zoo/animals')
89
+ command.upload_source = file
90
+ command.upload_content_type = 'text/plain'
91
+ command
92
+ end
93
+
94
+ shared_examples 'should upload' do
95
+ before(:example) do
96
+ stub_request(:post, 'https://www.googleapis.com/zoo/animals').to_return(body: '')
97
+ end
98
+
99
+ it 'should send content' do
100
+ command.execute(client)
101
+ expect(a_request(:post, 'https://www.googleapis.com/zoo/animals')
102
+ .with(body: "Hello world\n")).to have_been_made
103
+ end
104
+
105
+ it 'should send upload protocol' do
106
+ command.execute(client)
107
+ expect(a_request(:post, 'https://www.googleapis.com/zoo/animals')
108
+ .with { |req| req.headers['X-Goog-Upload-Protocol'] == 'raw' }).to have_been_made
109
+ end
110
+
111
+ it 'should send content-type header' do
112
+ command.execute(client)
113
+ expect(a_request(:post, 'https://www.googleapis.com/zoo/animals')
114
+ .with { |req| req.headers['X-Goog-Upload-Header-Content-Type'] == 'text/plain' }).to have_been_made
115
+ end
116
+ end
117
+
118
+ context('with StringIO input') do
119
+ let(:file) { StringIO.new("Hello world\n") }
120
+ include_examples 'should upload'
121
+ end
122
+
123
+ context('with IO input') do
124
+ let(:file) { File.open(File.join(FIXTURES_DIR, 'files', 'test.txt'), 'r') }
125
+ include_examples 'should upload'
126
+
127
+ it 'should not close stream' do
128
+ expect(file.closed?).to be false
129
+ end
130
+ end
131
+
132
+ context('with Tempfile input') do
133
+ let(:file) do
134
+ temp_file = Tempfile.new("tempfile")
135
+ temp_file.write("Hello world\n")
136
+ temp_file.rewind
137
+ temp_file
138
+ end
139
+ include_examples 'should upload'
140
+
141
+ it 'should not close stream' do
142
+ expect(file.closed?).to be false
143
+ end
144
+ end
145
+
146
+ context('with file path input') do
147
+ let(:file) { File.join(FIXTURES_DIR, 'files', 'test.txt') }
148
+ include_examples 'should upload'
149
+ end
150
+
151
+ context('with invalid input') do
152
+ let(:file) { -> {} }
153
+ it 'should raise client error' do
154
+ expect { command.execute(client) }.to raise_error(Google::Apis::ClientError)
155
+ end
156
+ end
157
+ end
158
+
159
+ RSpec.describe Google::Apis::Core::MultipartUploadCommand do
160
+ include TestHelpers
161
+ include_context 'HTTP client'
162
+
163
+ let(:command) do
164
+ command = Google::Apis::Core::MultipartUploadCommand.new(:post, 'https://www.googleapis.com/zoo/animals')
165
+ command.upload_source = StringIO.new('Hello world')
166
+ command.upload_content_type = 'text/plain'
167
+ command.body = 'metadata'
168
+ command
169
+ end
170
+
171
+ before(:example) do
172
+ stub_request(:post, 'https://www.googleapis.com/zoo/animals').to_return(body: %(Hello world))
173
+ end
174
+
175
+ it 'should send content' do
176
+ expected_body = <<EOF.gsub(/\n/, "\r\n")
177
+ --RubyApiClientUpload
178
+ Content-Type: application/json
179
+
180
+ metadata
181
+ --RubyApiClientUpload
182
+ Content-Length: 11
183
+ Content-Type: text/plain
184
+ Content-Transfer-Encoding: binary
185
+
186
+ Hello world
187
+ --RubyApiClientUpload--
188
+
189
+ EOF
190
+ command.execute(client)
191
+ expect(a_request(:post, 'https://www.googleapis.com/zoo/animals')
192
+ .with(body: expected_body)).to have_been_made
193
+ end
194
+
195
+ it 'should send upload protocol' do
196
+ command.execute(client)
197
+ expect(a_request(:post, 'https://www.googleapis.com/zoo/animals')
198
+ .with { |req| req.headers['X-Goog-Upload-Protocol'] == 'multipart' }).to have_been_made
199
+ end
200
+ end
201
+
202
+ RSpec.describe Google::Apis::Core::ResumableUploadCommand do
203
+ include TestHelpers
204
+ include_context 'HTTP client'
205
+
206
+ let(:command) do
207
+ command = Google::Apis::Core::ResumableUploadCommand.new(:post, 'https://www.googleapis.com/zoo/animals')
208
+ command.upload_source = StringIO.new('Hello world')
209
+ command.upload_content_type = 'text/plain'
210
+ command
211
+ end
212
+
213
+ context 'with uninterrupted upload' do
214
+ before(:example) do
215
+ stub_request(:post, 'https://www.googleapis.com/zoo/animals')
216
+ .to_return(headers: { 'X-Goog-Upload-Status' => 'active', 'X-Goog-Upload-URL' => 'https://www.googleapis.com/zoo/animals' })
217
+ .to_return(headers: { 'X-Goog-Upload-Status' => 'final' }, body: %(OK))
218
+ end
219
+
220
+ it 'should send upload protocol' do
221
+ command.execute(client)
222
+ expect(a_request(:post, 'https://www.googleapis.com/zoo/animals')
223
+ .with { |req| req.headers['X-Goog-Upload-Protocol'] == 'resumable' }).to have_been_made
224
+ end
225
+
226
+ it 'should send start command' do
227
+ command.execute(client)
228
+ expect(a_request(:post, 'https://www.googleapis.com/zoo/animals')
229
+ .with { |req| req.headers['X-Goog-Upload-Command'] == 'start' }).to have_been_made
230
+ end
231
+
232
+ it 'should send upload command' do
233
+ command.execute(client)
234
+ expect(a_request(:post, 'https://www.googleapis.com/zoo/animals')
235
+ .with { |req| req.headers['X-Goog-Upload-Command'].include?('upload') }).to have_been_made
236
+ end
237
+
238
+ it 'should send upload content' do
239
+ command.execute(client)
240
+ expect(a_request(:post, 'https://www.googleapis.com/zoo/animals')
241
+ .with(body: 'Hello world')).to have_been_made
242
+ end
243
+ end
244
+
245
+ context 'with retriable error on start' do
246
+ before(:example) do
247
+ stub_request(:post, 'https://www.googleapis.com/zoo/animals')
248
+ .to_timeout
249
+ .to_return(headers: { 'X-Goog-Upload-Status' => 'active', 'X-Goog-Upload-URL' => 'https://www.googleapis.com/zoo/animals' })
250
+ .to_return(headers: { 'X-Goog-Upload-Status' => 'active', 'X-Goog-Upload-Size-Received' => '6' })
251
+ .to_return(headers: { 'X-Goog-Upload-Status' => 'final' }, body: %(OK))
252
+ end
253
+
254
+ it 'should retry start command and continue' do
255
+ command.execute(client)
256
+ expect(a_request(:post, 'https://www.googleapis.com/zoo/animals')
257
+ .with(body: 'Hello world')).to have_been_made
258
+ end
259
+ end
260
+
261
+ context 'with non-retriable authorization error on start' do
262
+ before(:example) do
263
+ stub_request(:post, 'https://www.googleapis.com/zoo/animals')
264
+ .to_return(status: [401, 'unauthorized'], headers: { 'X-Goog-Upload-Status' => 'final' }, body: %(unauthorized))
265
+ end
266
+
267
+ it 'should propagate the original error' do
268
+ expect { command.execute(client) }.to raise_error Google::Apis::AuthorizationError
269
+ end
270
+ end
271
+
272
+ context 'with interruption' do
273
+ before(:example) do
274
+ stub_request(:post, 'https://www.googleapis.com/zoo/animals')
275
+ .to_return(headers: { 'X-Goog-Upload-Status' => 'active', 'X-Goog-Upload-URL' => 'https://www.googleapis.com/zoo/animals' })
276
+ .to_return(status: [500, 'Server error'])
277
+ .to_return(headers: { 'X-Goog-Upload-Status' => 'active', 'X-Goog-Upload-Size-Received' => '6' })
278
+ .to_return(headers: { 'X-Goog-Upload-Status' => 'final' }, body: %(OK))
279
+ end
280
+
281
+ it 'should send remaining upload content after failure' do
282
+ command.execute(client)
283
+ expect(a_request(:post, 'https://www.googleapis.com/zoo/animals')
284
+ .with(body: 'world')).to have_been_made
285
+ end
286
+ end
287
+
288
+ context 'with cancelled upload' do
289
+ before(:example) do
290
+ stub_request(:post, 'https://www.googleapis.com/zoo/animals')
291
+ .to_return(headers: { 'X-Goog-Upload-Status' => 'active', 'X-Goog-Upload-URL' => 'https://www.googleapis.com/zoo/animals' })
292
+ .to_return(status: [500, 'Server error'])
293
+ .to_return(headers: { 'X-Goog-Upload-Status' => 'cancelled' })
294
+ end
295
+
296
+ it 'should raise error' do
297
+ expect { command.execute(client) }.to raise_error Google::Apis::ClientError
298
+ end
299
+ end
300
+ end