google-api-client 0.8.7 → 0.9.pre1

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 (397) 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 +21 -0
  7. data/.yardopts +12 -0
  8. data/CHANGELOG.md +6 -3
  9. data/CONTRIBUTING.md +31 -0
  10. data/Gemfile +28 -2
  11. data/MIGRATING.md +171 -0
  12. data/README.md +158 -150
  13. data/Rakefile +1 -40
  14. data/api_names.yaml +872 -0
  15. data/api_names_out.yaml +20843 -0
  16. data/bin/generate-api +93 -0
  17. data/generated/google/apis/adexchangebuyer_v1_3.rb +35 -0
  18. data/generated/google/apis/adexchangebuyer_v1_3/classes.rb +1124 -0
  19. data/generated/google/apis/adexchangebuyer_v1_3/representations.rb +375 -0
  20. data/generated/google/apis/adexchangebuyer_v1_3/service.rb +893 -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 +682 -0
  25. data/generated/google/apis/admin_directory_v1.rb +89 -0
  26. data/generated/google/apis/admin_directory_v1/classes.rb +2389 -0
  27. data/generated/google/apis/admin_directory_v1/representations.rb +780 -0
  28. data/generated/google/apis/admin_directory_v1/service.rb +2805 -0
  29. data/generated/google/apis/admin_reports_v1.rb +38 -0
  30. data/generated/google/apis/admin_reports_v1/classes.rb +582 -0
  31. data/generated/google/apis/admin_reports_v1/representations.rb +231 -0
  32. data/generated/google/apis/admin_reports_v1/service.rb +341 -0
  33. data/generated/google/apis/adsense_v1_4.rb +38 -0
  34. data/generated/google/apis/adsense_v1_4/classes.rb +1279 -0
  35. data/generated/google/apis/adsense_v1_4/representations.rb +493 -0
  36. data/generated/google/apis/adsense_v1_4/service.rb +1752 -0
  37. data/generated/google/apis/adsensehost_v4_1.rb +35 -0
  38. data/generated/google/apis/adsensehost_v4_1/classes.rb +834 -0
  39. data/generated/google/apis/adsensehost_v4_1/representations.rb +327 -0
  40. data/generated/google/apis/adsensehost_v4_1/service.rb +1190 -0
  41. data/generated/google/apis/analytics_v3.rb +49 -0
  42. data/generated/google/apis/analytics_v3/classes.rb +5113 -0
  43. data/generated/google/apis/analytics_v3/representations.rb +1661 -0
  44. data/generated/google/apis/analytics_v3/service.rb +3600 -0
  45. data/generated/google/apis/androidenterprise_v1.rb +34 -0
  46. data/generated/google/apis/androidenterprise_v1/classes.rb +1162 -0
  47. data/generated/google/apis/androidenterprise_v1/representations.rb +431 -0
  48. data/generated/google/apis/androidenterprise_v1/service.rb +1979 -0
  49. data/generated/google/apis/androidpublisher_v2.rb +34 -0
  50. data/generated/google/apis/androidpublisher_v2/classes.rb +1374 -0
  51. data/generated/google/apis/androidpublisher_v2/representations.rb +630 -0
  52. data/generated/google/apis/androidpublisher_v2/service.rb +2390 -0
  53. data/generated/google/apis/appsactivity_v1.rb +46 -0
  54. data/generated/google/apis/appsactivity_v1/classes.rb +392 -0
  55. data/generated/google/apis/appsactivity_v1/representations.rb +184 -0
  56. data/generated/google/apis/appsactivity_v1/service.rb +129 -0
  57. data/generated/google/apis/appstate_v1.rb +34 -0
  58. data/generated/google/apis/appstate_v1/classes.rb +154 -0
  59. data/generated/google/apis/appstate_v1/representations.rb +79 -0
  60. data/generated/google/apis/appstate_v1/service.rb +265 -0
  61. data/generated/google/apis/autoscaler_v1beta2.rb +38 -0
  62. data/generated/google/apis/autoscaler_v1beta2/classes.rb +747 -0
  63. data/generated/google/apis/autoscaler_v1beta2/representations.rb +281 -0
  64. data/generated/google/apis/autoscaler_v1beta2/service.rb +488 -0
  65. data/generated/google/apis/bigquery_v2.rb +49 -0
  66. data/generated/google/apis/bigquery_v2/classes.rb +2255 -0
  67. data/generated/google/apis/bigquery_v2/representations.rb +754 -0
  68. data/generated/google/apis/bigquery_v2/service.rb +1003 -0
  69. data/generated/google/apis/blogger_v3.rb +37 -0
  70. data/generated/google/apis/blogger_v3/classes.rb +1354 -0
  71. data/generated/google/apis/blogger_v3/representations.rb +562 -0
  72. data/generated/google/apis/blogger_v3/service.rb +1620 -0
  73. data/generated/google/apis/books_v1.rb +34 -0
  74. data/generated/google/apis/books_v1/classes.rb +3515 -0
  75. data/generated/google/apis/books_v1/representations.rb +1361 -0
  76. data/generated/google/apis/books_v1/service.rb +2170 -0
  77. data/generated/google/apis/calendar_v3.rb +37 -0
  78. data/generated/google/apis/calendar_v3/classes.rb +1702 -0
  79. data/generated/google/apis/calendar_v3/representations.rb +566 -0
  80. data/generated/google/apis/calendar_v3/service.rb +1943 -0
  81. data/generated/google/apis/civicinfo_v2.rb +31 -0
  82. data/generated/google/apis/civicinfo_v2/classes.rb +1057 -0
  83. data/generated/google/apis/civicinfo_v2/representations.rb +374 -0
  84. data/generated/google/apis/civicinfo_v2/service.rb +284 -0
  85. data/generated/google/apis/cloudmonitoring_v2beta2.rb +34 -0
  86. data/generated/google/apis/cloudmonitoring_v2beta2/classes.rb +679 -0
  87. data/generated/google/apis/cloudmonitoring_v2beta2/representations.rb +311 -0
  88. data/generated/google/apis/cloudmonitoring_v2beta2/service.rb +458 -0
  89. data/generated/google/apis/cloudresourcemanager_v1beta1.rb +38 -0
  90. data/generated/google/apis/cloudresourcemanager_v1beta1/classes.rb +139 -0
  91. data/generated/google/apis/cloudresourcemanager_v1beta1/representations.rb +65 -0
  92. data/generated/google/apis/cloudresourcemanager_v1beta1/service.rb +301 -0
  93. data/generated/google/apis/compute_v1.rb +49 -0
  94. data/generated/google/apis/compute_v1/classes.rb +6391 -0
  95. data/generated/google/apis/compute_v1/representations.rb +2209 -0
  96. data/generated/google/apis/compute_v1/service.rb +6352 -0
  97. data/generated/google/apis/container_v1beta1.rb +35 -0
  98. data/generated/google/apis/container_v1beta1/classes.rb +466 -0
  99. data/generated/google/apis/container_v1beta1/representations.rb +177 -0
  100. data/generated/google/apis/container_v1beta1/service.rb +394 -0
  101. data/generated/google/apis/content_v2.rb +35 -0
  102. data/generated/google/apis/content_v2/classes.rb +3780 -0
  103. data/generated/google/apis/content_v2/representations.rb +1456 -0
  104. data/generated/google/apis/content_v2/service.rb +1706 -0
  105. data/generated/google/apis/coordinate_v1.rb +37 -0
  106. data/generated/google/apis/coordinate_v1/classes.rb +669 -0
  107. data/generated/google/apis/coordinate_v1/representations.rb +285 -0
  108. data/generated/google/apis/coordinate_v1/service.rb +687 -0
  109. data/{lib/google/api_client/auth/compute_service_account.rb → generated/google/apis/customsearch_v1.rb} +13 -10
  110. data/generated/google/apis/customsearch_v1/classes.rb +771 -0
  111. data/generated/google/apis/customsearch_v1/representations.rb +276 -0
  112. data/generated/google/apis/customsearch_v1/service.rb +208 -0
  113. data/generated/google/apis/datastore_v1beta2.rb +40 -0
  114. data/generated/google/apis/datastore_v1beta2/classes.rb +1186 -0
  115. data/generated/google/apis/datastore_v1beta2/representations.rb +526 -0
  116. data/generated/google/apis/datastore_v1beta2/service.rb +300 -0
  117. data/generated/google/apis/deploymentmanager_v2beta2.rb +41 -0
  118. data/generated/google/apis/deploymentmanager_v2beta2/classes.rb +820 -0
  119. data/generated/google/apis/deploymentmanager_v2beta2/representations.rb +303 -0
  120. data/generated/google/apis/deploymentmanager_v2beta2/service.rb +647 -0
  121. data/generated/google/apis/dfareporting_v2_1.rb +37 -0
  122. data/generated/google/apis/dfareporting_v2_1/classes.rb +10755 -0
  123. data/generated/google/apis/dfareporting_v2_1/representations.rb +3438 -0
  124. data/generated/google/apis/dfareporting_v2_1/service.rb +8775 -0
  125. data/generated/google/apis/discovery_v1.rb +32 -0
  126. data/generated/google/apis/discovery_v1/classes.rb +947 -0
  127. data/generated/google/apis/discovery_v1/representations.rb +355 -0
  128. data/generated/google/apis/discovery_v1/service.rb +144 -0
  129. data/generated/google/apis/dns_v1.rb +41 -0
  130. data/generated/google/apis/dns_v1/classes.rb +406 -0
  131. data/generated/google/apis/dns_v1/representations.rb +151 -0
  132. data/generated/google/apis/dns_v1/service.rb +460 -0
  133. data/{spec/google/api_client/request_spec.rb → generated/google/apis/doubleclickbidmanager_v1.rb} +15 -13
  134. data/generated/google/apis/doubleclickbidmanager_v1/classes.rb +709 -0
  135. data/generated/google/apis/doubleclickbidmanager_v1/representations.rb +297 -0
  136. data/generated/google/apis/doubleclickbidmanager_v1/service.rb +349 -0
  137. data/generated/google/apis/doubleclicksearch_v2.rb +35 -0
  138. data/generated/google/apis/doubleclicksearch_v2/classes.rb +947 -0
  139. data/generated/google/apis/doubleclicksearch_v2/representations.rb +315 -0
  140. data/generated/google/apis/doubleclicksearch_v2/service.rb +490 -0
  141. data/generated/google/apis/drive_v2.rb +55 -0
  142. data/generated/google/apis/drive_v2/classes.rb +2519 -0
  143. data/generated/google/apis/drive_v2/representations.rb +781 -0
  144. data/generated/google/apis/drive_v2/service.rb +2685 -0
  145. data/generated/google/apis/fitness_v1.rb +49 -0
  146. data/generated/google/apis/fitness_v1/classes.rb +809 -0
  147. data/generated/google/apis/fitness_v1/representations.rb +295 -0
  148. data/generated/google/apis/fitness_v1/service.rb +684 -0
  149. data/generated/google/apis/fusiontables_v2.rb +37 -0
  150. data/generated/google/apis/fusiontables_v2/classes.rb +1048 -0
  151. data/generated/google/apis/fusiontables_v2/representations.rb +409 -0
  152. data/generated/google/apis/fusiontables_v2/service.rb +1496 -0
  153. data/generated/google/apis/games_configuration_v1configuration.rb +34 -0
  154. data/generated/google/apis/games_configuration_v1configuration/classes.rb +506 -0
  155. data/generated/google/apis/games_configuration_v1configuration/representations.rb +206 -0
  156. data/generated/google/apis/games_configuration_v1configuration/service.rb +578 -0
  157. data/generated/google/apis/games_v1.rb +40 -0
  158. data/generated/google/apis/games_v1/classes.rb +4578 -0
  159. data/generated/google/apis/games_v1/representations.rb +1570 -0
  160. data/generated/google/apis/games_v1/service.rb +2306 -0
  161. data/generated/google/apis/gan_v1beta1.rb +31 -0
  162. data/generated/google/apis/gan_v1beta1/classes.rb +1428 -0
  163. data/generated/google/apis/gan_v1beta1/representations.rb +428 -0
  164. data/generated/google/apis/gan_v1beta1/service.rb +692 -0
  165. data/generated/google/apis/genomics_v1beta2.rb +46 -0
  166. data/generated/google/apis/genomics_v1beta2/classes.rb +3288 -0
  167. data/generated/google/apis/genomics_v1beta2/representations.rb +1194 -0
  168. data/generated/google/apis/genomics_v1beta2/service.rb +2356 -0
  169. data/generated/google/apis/gmail_v1.rb +49 -0
  170. data/generated/google/apis/gmail_v1/classes.rb +794 -0
  171. data/generated/google/apis/gmail_v1/representations.rb +339 -0
  172. data/generated/google/apis/gmail_v1/service.rb +1502 -0
  173. data/generated/google/apis/groupsmigration_v1.rb +34 -0
  174. data/generated/google/apis/groupsmigration_v1/classes.rb +51 -0
  175. data/generated/google/apis/groupsmigration_v1/representations.rb +38 -0
  176. data/generated/google/apis/groupsmigration_v1/service.rb +111 -0
  177. data/generated/google/apis/groupssettings_v1.rb +34 -0
  178. data/generated/google/apis/groupssettings_v1/classes.rb +221 -0
  179. data/generated/google/apis/groupssettings_v1/representations.rb +64 -0
  180. data/generated/google/apis/groupssettings_v1/service.rb +179 -0
  181. data/generated/google/apis/identitytoolkit_v3.rb +31 -0
  182. data/generated/google/apis/identitytoolkit_v3/classes.rb +1229 -0
  183. data/generated/google/apis/identitytoolkit_v3/representations.rb +422 -0
  184. data/generated/google/apis/identitytoolkit_v3/service.rb +491 -0
  185. data/generated/google/apis/licensing_v1.rb +34 -0
  186. data/generated/google/apis/licensing_v1/classes.rb +132 -0
  187. data/generated/google/apis/licensing_v1/representations.rb +68 -0
  188. data/generated/google/apis/licensing_v1/service.rb +376 -0
  189. data/generated/google/apis/logging_v1beta3.rb +35 -0
  190. data/generated/google/apis/logging_v1beta3/classes.rb +505 -0
  191. data/generated/google/apis/logging_v1beta3/representations.rb +222 -0
  192. data/generated/google/apis/logging_v1beta3/service.rb +670 -0
  193. data/generated/google/apis/manager_v1beta2.rb +50 -0
  194. data/generated/google/apis/manager_v1beta2/classes.rb +1287 -0
  195. data/generated/google/apis/manager_v1beta2/representations.rb +536 -0
  196. data/generated/google/apis/manager_v1beta2/service.rb +380 -0
  197. data/generated/google/apis/mapsengine_v1.rb +38 -0
  198. data/generated/google/apis/mapsengine_v1/classes.rb +2873 -0
  199. data/generated/google/apis/mapsengine_v1/representations.rb +1235 -0
  200. data/generated/google/apis/mapsengine_v1/service.rb +3465 -0
  201. data/generated/google/apis/mirror_v1.rb +37 -0
  202. data/generated/google/apis/mirror_v1/classes.rb +1072 -0
  203. data/generated/google/apis/mirror_v1/representations.rb +350 -0
  204. data/generated/google/apis/mirror_v1/service.rb +1001 -0
  205. data/generated/google/apis/oauth2_v2.rb +43 -0
  206. data/generated/google/apis/oauth2_v2/classes.rb +245 -0
  207. data/generated/google/apis/oauth2_v2/representations.rb +94 -0
  208. data/generated/google/apis/oauth2_v2/service.rb +203 -0
  209. data/generated/google/apis/pagespeedonline_v2.rb +32 -0
  210. data/generated/google/apis/pagespeedonline_v2/classes.rb +614 -0
  211. data/generated/google/apis/pagespeedonline_v2/representations.rb +244 -0
  212. data/generated/google/apis/pagespeedonline_v2/service.rb +120 -0
  213. data/generated/google/apis/plus_domains_v1.rb +61 -0
  214. data/generated/google/apis/plus_domains_v1/classes.rb +2402 -0
  215. data/generated/google/apis/plus_domains_v1/representations.rb +873 -0
  216. data/generated/google/apis/plus_domains_v1/service.rb +924 -0
  217. data/generated/google/apis/plus_v1.rb +43 -0
  218. data/generated/google/apis/plus_v1/classes.rb +2384 -0
  219. data/generated/google/apis/plus_v1/representations.rb +812 -0
  220. data/generated/google/apis/plus_v1/service.rb +616 -0
  221. data/generated/google/apis/prediction_v1_6.rb +44 -0
  222. data/generated/google/apis/prediction_v1_6/classes.rb +751 -0
  223. data/generated/google/apis/prediction_v1_6/representations.rb +327 -0
  224. data/generated/google/apis/prediction_v1_6/service.rb +388 -0
  225. data/generated/google/apis/pubsub_v1beta2.rb +37 -0
  226. data/generated/google/apis/pubsub_v1beta2/classes.rb +824 -0
  227. data/generated/google/apis/pubsub_v1beta2/representations.rb +366 -0
  228. data/generated/google/apis/pubsub_v1beta2/service.rb +778 -0
  229. data/generated/google/apis/qpx_express_v1.rb +31 -0
  230. data/generated/google/apis/qpx_express_v1/classes.rb +1268 -0
  231. data/generated/google/apis/qpx_express_v1/representations.rb +424 -0
  232. data/generated/google/apis/qpx_express_v1/service.rb +101 -0
  233. data/generated/google/apis/replicapool_v1beta2.rb +41 -0
  234. data/generated/google/apis/replicapool_v1beta2/classes.rb +621 -0
  235. data/generated/google/apis/replicapool_v1beta2/representations.rb +235 -0
  236. data/generated/google/apis/replicapool_v1beta2/service.rb +620 -0
  237. data/generated/google/apis/replicapoolupdater_v1beta1.rb +41 -0
  238. data/generated/google/apis/replicapoolupdater_v1beta1/classes.rb +682 -0
  239. data/generated/google/apis/replicapoolupdater_v1beta1/representations.rb +247 -0
  240. data/generated/google/apis/replicapoolupdater_v1beta1/service.rb +472 -0
  241. data/generated/google/apis/reseller_v1.rb +37 -0
  242. data/generated/google/apis/reseller_v1/classes.rb +502 -0
  243. data/generated/google/apis/reseller_v1/representations.rb +199 -0
  244. data/generated/google/apis/reseller_v1/service.rb +637 -0
  245. data/generated/google/apis/resourceviews_v1beta2.rb +47 -0
  246. data/generated/google/apis/resourceviews_v1beta2/classes.rb +660 -0
  247. data/generated/google/apis/resourceviews_v1beta2/representations.rb +269 -0
  248. data/generated/google/apis/resourceviews_v1beta2/service.rb +574 -0
  249. data/generated/google/apis/site_verification_v1.rb +37 -0
  250. data/generated/google/apis/site_verification_v1/classes.rb +185 -0
  251. data/generated/google/apis/site_verification_v1/representations.rb +101 -0
  252. data/generated/google/apis/site_verification_v1/service.rb +322 -0
  253. data/generated/google/apis/sqladmin_v1beta4.rb +37 -0
  254. data/generated/google/apis/sqladmin_v1beta4/classes.rb +1817 -0
  255. data/generated/google/apis/sqladmin_v1beta4/representations.rb +688 -0
  256. data/generated/google/apis/sqladmin_v1beta4/service.rb +1534 -0
  257. data/generated/google/apis/storage_v1.rb +43 -0
  258. data/generated/google/apis/storage_v1/classes.rb +1177 -0
  259. data/generated/google/apis/storage_v1/representations.rb +427 -0
  260. data/generated/google/apis/storage_v1/service.rb +1920 -0
  261. data/generated/google/apis/tagmanager_v1.rb +52 -0
  262. data/generated/google/apis/tagmanager_v1/classes.rb +1226 -0
  263. data/generated/google/apis/tagmanager_v1/representations.rb +461 -0
  264. data/generated/google/apis/tagmanager_v1/service.rb +1978 -0
  265. data/generated/google/apis/taskqueue_v1beta2.rb +37 -0
  266. data/generated/google/apis/taskqueue_v1beta2/classes.rb +254 -0
  267. data/generated/google/apis/taskqueue_v1beta2/representations.rb +114 -0
  268. data/generated/google/apis/taskqueue_v1beta2/service.rb +416 -0
  269. data/generated/google/apis/tasks_v1.rb +37 -0
  270. data/generated/google/apis/tasks_v1/classes.rb +296 -0
  271. data/generated/google/apis/tasks_v1/representations.rb +115 -0
  272. data/generated/google/apis/tasks_v1/service.rb +657 -0
  273. data/generated/google/apis/translate_v2.rb +31 -0
  274. data/generated/google/apis/translate_v2/classes.rb +168 -0
  275. data/generated/google/apis/translate_v2/representations.rb +109 -0
  276. data/generated/google/apis/translate_v2/service.rb +185 -0
  277. data/generated/google/apis/urlshortener_v1.rb +34 -0
  278. data/generated/google/apis/urlshortener_v1/classes.rb +246 -0
  279. data/generated/google/apis/urlshortener_v1/representations.rb +111 -0
  280. data/generated/google/apis/urlshortener_v1/service.rb +179 -0
  281. data/generated/google/apis/webmasters_v3.rb +37 -0
  282. data/generated/google/apis/webmasters_v3/classes.rb +563 -0
  283. data/generated/google/apis/webmasters_v3/representations.rb +250 -0
  284. data/generated/google/apis/webmasters_v3/service.rb +587 -0
  285. data/generated/google/apis/youtube_analytics_v1.rb +46 -0
  286. data/generated/google/apis/youtube_analytics_v1/classes.rb +540 -0
  287. data/generated/google/apis/youtube_analytics_v1/representations.rb +242 -0
  288. data/generated/google/apis/youtube_analytics_v1/service.rb +567 -0
  289. data/generated/google/apis/youtube_v3.rb +49 -0
  290. data/generated/google/apis/youtube_v3/classes.rb +7225 -0
  291. data/generated/google/apis/youtube_v3/representations.rb +2529 -0
  292. data/generated/google/apis/youtube_v3/service.rb +4051 -0
  293. data/google-api-client.gemspec +27 -39
  294. data/lib/google/api_client/auth/storage.rb +3 -2
  295. data/lib/google/api_client/auth/storages/file_store.rb +1 -3
  296. data/lib/google/api_client/auth/storages/redis_store.rb +6 -2
  297. data/lib/google/apis.rb +48 -0
  298. data/lib/google/apis/core/api_command.rb +128 -0
  299. data/lib/google/apis/core/base_service.rb +314 -0
  300. data/lib/google/apis/core/batch.rb +222 -0
  301. data/lib/google/apis/core/download.rb +94 -0
  302. data/lib/google/apis/core/hashable.rb +44 -0
  303. data/lib/google/apis/core/http_command.rb +275 -0
  304. data/lib/google/apis/core/json_representation.rb +122 -0
  305. data/lib/google/{api_client/version.rb → apis/core/logging.rb} +12 -8
  306. data/lib/google/apis/core/multipart.rb +173 -0
  307. data/lib/google/apis/core/upload.rb +275 -0
  308. data/lib/google/{api_client → apis}/errors.rb +32 -28
  309. data/lib/google/apis/generator.rb +70 -0
  310. data/lib/google/apis/generator/annotator.rb +271 -0
  311. data/lib/google/apis/generator/helpers.rb +74 -0
  312. data/lib/google/apis/generator/model.rb +130 -0
  313. data/lib/google/apis/generator/template.rb +124 -0
  314. data/lib/google/apis/generator/templates/_class.tmpl +40 -0
  315. data/lib/google/apis/generator/templates/_method.tmpl +90 -0
  316. data/lib/google/apis/generator/templates/_representation.tmpl +51 -0
  317. data/lib/google/apis/generator/templates/_representation_stub.tmpl +15 -0
  318. data/lib/google/apis/generator/templates/_representation_type.tmpl +10 -0
  319. data/lib/google/{api_client/reference.rb → apis/generator/templates/classes.rb.tmpl} +11 -9
  320. data/lib/google/apis/generator/templates/module.rb.tmpl +40 -0
  321. data/lib/google/apis/generator/templates/representations.rb.tmpl +32 -0
  322. data/lib/google/apis/generator/templates/service.rb.tmpl +60 -0
  323. data/lib/google/apis/options.rb +79 -0
  324. data/lib/google/apis/version.rb +39 -0
  325. data/rakelib/metrics.rake +22 -0
  326. data/rakelib/rubocop.rake +10 -0
  327. data/rakelib/spec.rake +11 -0
  328. data/rakelib/yard.rake +11 -0
  329. data/samples/calendar/calendar.rb +43 -0
  330. data/samples/drive/drive.rb +40 -0
  331. data/samples/pubsub/pubsub.rb +52 -0
  332. data/{lib/google/api_client/discovery.rb → samples/translate/translate.rb} +14 -5
  333. data/script/generate +79 -0
  334. data/script/package +8 -0
  335. data/script/release +15 -0
  336. data/spec/fixtures/files/api_names.yaml +3 -0
  337. data/spec/fixtures/files/auth_stored_credentials.json +8 -0
  338. data/spec/fixtures/files/client_secrets.json +1 -0
  339. data/spec/fixtures/files/test.blah +1 -0
  340. data/spec/fixtures/files/test.txt +1 -0
  341. data/spec/fixtures/files/test_api.json +440 -0
  342. data/spec/google/api_client/auth/storage_spec.rb +1 -3
  343. data/spec/google/api_client/auth/storages/file_store_spec.rb +1 -2
  344. data/spec/google/api_client/auth/storages/redis_store_spec.rb +1 -3
  345. data/spec/google/apis/core/api_command_spec.rb +170 -0
  346. data/spec/google/apis/core/batch_spec.rb +128 -0
  347. data/spec/google/apis/core/download_spec.rb +90 -0
  348. data/spec/google/apis/core/hashable_spec.rb +60 -0
  349. data/spec/google/apis/core/http_command_spec.rb +238 -0
  350. data/spec/google/apis/core/json_representation_spec.rb +192 -0
  351. data/spec/google/apis/core/service_spec.rb +247 -0
  352. data/spec/google/apis/core/upload_spec.rb +238 -0
  353. data/{lib/google/api_client/service_account.rb → spec/google/apis/generated_spec.rb} +14 -8
  354. data/spec/google/apis/generator/generator_spec.rb +272 -0
  355. data/spec/google/apis/logging_spec.rb +45 -0
  356. data/spec/google/apis/options_spec.rb +40 -0
  357. data/spec/integration_tests/drive_spec.rb +35 -0
  358. data/spec/integration_tests/pubsub_spec.rb +48 -0
  359. data/spec/integration_tests/url_shortener_spec.rb +31 -0
  360. data/spec/spec_helper.rb +102 -46
  361. metadata +433 -178
  362. data/lib/compat/multi_json.rb +0 -19
  363. data/lib/google/api_client.rb +0 -750
  364. data/lib/google/api_client/auth/file_storage.rb +0 -59
  365. data/lib/google/api_client/auth/jwt_asserter.rb +0 -126
  366. data/lib/google/api_client/auth/key_utils.rb +0 -93
  367. data/lib/google/api_client/auth/pkcs12.rb +0 -41
  368. data/lib/google/api_client/batch.rb +0 -326
  369. data/lib/google/api_client/charset.rb +0 -33
  370. data/lib/google/api_client/discovery/api.rb +0 -310
  371. data/lib/google/api_client/discovery/media.rb +0 -77
  372. data/lib/google/api_client/discovery/method.rb +0 -363
  373. data/lib/google/api_client/discovery/resource.rb +0 -156
  374. data/lib/google/api_client/discovery/schema.rb +0 -117
  375. data/lib/google/api_client/environment.rb +0 -42
  376. data/lib/google/api_client/gzip.rb +0 -28
  377. data/lib/google/api_client/logging.rb +0 -32
  378. data/lib/google/api_client/media.rb +0 -259
  379. data/lib/google/api_client/railtie.rb +0 -18
  380. data/lib/google/api_client/request.rb +0 -350
  381. data/lib/google/api_client/result.rb +0 -255
  382. data/lib/google/api_client/service.rb +0 -233
  383. data/lib/google/api_client/service/batch.rb +0 -110
  384. data/lib/google/api_client/service/request.rb +0 -144
  385. data/lib/google/api_client/service/resource.rb +0 -40
  386. data/lib/google/api_client/service/result.rb +0 -162
  387. data/lib/google/api_client/service/simple_file_store.rb +0 -151
  388. data/lib/google/api_client/service/stub_generator.rb +0 -61
  389. data/spec/google/api_client/batch_spec.rb +0 -248
  390. data/spec/google/api_client/discovery_spec.rb +0 -708
  391. data/spec/google/api_client/gzip_spec.rb +0 -98
  392. data/spec/google/api_client/media_spec.rb +0 -178
  393. data/spec/google/api_client/result_spec.rb +0 -207
  394. data/spec/google/api_client/service_account_spec.rb +0 -169
  395. data/spec/google/api_client/service_spec.rb +0 -618
  396. data/spec/google/api_client/simple_file_store_spec.rb +0 -133
  397. data/spec/google/api_client_spec.rb +0 -352
@@ -1,43 +1,31 @@
1
- # -*- encoding: utf-8 -*-
2
- require File.join(File.dirname(__FILE__), 'lib/google/api_client', 'version')
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'google/apis/version'
3
5
 
4
- Gem::Specification.new do |s|
5
- s.name = "google-api-client"
6
- s.version = Google::APIClient::VERSION::STRING
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'google-api-client'
8
+ spec.version = Google::Apis::VERSION
9
+ spec.authors = ['Steven Bazyl', 'Tim Emiola', 'Sergio Gomes', 'Bob Aman']
10
+ spec.email = ['sbazyl@google.com']
11
+ spec.summary = %q{Client for accessing Google APIs}
12
+ spec.homepage = 'https://github.com/google/google-api-ruby-client'
13
+ spec.license = 'Apache 2.0'
7
14
 
8
- s.required_rubygems_version = ">= 1.3.5"
9
- s.require_paths = ["lib"]
10
- s.authors = ["Bob Aman", "Steven Bazyl"]
11
- s.license = "Apache-2.0"
12
- s.description = "The Google API Ruby Client makes it trivial to discover and access supported APIs."
13
- s.email = "sbazyl@google.com"
14
- s.extra_rdoc_files = ["README.md"]
15
- s.files = %w(google-api-client.gemspec Rakefile LICENSE CHANGELOG.md README.md Gemfile)
16
- s.files += Dir.glob("lib/**/*.rb")
17
- s.files += Dir.glob("lib/cacerts.pem")
18
- s.files += Dir.glob("spec/**/*.{rb,opts}")
19
- s.files += Dir.glob("vendor/**/*.rb")
20
- s.files += Dir.glob("tasks/**/*")
21
- s.files += Dir.glob("website/**/*")
22
- s.homepage = "https://github.com/google/google-api-ruby-client/"
23
- s.rdoc_options = ["--main", "README.md"]
24
- s.summary = "The Google API Ruby Client makes it trivial to discover and access Google's REST APIs."
15
+ spec.files = `git ls-files -z`.split("\x0")
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ['lib', 'generated']
25
19
 
26
- s.add_runtime_dependency 'addressable', '~> 2.3'
27
- s.add_runtime_dependency 'signet', '~> 0.6'
28
- s.add_runtime_dependency 'faraday', '~> 0.9'
29
- s.add_runtime_dependency 'googleauth', '~> 0.3'
30
- s.add_runtime_dependency 'multi_json', '~> 1.10'
31
- s.add_runtime_dependency 'autoparse', '~> 0.3'
32
- s.add_runtime_dependency 'extlib', '~> 0.9'
33
- s.add_runtime_dependency 'launchy', '~> 2.4'
34
- s.add_runtime_dependency 'retriable', '~> 1.4'
35
- s.add_runtime_dependency 'activesupport', '>= 3.2', '< 5.0'
36
-
37
- s.add_development_dependency 'rake', '~> 10.0'
38
- s.add_development_dependency 'yard', '~> 0.8'
39
- s.add_development_dependency 'rspec', '~> 3.1'
40
- s.add_development_dependency 'kramdown', '~> 1.5'
41
- s.add_development_dependency 'simplecov', '~> 0.9.2'
42
- s.add_development_dependency 'coveralls', '~> 0.7.11'
20
+ spec.add_runtime_dependency 'representable', '~> 2.1'
21
+ spec.add_runtime_dependency 'multi_json', '~> 1.11'
22
+ spec.add_runtime_dependency 'retriable', '~> 2.0'
23
+ spec.add_runtime_dependency 'activesupport', '>= 3.2'
24
+ spec.add_runtime_dependency 'addressable', '~> 2.3'
25
+ spec.add_runtime_dependency 'mime-types', '>= 1.6'
26
+ spec.add_runtime_dependency 'hurley', '~> 0.1'
27
+ spec.add_runtime_dependency 'googleauth', '~> 0.2'
28
+ spec.add_runtime_dependency 'thor', '~> 0.19'
29
+ spec.add_runtime_dependency 'memoist', '~> 0.11'
30
+ spec.add_runtime_dependency 'virtus', '~> 1.0'
43
31
  end
@@ -35,7 +35,8 @@ module Google
35
35
  ##
36
36
  # Initializes the Storage object.
37
37
  #
38
- # @params [Object] Storage object
38
+ # @param [Object] store
39
+ # Storage object
39
40
  def initialize(store)
40
41
  @store= store
41
42
  @authorization = nil
@@ -44,7 +45,7 @@ module Google
44
45
  ##
45
46
  # Write the credentials to the specified store.
46
47
  #
47
- # @params [Signet::OAuth2::Client] authorization
48
+ # @param [Signet::OAuth2::Client] authorization
48
49
  # Optional authorization instance. If not provided, the authorization
49
50
  # already associated with this instance will be written.
50
51
  def write_credentials(authorization=nil)
@@ -45,9 +45,7 @@ module Google
45
45
  ##
46
46
  # Write the credentials to the specified file.
47
47
  #
48
- # @param [Signet::OAuth2::Client] authorization
49
- # Optional authorization instance. If not provided, the authorization
50
- # already associated with this instance will be written.
48
+ # @param [Hash] credentials_hash
51
49
  def write_credentials(credentials_hash)
52
50
  open(self.path, 'w+') do |f|
53
51
  f.write(credentials_hash.to_json)
@@ -25,7 +25,10 @@ module Google
25
25
  ##
26
26
  # Initializes the RedisStore object.
27
27
  #
28
- # @params [Object] Redis instance
28
+ # @param [Object] redis
29
+ # Redis instance
30
+ # @param [Object] key
31
+ # Optional key to store credentials under. Defaults to 'google_api_credentials'
29
32
  def initialize(redis, key = nil)
30
33
  @redis= redis
31
34
  @redis_credentials_key = key
@@ -33,6 +36,7 @@ module Google
33
36
 
34
37
  ##
35
38
  # Attempt to read in credentials from redis.
39
+ # @return [Hash]
36
40
  def load_credentials
37
41
  credentials = redis.get redis_credentials_key
38
42
  JSON.parse(credentials) if credentials
@@ -45,7 +49,7 @@ module Google
45
49
  ##
46
50
  # Write the credentials to redis.
47
51
  #
48
- # @params [Hash] credentials
52
+ # @param [Hash] credentials_hash
49
53
  def write_credentials(credentials_hash)
50
54
  redis.set(redis_credentials_key, credentials_hash.to_json)
51
55
  end
@@ -0,0 +1,48 @@
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/version'
16
+ require 'logger'
17
+
18
+ module Google
19
+ module Apis
20
+ ROOT = File.expand_path('..', File.dirname(__dir__))
21
+
22
+ # @!attribute [rw] logger
23
+ # @return [Logger] The logger.
24
+ def self.logger
25
+ @logger ||= rails_logger || default_logger
26
+ end
27
+
28
+ class << self
29
+ attr_writer :logger
30
+ end
31
+
32
+ private
33
+
34
+ # Create and configure a logger
35
+ # @return [Logger]
36
+ def self.default_logger
37
+ logger = Logger.new($stdout)
38
+ logger.level = Logger::WARN
39
+ logger
40
+ end
41
+
42
+ # Check to see if client is being used in a Rails environment and ge the logger if present
43
+ # @return [Logger]
44
+ def self.rails_logger
45
+ ::Rails.logger if defined?(::Rails) && ::Rails.respond_to?(:logger) && ::Rails.logger
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,128 @@
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 'active_support/inflector'
16
+ require 'addressable/uri'
17
+ require 'addressable/template'
18
+ require 'google/apis/core/http_command'
19
+ require 'google/apis/errors'
20
+ require 'multi_json'
21
+ require 'retriable'
22
+
23
+ module Google
24
+ module Apis
25
+ module Core
26
+ # Command for executing most basic API request with JSON requests/responses
27
+ class ApiCommand < HttpCommand
28
+ JSON_CONTENT_TYPE = 'application/json'
29
+ FIELDS_PARAM = 'fields'
30
+ RATE_LIMIT_ERRORS = %w(rateLimitExceeded userRateLimitExceeded)
31
+
32
+ # JSON serializer for request objects
33
+ # @return [Google::Apis::Core::JsonRepresentation]
34
+ attr_accessor :request_representation
35
+
36
+ # Request body to serialize
37
+ # @return [Object]
38
+ attr_accessor :request_object
39
+
40
+ # JSON serializer for response objects
41
+ # @return [Google::Apis::Core::JsonRepresentation]
42
+ attr_accessor :response_representation
43
+
44
+ # Class to instantiate when de-serializing responses
45
+ # @return [Object]
46
+ attr_accessor :response_class
47
+
48
+ # Serialize the request body
49
+ #
50
+ # @return [void]
51
+ def prepare!
52
+ query[FIELDS_PARAM] = normalize_fields_param(query[FIELDS_PARAM]) if query.key?(FIELDS_PARAM)
53
+ if request_representation && request_object
54
+ header[:content_type] ||= JSON_CONTENT_TYPE
55
+ self.body = request_representation.new(request_object).to_json(skip_undefined: true)
56
+ end
57
+ super
58
+ end
59
+
60
+ # Deserialize the response body if present
61
+ #
62
+ # @param [String] content_type
63
+ # Content type of body
64
+ # @param [String, #read] body
65
+ # Response body
66
+ # @return [Object]
67
+ # Response object
68
+ # noinspection RubyUnusedLocalVariable
69
+ def decode_response_body(content_type, body)
70
+ return super unless response_representation
71
+ return super if content_type.nil?
72
+ return nil unless content_type.start_with?(JSON_CONTENT_TYPE)
73
+ instance = response_class.new
74
+ response_representation.new(instance).from_json(body, unwrap: response_class)
75
+ instance
76
+ end
77
+
78
+ # Check the response and raise error if needed
79
+ #
80
+ # @param [Fixnum] status
81
+ # HTTP status code of response
82
+ # @param [String] body
83
+ # HTTP response body
84
+ # @return [void]
85
+ # @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
86
+ # @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
87
+ # @raise [Google::Apis::AuthorizationError] Authorization is required
88
+ def check_status(status, body = nil)
89
+ case status
90
+ when 400, 402...500
91
+ error = parse_error(body)
92
+ if error
93
+ logger.debug { error }
94
+ fail Google::Apis::RateLimitError, error if RATE_LIMIT_ERRORS.include?(error['reason'])
95
+ end
96
+ super(status, error)
97
+ else
98
+ super(status, body)
99
+ end
100
+ end
101
+
102
+ private
103
+
104
+ # Attempt to parse a JSON error message, returning the first found error
105
+ # @param [String] body
106
+ # HTTP response body
107
+ # @return [Hash]
108
+ def parse_error(body)
109
+ hash = MultiJson.load(body)
110
+ hash['error']['errors'].first
111
+ rescue
112
+ nil
113
+ end
114
+
115
+ # Convert field names from ruby conventions to original names in JSON
116
+ #
117
+ # @param [String] fields
118
+ # Value of 'fields' param
119
+ # @return [String]
120
+ # Updated header value
121
+ def normalize_fields_param(fields)
122
+ # TODO: Generate map of parameter names during code gen. Small possibility that camelization fails
123
+ fields.gsub(/:/, '').gsub(/[\w_]+/) { |str| ActiveSupport::Inflector.camelize(str, false) }
124
+ end
125
+ end
126
+ end
127
+ end
128
+ end
@@ -0,0 +1,314 @@
1
+ # Copyright 2015 Google Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require 'addressable/uri'
16
+ require 'addressable/template'
17
+ require 'google/apis/version'
18
+ require 'google/apis/core/api_command'
19
+ require 'google/apis/core/batch'
20
+ require 'google/apis/core/upload'
21
+ require 'google/apis/core/download'
22
+ require 'google/apis/options'
23
+ require 'googleauth'
24
+ require 'hurley'
25
+ require 'hurley/addressable'
26
+
27
+ module Google
28
+ module Apis
29
+ module Core
30
+ # Base service for all APIs. Not to be used directly.
31
+ #
32
+ class BaseService
33
+ # Root URL (host/port) for the API
34
+ # @return [Addressable::URI]
35
+ attr_accessor :root_url
36
+
37
+ # Additional path prefix for all API methods
38
+ # @return [Addressable::URI]
39
+ attr_accessor :base_path
40
+
41
+ # Alternate path prefix for media uploads
42
+ # @return [Addressable::URI]
43
+ attr_accessor :upload_path
44
+
45
+ # Alternate path prefix for all batch methods
46
+ # @return [Addressable::URI]
47
+ attr_accessor :batch_path
48
+
49
+ # HTTP client
50
+ # @return [Hurley::Client]
51
+ attr_accessor :client
52
+
53
+ # General settings
54
+ # @return [Google::Apis::ClientOptions]
55
+ attr_accessor :client_options
56
+
57
+ # Default options for all requests
58
+ # @return [Google::Apis::RequestOptions]
59
+ attr_accessor :request_options
60
+
61
+ # @param [String,Addressable::URI] root_url
62
+ # Root URL for the API
63
+ # @param [String,Addressable::URI] base_path
64
+ # Additional path prefix for all API methods
65
+ # @api private
66
+ def initialize(root_url, base_path)
67
+ self.root_url = root_url
68
+ self.base_path = base_path
69
+ self.upload_path = "upload/#{base_path}"
70
+ self.batch_path = 'batch'
71
+ self.client_options = Google::Apis::ClientOptions.default.dup
72
+ self.request_options = Google::Apis::RequestOptions.default.dup
73
+ end
74
+
75
+ # @!attribute [rw] authorization
76
+ # @return [Signet::OAuth2::Client]
77
+ # OAuth2 credentials
78
+ def authorization=(authorization)
79
+ request_options.authorization = authorization
80
+ end
81
+
82
+ def authorization
83
+ request_options.authorization
84
+ end
85
+
86
+ # TODO: with(options) method
87
+
88
+ # Perform a batch request. Calls made within the block are sent in a single network
89
+ # request to the server.
90
+ #
91
+ # @example
92
+ # service.batch do |service|
93
+ # service.get_item(id1) do |res, err|
94
+ # # process response for 1st call
95
+ # end
96
+ # # ...
97
+ # service.get_item(idN) do |res, err|
98
+ # # process response for Nth call
99
+ # end
100
+ # end
101
+ #
102
+ # @param [Hash, Google::Apis::RequestOptions] options
103
+ # Request-specific options
104
+ # @yield [self]
105
+ # @return [void]
106
+ def batch(options = nil)
107
+ batch_command = BatchCommand.new(:post, Addressable::URI.parse(root_url + batch_path))
108
+ batch_command.options = request_options.merge(options)
109
+ apply_command_defaults(batch_command)
110
+ begin
111
+ Thread.current[:google_api_batch] = batch_command
112
+ yield self
113
+ ensure
114
+ Thread.current[:google_api_batch] = nil
115
+ end
116
+ batch_command.execute(client)
117
+ end
118
+
119
+ # Perform a batch upload request. Calls made within the block are sent in a single network
120
+ # request to the server. Batch uploads are useful for uploading multiple small files. For larger
121
+ # files, use single requests which use a resumable upload protocol.
122
+ #
123
+ # @example
124
+ # service.batch do |service|
125
+ # service.insert_item(upload_source: 'file1.txt') do |res, err|
126
+ # # process response for 1st call
127
+ # end
128
+ # # ...
129
+ # service.insert_item(upload_source: 'fileN.txt') do |res, err|
130
+ # # process response for Nth call
131
+ # end
132
+ # end
133
+ #
134
+ # @param [Hash, Google::Apis::RequestOptions] options
135
+ # Request-specific options
136
+ # @yield [self]
137
+ # @return [void]
138
+ def batch_upload(options = nil)
139
+ batch_command = BatchUploadCommand.new(:put, Addressable::URI.parse(root_url + upload_path))
140
+ batch_command.options = request_options.merge(options)
141
+ apply_command_defaults(batch_command)
142
+ begin
143
+ Thread.current[:google_api_batch] = batch_command
144
+ yield self
145
+ ensure
146
+ Thread.current[:google_api_batch] = nil
147
+ end
148
+ batch_command.execute(client)
149
+ end
150
+
151
+ # Get the current HTTP client
152
+ # @return [Hurley::Client]
153
+ def client
154
+ @client ||= new_client
155
+ end
156
+
157
+
158
+ # Simple escape hatch for making API requests directly to a given
159
+ # URL. This is not intended to be used as a generic HTTP client
160
+ # and should be used only in cases where no service method exists
161
+ # (e.g. fetching an export link for a Google Drive file.)
162
+ #
163
+ # @param [Symbol] method
164
+ # HTTP method as symbol (e.g. :get, :post, :put, ...)
165
+ # @param [String] url
166
+ # URL to call
167
+ # @param [Hash<String,String>] params
168
+ # Optional hash of query parameters
169
+ # @param [#read] body
170
+ # Optional body for POST/PUT
171
+ # @param [IO, String] download_dest
172
+ # IO stream or filename to receive content download
173
+ # @param [Google::Apis::RequestOptions] options
174
+ # Request-specific options
175
+ #
176
+ # @yield [result, err] Result & error if block supplied
177
+ # @yieldparam result [String] HTTP response body
178
+ # @yieldparam err [StandardError] error object if request failed
179
+ #
180
+ # @return [String] HTTP response body
181
+ def http(method, url, params: nil, body: nil, download_dest: nil, options: nil, &block)
182
+ if download_dest
183
+ command = DownloadCommand.new(method, url, body: body)
184
+ else
185
+ command = HttpCommand.new(method, url, body: body)
186
+ end
187
+ command.options = request_options.merge(options)
188
+ apply_command_defaults(command)
189
+ command.query.merge(Hash(params))
190
+ execute_or_queue_command(command, &block)
191
+ end
192
+
193
+ protected
194
+
195
+ # Create a new upload command.
196
+ #
197
+ # @param [symbol] method
198
+ # HTTP method for uploading (typically :put or :post)
199
+ # @param [String] path
200
+ # Additional path to upload endpoint, appended to API base path
201
+ # @param [Hash, Google::Apis::RequestOptions] options
202
+ # Request-specific options
203
+ # @return [Google::Apis::Core::UploadCommand]
204
+ def make_upload_command(method, path, options)
205
+ template = Addressable::Template.new(root_url + upload_path + path)
206
+ if batch?
207
+ command = MultipartUploadCommand.new(method, template)
208
+ else
209
+ command = ResumableUploadCommand.new(method, template)
210
+ end
211
+ command.options = request_options.merge(options)
212
+ apply_command_defaults(command)
213
+ command
214
+ end
215
+
216
+ # Create a new download command.
217
+ #
218
+ # @param [symbol] method
219
+ # HTTP method for uploading (typically :get)
220
+ # @param [String] path
221
+ # Additional path to download endpoint, appended to API base path
222
+ # @param [Hash, Google::Apis::RequestOptions] options
223
+ # Request-specific options
224
+ # @return [Google::Apis::Core::DownloadCommand]
225
+ def make_download_command(method, path, options)
226
+ template = Addressable::Template.new(root_url + base_path + path)
227
+ command = DownloadCommand.new(method, template)
228
+ command.options = request_options.merge(options)
229
+ command.query['alt'] = 'media'
230
+ apply_command_defaults(command)
231
+ command
232
+ end
233
+
234
+ # Create a new command.
235
+ #
236
+ # @param [symbol] method
237
+ # HTTP method (:get, :post, :delete, etc...)
238
+ # @param [String] path
239
+ # Additional path, appended to API base path
240
+ # @param [Hash, Google::Apis::RequestOptions] options
241
+ # Request-specific options
242
+ # @return [Google::Apis::Core::DownloadCommand]
243
+ def make_simple_command(method, path, options)
244
+ template = Addressable::Template.new(root_url + base_path + path)
245
+ command = ApiCommand.new(method, template)
246
+ command.options = request_options.merge(options)
247
+ apply_command_defaults(command)
248
+ command
249
+ end
250
+
251
+ # Execute the request. If a batch is in progress, the request is added to the batch instead.
252
+ #
253
+ # @param [Google::Apis::Core::HttpCommand] command
254
+ # Command to execute
255
+ # @return [Object] response object if command executed and no callback supplied
256
+ # @yield [result, err] Result & error if block supplied
257
+ # @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
258
+ # @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
259
+ # @raise [Google::Apis::AuthorizationError] Authorization is required
260
+ def execute_or_queue_command(command, &callback)
261
+ batch_command = current_batch
262
+ if batch_command
263
+ batch_command.add(command, &callback)
264
+ nil
265
+ else
266
+ command.execute(client, &callback)
267
+ end
268
+ end
269
+
270
+ # Update commands with service-specific options. To be implemented by subclasses
271
+ # @param [Google::Apis::Core::HttpCommand] _command
272
+ def apply_command_defaults(_command)
273
+ end
274
+
275
+ private
276
+
277
+ # Get the current batch context
278
+ #
279
+ # @return [Google:Apis::Core::BatchRequest]
280
+ def current_batch
281
+ Thread.current[:google_api_batch]
282
+ end
283
+
284
+ # Check if a batch is in progress
285
+ # @return [Boolean]
286
+ def batch?
287
+ !current_batch.nil?
288
+ end
289
+
290
+ # Create a new HTTP client
291
+ # @return [Hurley::Client]
292
+ def new_client
293
+ client = Hurley::Client.new
294
+ client.request_options.timeout = request_options.timeout_sec
295
+ client.request_options.proxy = client_options.proxy_url
296
+ client.request_options.query_class = Hurley::Query::Flat
297
+ client.ssl_options.ca_file = File.join(Google::Apis::ROOT, 'lib', 'cacerts.pem')
298
+ client.header[:user_agent] = user_agent
299
+ client
300
+ end
301
+
302
+ # Build the user agent header
303
+ # @return [String]
304
+ def user_agent
305
+ sprintf('%s/%s google-api-ruby-client/%s %s (gzip)',
306
+ client_options.application_name,
307
+ client_options.application_version,
308
+ Google::Apis::VERSION,
309
+ Google::Apis::OS_VERSION)
310
+ end
311
+ end
312
+ end
313
+ end
314
+ end