google-api-client 0.8.3 → 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 +52 -2
  9. data/CONTRIBUTING.md +31 -0
  10. data/Gemfile +35 -1
  11. data/MIGRATING.md +171 -0
  12. data/README.md +181 -148
  13. data/Rakefile +1 -40
  14. data/api_names.yaml +1036 -0
  15. data/api_names_out.yaml +26053 -0
  16. data/bin/generate-api +95 -0
  17. data/generated/google/apis/adexchangebuyer_v1_3/classes.rb +1335 -0
  18. data/generated/google/apis/adexchangebuyer_v1_3/representations.rb +446 -0
  19. data/generated/google/apis/adexchangebuyer_v1_3/service.rb +872 -0
  20. data/generated/google/apis/adexchangebuyer_v1_3.rb +35 -0
  21. data/generated/google/apis/adexchangeseller_v2_0/classes.rb +792 -0
  22. data/generated/google/apis/adexchangeseller_v2_0/representations.rb +309 -0
  23. data/generated/google/apis/adexchangeseller_v2_0/service.rb +668 -0
  24. data/generated/google/apis/adexchangeseller_v2_0.rb +38 -0
  25. data/generated/google/apis/admin_datatransfer_v1/classes.rb +267 -0
  26. data/generated/google/apis/admin_datatransfer_v1/representations.rb +118 -0
  27. data/generated/google/apis/admin_datatransfer_v1/service.rb +262 -0
  28. data/generated/google/apis/admin_datatransfer_v1.rb +37 -0
  29. data/generated/google/apis/admin_directory_v1/classes.rb +3141 -0
  30. data/generated/google/apis/admin_directory_v1/representations.rb +1029 -0
  31. data/generated/google/apis/admin_directory_v1/service.rb +3818 -0
  32. data/generated/google/apis/admin_directory_v1.rb +113 -0
  33. data/generated/google/apis/admin_reports_v1/classes.rb +582 -0
  34. data/generated/google/apis/admin_reports_v1/representations.rb +231 -0
  35. data/generated/google/apis/admin_reports_v1/service.rb +336 -0
  36. data/generated/google/apis/admin_reports_v1.rb +38 -0
  37. data/generated/google/apis/adsense_v1_4/classes.rb +1285 -0
  38. data/generated/google/apis/adsense_v1_4/representations.rb +494 -0
  39. data/generated/google/apis/adsense_v1_4/service.rb +1714 -0
  40. data/generated/google/apis/adsense_v1_4.rb +38 -0
  41. data/generated/google/apis/adsensehost_v4_1/classes.rb +834 -0
  42. data/generated/google/apis/adsensehost_v4_1/representations.rb +327 -0
  43. data/generated/google/apis/adsensehost_v4_1/service.rb +1164 -0
  44. data/generated/google/apis/adsensehost_v4_1.rb +35 -0
  45. data/generated/google/apis/analytics_v3/classes.rb +5118 -0
  46. data/generated/google/apis/analytics_v3/representations.rb +1662 -0
  47. data/generated/google/apis/analytics_v3/service.rb +3568 -0
  48. data/generated/google/apis/analytics_v3.rb +49 -0
  49. data/generated/google/apis/androidenterprise_v1/classes.rb +1443 -0
  50. data/generated/google/apis/androidenterprise_v1/representations.rb +538 -0
  51. data/generated/google/apis/androidenterprise_v1/service.rb +2602 -0
  52. data/generated/google/apis/androidenterprise_v1.rb +35 -0
  53. data/generated/google/apis/androidpublisher_v2/classes.rb +1411 -0
  54. data/generated/google/apis/androidpublisher_v2/representations.rb +646 -0
  55. data/generated/google/apis/androidpublisher_v2/service.rb +2338 -0
  56. data/generated/google/apis/androidpublisher_v2.rb +34 -0
  57. data/generated/google/apis/appengine_v1beta4/classes.rb +1532 -0
  58. data/generated/google/apis/appengine_v1beta4/representations.rb +526 -0
  59. data/generated/google/apis/appengine_v1beta4/service.rb +476 -0
  60. data/generated/google/apis/appengine_v1beta4.rb +35 -0
  61. data/generated/google/apis/appsactivity_v1/classes.rb +392 -0
  62. data/generated/google/apis/appsactivity_v1/representations.rb +184 -0
  63. data/generated/google/apis/appsactivity_v1/service.rb +128 -0
  64. data/generated/google/apis/appsactivity_v1.rb +46 -0
  65. data/generated/google/apis/appstate_v1/classes.rb +154 -0
  66. data/generated/google/apis/appstate_v1/representations.rb +79 -0
  67. data/generated/google/apis/appstate_v1/service.rb +260 -0
  68. data/generated/google/apis/appstate_v1.rb +34 -0
  69. data/generated/google/apis/autoscaler_v1beta2/classes.rb +747 -0
  70. data/generated/google/apis/autoscaler_v1beta2/representations.rb +281 -0
  71. data/generated/google/apis/autoscaler_v1beta2/service.rb +478 -0
  72. data/generated/google/apis/autoscaler_v1beta2.rb +38 -0
  73. data/generated/google/apis/bigquery_v2/classes.rb +2471 -0
  74. data/generated/google/apis/bigquery_v2/representations.rb +816 -0
  75. data/generated/google/apis/bigquery_v2/service.rb +982 -0
  76. data/generated/google/apis/bigquery_v2.rb +52 -0
  77. data/generated/google/apis/blogger_v3/classes.rb +1354 -0
  78. data/generated/google/apis/blogger_v3/representations.rb +562 -0
  79. data/generated/google/apis/blogger_v3/service.rb +1587 -0
  80. data/generated/google/apis/blogger_v3.rb +37 -0
  81. data/generated/google/apis/books_v1/classes.rb +3956 -0
  82. data/generated/google/apis/books_v1/representations.rb +1538 -0
  83. data/generated/google/apis/books_v1/service.rb +2290 -0
  84. data/generated/google/apis/books_v1.rb +34 -0
  85. data/generated/google/apis/calendar_v3/classes.rb +1742 -0
  86. data/generated/google/apis/calendar_v3/representations.rb +567 -0
  87. data/generated/google/apis/calendar_v3/service.rb +1968 -0
  88. data/generated/google/apis/calendar_v3.rb +37 -0
  89. data/generated/google/apis/civicinfo_v2/classes.rb +1127 -0
  90. data/generated/google/apis/civicinfo_v2/representations.rb +383 -0
  91. data/generated/google/apis/civicinfo_v2/service.rb +279 -0
  92. data/{lib/google/api_client/service_account.rb → generated/google/apis/civicinfo_v2.rb} +18 -8
  93. data/generated/google/apis/classroom_v1/classes.rb +512 -0
  94. data/generated/google/apis/classroom_v1/representations.rb +217 -0
  95. data/generated/google/apis/classroom_v1/service.rb +970 -0
  96. data/generated/google/apis/classroom_v1.rb +49 -0
  97. data/generated/google/apis/classroom_v1beta1/classes.rb +447 -0
  98. data/generated/google/apis/classroom_v1beta1/representations.rb +190 -0
  99. data/generated/google/apis/classroom_v1beta1/service.rb +791 -0
  100. data/generated/google/apis/classroom_v1beta1.rb +49 -0
  101. data/generated/google/apis/cloudbilling_v1/classes.rb +169 -0
  102. data/generated/google/apis/cloudbilling_v1/representations.rb +79 -0
  103. data/generated/google/apis/cloudbilling_v1/service.rb +258 -0
  104. data/generated/google/apis/cloudbilling_v1.rb +35 -0
  105. data/generated/google/apis/clouddebugger_v2/classes.rb +1004 -0
  106. data/generated/google/apis/clouddebugger_v2/representations.rb +410 -0
  107. data/generated/google/apis/clouddebugger_v2/service.rb +370 -0
  108. data/generated/google/apis/clouddebugger_v2.rb +41 -0
  109. data/generated/google/apis/cloudmonitoring_v2beta2/classes.rb +679 -0
  110. data/generated/google/apis/cloudmonitoring_v2beta2/representations.rb +311 -0
  111. data/generated/google/apis/cloudmonitoring_v2beta2/service.rb +452 -0
  112. data/generated/google/apis/cloudmonitoring_v2beta2.rb +37 -0
  113. data/generated/google/apis/cloudresourcemanager_v1beta1/classes.rb +437 -0
  114. data/generated/google/apis/cloudresourcemanager_v1beta1/representations.rb +188 -0
  115. data/generated/google/apis/cloudresourcemanager_v1beta1/service.rb +623 -0
  116. data/generated/google/apis/cloudresourcemanager_v1beta1.rb +38 -0
  117. data/generated/google/apis/cloudtrace_v1/classes.rb +188 -0
  118. data/generated/google/apis/cloudtrace_v1/representations.rb +92 -0
  119. data/generated/google/apis/cloudtrace_v1/service.rb +190 -0
  120. data/generated/google/apis/cloudtrace_v1.rb +35 -0
  121. data/generated/google/apis/clouduseraccounts_beta/classes.rb +823 -0
  122. data/generated/google/apis/clouduseraccounts_beta/representations.rb +313 -0
  123. data/generated/google/apis/clouduseraccounts_beta/service.rb +854 -0
  124. data/generated/google/apis/clouduseraccounts_beta.rb +43 -0
  125. data/generated/google/apis/compute_beta/classes.rb +9128 -0
  126. data/generated/google/apis/compute_beta/representations.rb +3048 -0
  127. data/generated/google/apis/compute_beta/service.rb +10154 -0
  128. data/generated/google/apis/compute_beta.rb +49 -0
  129. data/generated/google/apis/compute_v1/classes.rb +8681 -0
  130. data/generated/google/apis/compute_v1/representations.rb +2895 -0
  131. data/generated/google/apis/compute_v1/service.rb +9252 -0
  132. data/generated/google/apis/compute_v1.rb +49 -0
  133. data/generated/google/apis/container_v1/classes.rb +463 -0
  134. data/generated/google/apis/container_v1/representations.rb +175 -0
  135. data/generated/google/apis/container_v1/service.rb +367 -0
  136. data/generated/google/apis/container_v1.rb +35 -0
  137. data/generated/google/apis/container_v1beta1/classes.rb +466 -0
  138. data/generated/google/apis/container_v1beta1/representations.rb +177 -0
  139. data/generated/google/apis/container_v1beta1/service.rb +394 -0
  140. data/generated/google/apis/container_v1beta1.rb +35 -0
  141. data/generated/google/apis/content_v2/classes.rb +5986 -0
  142. data/generated/google/apis/content_v2/representations.rb +2288 -0
  143. data/generated/google/apis/content_v2/service.rb +2338 -0
  144. data/generated/google/apis/content_v2.rb +35 -0
  145. data/generated/google/apis/coordinate_v1/classes.rb +669 -0
  146. data/generated/google/apis/coordinate_v1/representations.rb +285 -0
  147. data/generated/google/apis/coordinate_v1/service.rb +678 -0
  148. data/generated/google/apis/coordinate_v1.rb +37 -0
  149. data/generated/google/apis/customsearch_v1/classes.rb +771 -0
  150. data/generated/google/apis/customsearch_v1/representations.rb +276 -0
  151. data/generated/google/apis/customsearch_v1/service.rb +207 -0
  152. data/{lib/google/api_client/auth/compute_service_account.rb → generated/google/apis/customsearch_v1.rb} +13 -10
  153. data/generated/google/apis/datastore_v1beta2/classes.rb +1186 -0
  154. data/generated/google/apis/datastore_v1beta2/representations.rb +526 -0
  155. data/generated/google/apis/datastore_v1beta2/service.rb +294 -0
  156. data/generated/google/apis/datastore_v1beta2.rb +40 -0
  157. data/generated/google/apis/deploymentmanager_v2/classes.rb +1091 -0
  158. data/generated/google/apis/deploymentmanager_v2/representations.rb +422 -0
  159. data/generated/google/apis/deploymentmanager_v2/service.rb +857 -0
  160. data/generated/google/apis/deploymentmanager_v2.rb +44 -0
  161. data/generated/google/apis/deploymentmanager_v2beta2/classes.rb +843 -0
  162. data/generated/google/apis/deploymentmanager_v2beta2/representations.rb +306 -0
  163. data/generated/google/apis/deploymentmanager_v2beta2/service.rb +689 -0
  164. data/generated/google/apis/deploymentmanager_v2beta2.rb +44 -0
  165. data/generated/google/apis/dfareporting_v2_1/classes.rb +10770 -0
  166. data/generated/google/apis/dfareporting_v2_1/representations.rb +3438 -0
  167. data/generated/google/apis/dfareporting_v2_1/service.rb +8585 -0
  168. data/generated/google/apis/dfareporting_v2_1.rb +37 -0
  169. data/generated/google/apis/discovery_v1/classes.rb +961 -0
  170. data/generated/google/apis/discovery_v1/representations.rb +357 -0
  171. data/generated/google/apis/discovery_v1/service.rb +142 -0
  172. data/generated/google/apis/discovery_v1.rb +32 -0
  173. data/generated/google/apis/dns_v1/classes.rb +406 -0
  174. data/generated/google/apis/dns_v1/representations.rb +151 -0
  175. data/generated/google/apis/dns_v1/service.rb +454 -0
  176. data/generated/google/apis/dns_v1.rb +44 -0
  177. data/generated/google/apis/doubleclickbidmanager_v1/classes.rb +716 -0
  178. data/generated/google/apis/doubleclickbidmanager_v1/representations.rb +298 -0
  179. data/generated/google/apis/doubleclickbidmanager_v1/service.rb +341 -0
  180. data/generated/google/apis/doubleclickbidmanager_v1.rb +31 -0
  181. data/generated/google/apis/doubleclicksearch_v2/classes.rb +956 -0
  182. data/generated/google/apis/doubleclicksearch_v2/representations.rb +316 -0
  183. data/generated/google/apis/doubleclicksearch_v2/service.rb +480 -0
  184. data/generated/google/apis/doubleclicksearch_v2.rb +35 -0
  185. data/generated/google/apis/drive_v2/classes.rb +2562 -0
  186. data/generated/google/apis/drive_v2/representations.rb +795 -0
  187. data/generated/google/apis/drive_v2/service.rb +2696 -0
  188. data/generated/google/apis/drive_v2.rb +58 -0
  189. data/generated/google/apis/drive_v3/classes.rb +1534 -0
  190. data/generated/google/apis/drive_v3/representations.rb +497 -0
  191. data/generated/google/apis/drive_v3/service.rb +1541 -0
  192. data/generated/google/apis/drive_v3.rb +55 -0
  193. data/generated/google/apis/fitness_v1/classes.rb +885 -0
  194. data/generated/google/apis/fitness_v1/representations.rb +320 -0
  195. data/generated/google/apis/fitness_v1/service.rb +675 -0
  196. data/generated/google/apis/fitness_v1.rb +49 -0
  197. data/generated/google/apis/fusiontables_v2/classes.rb +1048 -0
  198. data/generated/google/apis/fusiontables_v2/representations.rb +409 -0
  199. data/generated/google/apis/fusiontables_v2/service.rb +1463 -0
  200. data/generated/google/apis/fusiontables_v2.rb +37 -0
  201. data/generated/google/apis/games_configuration_v1configuration/classes.rb +506 -0
  202. data/generated/google/apis/games_configuration_v1configuration/representations.rb +206 -0
  203. data/generated/google/apis/games_configuration_v1configuration/service.rb +565 -0
  204. data/generated/google/apis/games_configuration_v1configuration.rb +34 -0
  205. data/generated/google/apis/games_management_v1management/classes.rb +524 -0
  206. data/generated/google/apis/games_management_v1management/representations.rb +231 -0
  207. data/generated/google/apis/games_management_v1management/service.rb +994 -0
  208. data/generated/google/apis/games_management_v1management.rb +37 -0
  209. data/generated/google/apis/games_v1/classes.rb +4617 -0
  210. data/generated/google/apis/games_v1/representations.rb +1584 -0
  211. data/generated/google/apis/games_v1/service.rb +2290 -0
  212. data/generated/google/apis/games_v1.rb +40 -0
  213. data/generated/google/apis/gan_v1beta1/classes.rb +1428 -0
  214. data/generated/google/apis/gan_v1beta1/representations.rb +428 -0
  215. data/generated/google/apis/gan_v1beta1/service.rb +682 -0
  216. data/generated/google/apis/gan_v1beta1.rb +31 -0
  217. data/generated/google/apis/genomics_v1/classes.rb +2609 -0
  218. data/generated/google/apis/genomics_v1/representations.rb +909 -0
  219. data/generated/google/apis/genomics_v1/service.rb +1676 -0
  220. data/generated/google/apis/genomics_v1.rb +49 -0
  221. data/generated/google/apis/genomics_v1beta2/classes.rb +3288 -0
  222. data/generated/google/apis/genomics_v1beta2/representations.rb +1194 -0
  223. data/generated/google/apis/genomics_v1beta2/service.rb +2392 -0
  224. data/generated/google/apis/genomics_v1beta2.rb +46 -0
  225. data/generated/google/apis/gmail_v1/classes.rb +794 -0
  226. data/generated/google/apis/gmail_v1/representations.rb +339 -0
  227. data/generated/google/apis/gmail_v1/service.rb +1470 -0
  228. data/generated/google/apis/gmail_v1.rb +52 -0
  229. data/generated/google/apis/groupsmigration_v1/classes.rb +51 -0
  230. data/generated/google/apis/groupsmigration_v1/representations.rb +38 -0
  231. data/generated/google/apis/groupsmigration_v1/service.rb +110 -0
  232. data/generated/google/apis/groupsmigration_v1.rb +34 -0
  233. data/generated/google/apis/groupssettings_v1/classes.rb +221 -0
  234. data/generated/google/apis/groupssettings_v1/representations.rb +64 -0
  235. data/generated/google/apis/groupssettings_v1/service.rb +179 -0
  236. data/generated/google/apis/groupssettings_v1.rb +34 -0
  237. data/generated/google/apis/identitytoolkit_v3/classes.rb +1466 -0
  238. data/generated/google/apis/identitytoolkit_v3/representations.rb +509 -0
  239. data/generated/google/apis/identitytoolkit_v3/service.rb +581 -0
  240. data/generated/google/apis/identitytoolkit_v3.rb +31 -0
  241. data/generated/google/apis/kgsearch_v1/classes.rb +59 -0
  242. data/generated/google/apis/kgsearch_v1/representations.rb +39 -0
  243. data/generated/google/apis/kgsearch_v1/service.rb +111 -0
  244. data/{spec/google/api_client/request_spec.rb → generated/google/apis/kgsearch_v1.rb} +16 -13
  245. data/generated/google/apis/licensing_v1/classes.rb +132 -0
  246. data/generated/google/apis/licensing_v1/representations.rb +68 -0
  247. data/generated/google/apis/licensing_v1/service.rb +369 -0
  248. data/generated/google/apis/licensing_v1.rb +34 -0
  249. data/generated/google/apis/logging_v1beta3/classes.rb +1079 -0
  250. data/generated/google/apis/logging_v1beta3/representations.rb +366 -0
  251. data/generated/google/apis/logging_v1beta3/service.rb +1001 -0
  252. data/generated/google/apis/logging_v1beta3.rb +47 -0
  253. data/generated/google/apis/manager_v1beta2/classes.rb +1287 -0
  254. data/generated/google/apis/manager_v1beta2/representations.rb +536 -0
  255. data/generated/google/apis/manager_v1beta2/service.rb +372 -0
  256. data/generated/google/apis/manager_v1beta2.rb +53 -0
  257. data/generated/google/apis/mapsengine_v1/classes.rb +2873 -0
  258. data/generated/google/apis/mapsengine_v1/representations.rb +1235 -0
  259. data/generated/google/apis/mapsengine_v1/service.rb +3388 -0
  260. data/generated/google/apis/mapsengine_v1.rb +38 -0
  261. data/generated/google/apis/mirror_v1/classes.rb +1072 -0
  262. data/generated/google/apis/mirror_v1/representations.rb +350 -0
  263. data/generated/google/apis/mirror_v1/service.rb +977 -0
  264. data/generated/google/apis/mirror_v1.rb +37 -0
  265. data/generated/google/apis/oauth2_v2/classes.rb +245 -0
  266. data/generated/google/apis/oauth2_v2/representations.rb +94 -0
  267. data/generated/google/apis/oauth2_v2/service.rb +199 -0
  268. data/generated/google/apis/oauth2_v2.rb +43 -0
  269. data/generated/google/apis/pagespeedonline_v2/classes.rb +614 -0
  270. data/generated/google/apis/pagespeedonline_v2/representations.rb +244 -0
  271. data/generated/google/apis/pagespeedonline_v2/service.rb +119 -0
  272. data/generated/google/apis/pagespeedonline_v2.rb +32 -0
  273. data/generated/google/apis/partners_v2/classes.rb +942 -0
  274. data/generated/google/apis/partners_v2/representations.rb +402 -0
  275. data/generated/google/apis/partners_v2/service.rb +400 -0
  276. data/generated/google/apis/partners_v2.rb +32 -0
  277. data/generated/google/apis/plus_domains_v1/classes.rb +2609 -0
  278. data/generated/google/apis/plus_domains_v1/representations.rb +987 -0
  279. data/generated/google/apis/plus_domains_v1/service.rb +904 -0
  280. data/generated/google/apis/plus_domains_v1.rb +61 -0
  281. data/generated/google/apis/plus_v1/classes.rb +2094 -0
  282. data/generated/google/apis/plus_v1/representations.rb +805 -0
  283. data/generated/google/apis/plus_v1/service.rb +470 -0
  284. data/generated/google/apis/plus_v1.rb +43 -0
  285. data/generated/google/apis/prediction_v1_6/classes.rb +751 -0
  286. data/generated/google/apis/prediction_v1_6/representations.rb +327 -0
  287. data/generated/google/apis/prediction_v1_6/service.rb +380 -0
  288. data/generated/google/apis/prediction_v1_6.rb +44 -0
  289. data/generated/google/apis/proximitybeacon_v1beta1/classes.rb +639 -0
  290. data/generated/google/apis/proximitybeacon_v1beta1/representations.rb +274 -0
  291. data/generated/google/apis/proximitybeacon_v1beta1/service.rb +591 -0
  292. data/generated/google/apis/proximitybeacon_v1beta1.rb +31 -0
  293. data/generated/google/apis/pubsub_v1/classes.rb +614 -0
  294. data/generated/google/apis/pubsub_v1/representations.rb +281 -0
  295. data/generated/google/apis/pubsub_v1/service.rb +774 -0
  296. data/generated/google/apis/pubsub_v1.rb +37 -0
  297. data/generated/google/apis/pubsub_v1beta2/classes.rb +620 -0
  298. data/generated/google/apis/pubsub_v1beta2/representations.rb +282 -0
  299. data/generated/google/apis/pubsub_v1beta2/service.rb +774 -0
  300. data/generated/google/apis/pubsub_v1beta2.rb +37 -0
  301. data/generated/google/apis/qpx_express_v1/classes.rb +1268 -0
  302. data/generated/google/apis/qpx_express_v1/representations.rb +424 -0
  303. data/generated/google/apis/qpx_express_v1/service.rb +100 -0
  304. data/generated/google/apis/qpx_express_v1.rb +31 -0
  305. data/generated/google/apis/replicapool_v1beta2/classes.rb +631 -0
  306. data/generated/google/apis/replicapool_v1beta2/representations.rb +236 -0
  307. data/generated/google/apis/replicapool_v1beta2/service.rb +608 -0
  308. data/generated/google/apis/replicapool_v1beta2.rb +44 -0
  309. data/generated/google/apis/replicapoolupdater_v1beta1/classes.rb +733 -0
  310. data/generated/google/apis/replicapoolupdater_v1beta1/representations.rb +264 -0
  311. data/generated/google/apis/replicapoolupdater_v1beta1/service.rb +508 -0
  312. data/generated/google/apis/replicapoolupdater_v1beta1.rb +44 -0
  313. data/generated/google/apis/reseller_v1/classes.rb +520 -0
  314. data/generated/google/apis/reseller_v1/representations.rb +200 -0
  315. data/generated/google/apis/reseller_v1/service.rb +623 -0
  316. data/generated/google/apis/reseller_v1.rb +37 -0
  317. data/generated/google/apis/resourceviews_v1beta2/classes.rb +660 -0
  318. data/generated/google/apis/resourceviews_v1beta2/representations.rb +269 -0
  319. data/generated/google/apis/resourceviews_v1beta2/service.rb +563 -0
  320. data/generated/google/apis/resourceviews_v1beta2.rb +50 -0
  321. data/generated/google/apis/script_v1/classes.rb +259 -0
  322. data/generated/google/apis/script_v1/representations.rb +106 -0
  323. data/generated/google/apis/script_v1/service.rb +98 -0
  324. data/generated/google/apis/script_v1.rb +61 -0
  325. data/generated/google/apis/site_verification_v1/classes.rb +185 -0
  326. data/generated/google/apis/site_verification_v1/representations.rb +101 -0
  327. data/generated/google/apis/site_verification_v1/service.rb +315 -0
  328. data/generated/google/apis/site_verification_v1.rb +37 -0
  329. data/generated/google/apis/sqladmin_v1beta4/classes.rb +2001 -0
  330. data/generated/google/apis/sqladmin_v1beta4/representations.rb +758 -0
  331. data/generated/google/apis/sqladmin_v1beta4/service.rb +1625 -0
  332. data/generated/google/apis/sqladmin_v1beta4.rb +37 -0
  333. data/generated/google/apis/storage_v1/classes.rb +1222 -0
  334. data/generated/google/apis/storage_v1/representations.rb +445 -0
  335. data/generated/google/apis/storage_v1/service.rb +1903 -0
  336. data/generated/google/apis/storage_v1.rb +46 -0
  337. data/generated/google/apis/storagetransfer_v1/classes.rb +1046 -0
  338. data/generated/google/apis/storagetransfer_v1/representations.rb +370 -0
  339. data/generated/google/apis/storagetransfer_v1/service.rb +473 -0
  340. data/generated/google/apis/storagetransfer_v1.rb +35 -0
  341. data/generated/google/apis/tagmanager_v1/classes.rb +1384 -0
  342. data/generated/google/apis/tagmanager_v1/representations.rb +515 -0
  343. data/generated/google/apis/tagmanager_v1/service.rb +1817 -0
  344. data/generated/google/apis/tagmanager_v1.rb +52 -0
  345. data/generated/google/apis/taskqueue_v1beta2/classes.rb +254 -0
  346. data/generated/google/apis/taskqueue_v1beta2/representations.rb +114 -0
  347. data/generated/google/apis/taskqueue_v1beta2/service.rb +408 -0
  348. data/generated/google/apis/taskqueue_v1beta2.rb +37 -0
  349. data/generated/google/apis/tasks_v1/classes.rb +296 -0
  350. data/generated/google/apis/tasks_v1/representations.rb +115 -0
  351. data/generated/google/apis/tasks_v1/service.rb +643 -0
  352. data/generated/google/apis/tasks_v1.rb +37 -0
  353. data/generated/google/apis/translate_v2/classes.rb +168 -0
  354. data/generated/google/apis/translate_v2/representations.rb +109 -0
  355. data/generated/google/apis/translate_v2/service.rb +182 -0
  356. data/generated/google/apis/translate_v2.rb +31 -0
  357. data/generated/google/apis/urlshortener_v1/classes.rb +246 -0
  358. data/generated/google/apis/urlshortener_v1/representations.rb +111 -0
  359. data/generated/google/apis/urlshortener_v1/service.rb +176 -0
  360. data/generated/google/apis/urlshortener_v1.rb +34 -0
  361. data/generated/google/apis/webmasters_v3/classes.rb +563 -0
  362. data/generated/google/apis/webmasters_v3/representations.rb +250 -0
  363. data/generated/google/apis/webmasters_v3/service.rb +573 -0
  364. data/generated/google/apis/webmasters_v3.rb +37 -0
  365. data/generated/google/apis/youtube_analytics_v1/classes.rb +546 -0
  366. data/generated/google/apis/youtube_analytics_v1/representations.rb +243 -0
  367. data/generated/google/apis/youtube_analytics_v1/service.rb +562 -0
  368. data/generated/google/apis/youtube_analytics_v1.rb +46 -0
  369. data/generated/google/apis/youtube_v3/classes.rb +8136 -0
  370. data/generated/google/apis/youtube_v3/representations.rb +2838 -0
  371. data/generated/google/apis/youtube_v3/service.rb +4403 -0
  372. data/generated/google/apis/youtube_v3.rb +49 -0
  373. data/generated/google/apis/youtubereporting_v1/classes.rb +258 -0
  374. data/generated/google/apis/youtubereporting_v1/representations.rb +128 -0
  375. data/generated/google/apis/youtubereporting_v1/service.rb +364 -0
  376. data/generated/google/apis/youtubereporting_v1.rb +38 -0
  377. data/google-api-client.gemspec +27 -39
  378. data/lib/google/api_client/auth/installed_app.rb +7 -5
  379. data/lib/google/api_client/auth/key_utils.rb +12 -11
  380. data/lib/google/api_client/auth/storage.rb +5 -2
  381. data/lib/google/api_client/auth/storages/file_store.rb +2 -3
  382. data/lib/google/api_client/auth/storages/redis_store.rb +7 -2
  383. data/lib/google/api_client/client_secrets.rb +4 -5
  384. data/lib/google/apis/core/api_command.rb +135 -0
  385. data/lib/google/apis/core/base_service.rb +317 -0
  386. data/lib/google/apis/core/batch.rb +239 -0
  387. data/lib/google/apis/core/download.rb +94 -0
  388. data/lib/google/apis/core/hashable.rb +44 -0
  389. data/lib/google/apis/core/http_client_adapter.rb +82 -0
  390. data/lib/google/apis/core/http_command.rb +312 -0
  391. data/lib/google/apis/core/json_representation.rb +127 -0
  392. data/lib/google/{api_client/version.rb → apis/core/logging.rb} +12 -8
  393. data/lib/google/apis/core/multipart.rb +187 -0
  394. data/lib/google/apis/core/upload.rb +288 -0
  395. data/lib/google/{api_client → apis}/errors.rb +39 -28
  396. data/lib/google/apis/generator/annotator.rb +295 -0
  397. data/lib/google/apis/generator/helpers.rb +74 -0
  398. data/lib/google/apis/generator/model.rb +143 -0
  399. data/lib/google/apis/generator/template.rb +124 -0
  400. data/lib/google/apis/generator/templates/_class.tmpl +40 -0
  401. data/lib/google/apis/generator/templates/_method.tmpl +92 -0
  402. data/lib/google/apis/generator/templates/_representation.tmpl +51 -0
  403. data/lib/google/apis/generator/templates/_representation_stub.tmpl +15 -0
  404. data/lib/google/apis/generator/templates/_representation_type.tmpl +10 -0
  405. data/lib/google/{api_client/reference.rb → apis/generator/templates/classes.rb.tmpl} +11 -9
  406. data/lib/google/apis/generator/templates/module.rb.tmpl +40 -0
  407. data/lib/google/apis/generator/templates/representations.rb.tmpl +32 -0
  408. data/lib/google/apis/generator/templates/service.rb.tmpl +60 -0
  409. data/lib/google/apis/generator.rb +70 -0
  410. data/lib/google/apis/options.rb +85 -0
  411. data/lib/google/apis/version.rb +39 -0
  412. data/lib/google/apis.rb +48 -0
  413. data/rakelib/metrics.rake +22 -0
  414. data/rakelib/rubocop.rake +10 -0
  415. data/rakelib/spec.rake +11 -0
  416. data/rakelib/yard.rake +11 -0
  417. data/samples/Gemfile +7 -0
  418. data/samples/README.md +51 -0
  419. data/samples/google-api-samples +32 -0
  420. data/samples/lib/base_cli.rb +94 -0
  421. data/samples/lib/samples/analytics.rb +62 -0
  422. data/samples/lib/samples/calendar.rb +83 -0
  423. data/samples/lib/samples/drive.rb +82 -0
  424. data/samples/lib/samples/gmail.rb +50 -0
  425. data/samples/lib/samples/pubsub.rb +114 -0
  426. data/samples/lib/samples/translate.rb +44 -0
  427. data/samples/lib/samples/you_tube.rb +44 -0
  428. data/script/generate +95 -0
  429. data/script/package +8 -0
  430. data/script/release +15 -0
  431. data/spec/fixtures/files/api_names.yaml +3 -0
  432. data/spec/fixtures/files/auth_stored_credentials.json +8 -0
  433. data/spec/fixtures/files/child/.gitignore +0 -0
  434. data/spec/fixtures/files/client_secrets.json +1 -0
  435. data/spec/fixtures/files/invalid.json +1 -0
  436. data/spec/fixtures/files/test.blah +1 -0
  437. data/spec/fixtures/files/test.txt +1 -0
  438. data/spec/fixtures/files/test_api.json +440 -0
  439. data/spec/google/api_client/auth/storage_spec.rb +1 -3
  440. data/spec/google/api_client/auth/storages/file_store_spec.rb +1 -2
  441. data/spec/google/api_client/auth/storages/redis_store_spec.rb +1 -3
  442. data/spec/google/api_client/client_secrets_spec.rb +38 -1
  443. data/spec/google/apis/core/api_command_spec.rb +209 -0
  444. data/spec/google/apis/core/batch_spec.rb +142 -0
  445. data/spec/google/apis/core/download_spec.rb +103 -0
  446. data/spec/google/apis/core/hashable_spec.rb +60 -0
  447. data/spec/google/apis/core/http_command_spec.rb +284 -0
  448. data/spec/google/apis/core/json_representation_spec.rb +192 -0
  449. data/spec/google/apis/core/service_spec.rb +247 -0
  450. data/spec/google/apis/core/upload_spec.rb +300 -0
  451. data/{lib/google/api_client/discovery.rb → spec/google/apis/generated_spec.rb} +13 -5
  452. data/spec/google/apis/generator/generator_spec.rb +272 -0
  453. data/spec/google/apis/logging_spec.rb +45 -0
  454. data/spec/google/apis/options_spec.rb +40 -0
  455. data/spec/integration_tests/adsense_spec.rb +29 -0
  456. data/spec/integration_tests/drive_spec.rb +35 -0
  457. data/spec/integration_tests/pubsub_spec.rb +48 -0
  458. data/spec/integration_tests/url_shortener_spec.rb +45 -0
  459. data/spec/spec_helper/load_path_spec.rb +33 -0
  460. data/spec/spec_helper.rb +131 -44
  461. data/third_party/hurley_patches.rb +103 -0
  462. metadata +533 -170
  463. data/lib/compat/multi_json.rb +0 -19
  464. data/lib/google/api_client/auth/file_storage.rb +0 -59
  465. data/lib/google/api_client/auth/jwt_asserter.rb +0 -126
  466. data/lib/google/api_client/auth/pkcs12.rb +0 -41
  467. data/lib/google/api_client/batch.rb +0 -325
  468. data/lib/google/api_client/charset.rb +0 -33
  469. data/lib/google/api_client/discovery/api.rb +0 -300
  470. data/lib/google/api_client/discovery/media.rb +0 -77
  471. data/lib/google/api_client/discovery/method.rb +0 -363
  472. data/lib/google/api_client/discovery/resource.rb +0 -156
  473. data/lib/google/api_client/discovery/schema.rb +0 -119
  474. data/lib/google/api_client/environment.rb +0 -42
  475. data/lib/google/api_client/gzip.rb +0 -28
  476. data/lib/google/api_client/logging.rb +0 -32
  477. data/lib/google/api_client/media.rb +0 -259
  478. data/lib/google/api_client/railtie.rb +0 -18
  479. data/lib/google/api_client/request.rb +0 -350
  480. data/lib/google/api_client/result.rb +0 -255
  481. data/lib/google/api_client/service/batch.rb +0 -110
  482. data/lib/google/api_client/service/request.rb +0 -144
  483. data/lib/google/api_client/service/resource.rb +0 -40
  484. data/lib/google/api_client/service/result.rb +0 -162
  485. data/lib/google/api_client/service/simple_file_store.rb +0 -151
  486. data/lib/google/api_client/service/stub_generator.rb +0 -61
  487. data/lib/google/api_client/service.rb +0 -233
  488. data/lib/google/api_client.rb +0 -750
  489. data/spec/google/api_client/batch_spec.rb +0 -248
  490. data/spec/google/api_client/discovery_spec.rb +0 -662
  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
@@ -1,28 +0,0 @@
1
- require 'faraday'
2
- require 'zlib'
3
-
4
- module Google
5
- class APIClient
6
- class Gzip < Faraday::Response::Middleware
7
- include Google::APIClient::Logging
8
-
9
- def on_complete(env)
10
- encoding = env[:response_headers]['content-encoding'].to_s.downcase
11
- case encoding
12
- when 'gzip'
13
- logger.debug { "Decompressing gzip encoded response (#{env[:body].length} bytes)" }
14
- env[:body] = Zlib::GzipReader.new(StringIO.new(env[:body])).read
15
- env[:response_headers].delete('content-encoding')
16
- logger.debug { "Decompressed (#{env[:body].length} bytes)" }
17
- when 'deflate'
18
- logger.debug{ "Decompressing deflate encoded response (#{env[:body].length} bytes)" }
19
- env[:body] = Zlib::Inflate.inflate(env[:body])
20
- env[:response_headers].delete('content-encoding')
21
- logger.debug { "Decompressed (#{env[:body].length} bytes)" }
22
- end
23
- end
24
- end
25
- end
26
- end
27
-
28
- Faraday::Response.register_middleware :gzip => Google::APIClient::Gzip
@@ -1,32 +0,0 @@
1
- require 'logger'
2
-
3
- module Google
4
- class APIClient
5
-
6
- class << self
7
- ##
8
- # Logger for the API client
9
- #
10
- # @return [Logger] logger instance.
11
- attr_accessor :logger
12
- end
13
-
14
- self.logger = Logger.new(STDOUT)
15
- self.logger.level = Logger::WARN
16
-
17
- ##
18
- # Module to make accessing the logger simpler
19
- module Logging
20
- ##
21
- # Logger for the API client
22
- #
23
- # @return [Logger] logger instance.
24
- def logger
25
- Google::APIClient.logger
26
- end
27
- end
28
-
29
- end
30
-
31
-
32
- end
@@ -1,259 +0,0 @@
1
- # Copyright 2010 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
- require 'google/api_client/reference'
15
-
16
- module Google
17
- class APIClient
18
- ##
19
- # Uploadable media support. Holds an IO stream & content type.
20
- #
21
- # @see Faraday::UploadIO
22
- # @example
23
- # media = Google::APIClient::UploadIO.new('mymovie.m4v', 'video/mp4')
24
- class UploadIO < Faraday::UploadIO
25
-
26
- # @return [Fixnum] Size of chunks to upload. Default is nil, meaning upload the entire file in a single request
27
- attr_accessor :chunk_size
28
-
29
- ##
30
- # Get the length of the stream
31
- #
32
- # @return [Fixnum]
33
- # Length of stream, in bytes
34
- def length
35
- io.respond_to?(:length) ? io.length : File.size(local_path)
36
- end
37
- end
38
-
39
- ##
40
- # Wraps an input stream and limits data to a given range
41
- #
42
- # @example
43
- # chunk = Google::APIClient::RangedIO.new(io, 0, 1000)
44
- class RangedIO
45
- ##
46
- # Bind an input stream to a specific range.
47
- #
48
- # @param [IO] io
49
- # Source input stream
50
- # @param [Fixnum] offset
51
- # Starting offset of the range
52
- # @param [Fixnum] length
53
- # Length of range
54
- def initialize(io, offset, length)
55
- @io = io
56
- @offset = offset
57
- @length = length
58
- self.rewind
59
- end
60
-
61
- ##
62
- # @see IO#read
63
- def read(amount = nil, buf = nil)
64
- buffer = buf || ''
65
- if amount.nil?
66
- size = @length - @pos
67
- done = ''
68
- elsif amount == 0
69
- size = 0
70
- done = ''
71
- else
72
- size = [@length - @pos, amount].min
73
- done = nil
74
- end
75
-
76
- if size > 0
77
- result = @io.read(size)
78
- result.force_encoding("BINARY") if result.respond_to?(:force_encoding)
79
- buffer << result if result
80
- @pos = @pos + size
81
- end
82
-
83
- if buffer.length > 0
84
- buffer
85
- else
86
- done
87
- end
88
- end
89
-
90
- ##
91
- # @see IO#rewind
92
- def rewind
93
- self.pos = 0
94
- end
95
-
96
- ##
97
- # @see IO#pos
98
- def pos
99
- @pos
100
- end
101
-
102
- ##
103
- # @see IO#pos=
104
- def pos=(pos)
105
- @pos = pos
106
- @io.pos = @offset + pos
107
- end
108
- end
109
-
110
- ##
111
- # Resumable uploader.
112
- #
113
- class ResumableUpload < Request
114
- # @return [Fixnum] Max bytes to send in a single request
115
- attr_accessor :chunk_size
116
-
117
- ##
118
- # Creates a new uploader.
119
- #
120
- # @param [Hash] options
121
- # Request options
122
- def initialize(options={})
123
- super options
124
- self.uri = options[:uri]
125
- self.http_method = :put
126
- @offset = options[:offset] || 0
127
- @complete = false
128
- @expired = false
129
- end
130
-
131
- ##
132
- # Sends all remaining chunks to the server
133
- #
134
- # @deprecated Pass the instance to {Google::APIClient#execute} instead
135
- #
136
- # @param [Google::APIClient] api_client
137
- # API Client instance to use for sending
138
- def send_all(api_client)
139
- result = nil
140
- until complete?
141
- result = send_chunk(api_client)
142
- break unless result.status == 308
143
- end
144
- return result
145
- end
146
-
147
-
148
- ##
149
- # Sends the next chunk to the server
150
- #
151
- # @deprecated Pass the instance to {Google::APIClient#execute} instead
152
- #
153
- # @param [Google::APIClient] api_client
154
- # API Client instance to use for sending
155
- def send_chunk(api_client)
156
- return api_client.execute(self)
157
- end
158
-
159
- ##
160
- # Check if upload is complete
161
- #
162
- # @return [TrueClass, FalseClass]
163
- # Whether or not the upload complete successfully
164
- def complete?
165
- return @complete
166
- end
167
-
168
- ##
169
- # Check if the upload URL expired (upload not completed in alotted time.)
170
- # Expired uploads must be restarted from the beginning
171
- #
172
- # @return [TrueClass, FalseClass]
173
- # Whether or not the upload has expired and can not be resumed
174
- def expired?
175
- return @expired
176
- end
177
-
178
- ##
179
- # Check if upload is resumable. That is, neither complete nor expired
180
- #
181
- # @return [TrueClass, FalseClass] True if upload can be resumed
182
- def resumable?
183
- return !(self.complete? or self.expired?)
184
- end
185
-
186
- ##
187
- # Convert to an HTTP request. Returns components in order of method, URI,
188
- # request headers, and body
189
- #
190
- # @api private
191
- #
192
- # @return [Array<(Symbol, Addressable::URI, Hash, [#read,#to_str])>]
193
- def to_http_request
194
- if @complete
195
- raise Google::APIClient::ClientError, "Upload already complete"
196
- elsif @offset.nil?
197
- self.headers.update({
198
- 'Content-Length' => "0",
199
- 'Content-Range' => "bytes */#{media.length}" })
200
- else
201
- start_offset = @offset
202
- remaining = self.media.length - start_offset
203
- chunk_size = self.media.chunk_size || self.chunk_size || self.media.length
204
- content_length = [remaining, chunk_size].min
205
- chunk = RangedIO.new(self.media.io, start_offset, content_length)
206
- end_offset = start_offset + content_length - 1
207
- self.headers.update({
208
- 'Content-Length' => "#{content_length}",
209
- 'Content-Type' => self.media.content_type,
210
- 'Content-Range' => "bytes #{start_offset}-#{end_offset}/#{media.length}" })
211
- self.body = chunk
212
- end
213
- super
214
- end
215
-
216
- ##
217
- # Check the result from the server, updating the offset and/or location
218
- # if available.
219
- #
220
- # @api private
221
- #
222
- # @param [Faraday::Response] response
223
- # HTTP response
224
- #
225
- # @return [Google::APIClient::Result]
226
- # Processed API response
227
- def process_http_response(response)
228
- case response.status
229
- when 200...299
230
- @complete = true
231
- when 308
232
- range = response.headers['range']
233
- if range
234
- @offset = range.scan(/\d+/).collect{|x| Integer(x)}.last + 1
235
- end
236
- if response.headers['location']
237
- self.uri = response.headers['location']
238
- end
239
- when 400...499
240
- @expired = true
241
- when 500...599
242
- # Invalidate the offset to mark it needs to be queried on the
243
- # next request
244
- @offset = nil
245
- end
246
- return Google::APIClient::Result.new(self, response)
247
- end
248
-
249
- ##
250
- # Hashified verison of the API request
251
- #
252
- # @return [Hash]
253
- def to_hash
254
- super.merge(:offset => @offset)
255
- end
256
-
257
- end
258
- end
259
- end
@@ -1,18 +0,0 @@
1
- require 'rails/railtie'
2
- require 'google/api_client/logging'
3
-
4
- module Google
5
- class APIClient
6
-
7
- ##
8
- # Optional support class for Rails. Currently replaces the built-in logger
9
- # with Rails' application log.
10
- #
11
- class Railtie < Rails::Railtie
12
- initializer 'google-api-client' do |app|
13
- logger = app.config.logger || Rails.logger
14
- Google::APIClient.logger = logger unless logger.nil?
15
- end
16
- end
17
- end
18
- end
@@ -1,350 +0,0 @@
1
- # Copyright 2010 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 'faraday'
16
- require 'faraday/request/multipart'
17
- require 'compat/multi_json'
18
- require 'addressable/uri'
19
- require 'stringio'
20
- require 'google/api_client/discovery'
21
- require 'google/api_client/logging'
22
-
23
- module Google
24
- class APIClient
25
-
26
- ##
27
- # Represents an API request.
28
- class Request
29
- include Google::APIClient::Logging
30
-
31
- MULTIPART_BOUNDARY = "-----------RubyApiMultipartPost".freeze
32
-
33
- # @return [Hash] Request parameters
34
- attr_reader :parameters
35
- # @return [Hash] Additional HTTP headers
36
- attr_reader :headers
37
- # @return [Google::APIClient::Method] API method to invoke
38
- attr_reader :api_method
39
- # @return [Google::APIClient::UploadIO] File to upload
40
- attr_accessor :media
41
- # @return [#generated_authenticated_request] User credentials
42
- attr_accessor :authorization
43
- # @return [TrueClass,FalseClass] True if request should include credentials
44
- attr_accessor :authenticated
45
- # @return [#read, #to_str] Request body
46
- attr_accessor :body
47
-
48
- ##
49
- # Build a request
50
- #
51
- # @param [Hash] options
52
- # @option options [Hash, Array] :parameters
53
- # Request parameters for the API method.
54
- # @option options [Google::APIClient::Method] :api_method
55
- # API method to invoke. Either :api_method or :uri must be specified
56
- # @option options [TrueClass, FalseClass] :authenticated
57
- # True if request should include credentials. Implicitly true if
58
- # unspecified and :authorization present
59
- # @option options [#generate_signed_request] :authorization
60
- # OAuth credentials
61
- # @option options [Google::APIClient::UploadIO] :media
62
- # File to upload, if media upload request
63
- # @option options [#to_json, #to_hash] :body_object
64
- # Main body of the API request. Typically hash or object that can
65
- # be serialized to JSON
66
- # @option options [#read, #to_str] :body
67
- # Raw body to send in POST/PUT requests
68
- # @option options [String, Addressable::URI] :uri
69
- # URI to request. Either :api_method or :uri must be specified
70
- # @option options [String, Symbol] :http_method
71
- # HTTP method when requesting a URI
72
- def initialize(options={})
73
- @parameters = Faraday::Utils::ParamsHash.new
74
- @headers = Faraday::Utils::Headers.new
75
-
76
- self.parameters.merge!(options[:parameters]) unless options[:parameters].nil?
77
- self.headers.merge!(options[:headers]) unless options[:headers].nil?
78
- self.api_method = options[:api_method]
79
- self.authenticated = options[:authenticated]
80
- self.authorization = options[:authorization]
81
-
82
- # These parameters are handled differently because they're not
83
- # parameters to the API method, but rather to the API system.
84
- self.parameters['key'] ||= options[:key] if options[:key]
85
- self.parameters['userIp'] ||= options[:user_ip] if options[:user_ip]
86
-
87
- if options[:media]
88
- self.initialize_media_upload(options)
89
- elsif options[:body]
90
- self.body = options[:body]
91
- elsif options[:body_object]
92
- self.headers['Content-Type'] ||= 'application/json'
93
- self.body = serialize_body(options[:body_object])
94
- else
95
- self.body = ''
96
- end
97
-
98
- unless self.api_method
99
- self.http_method = options[:http_method] || 'GET'
100
- self.uri = options[:uri]
101
- end
102
- end
103
-
104
- # @!attribute [r] upload_type
105
- # @return [String] protocol used for upload
106
- def upload_type
107
- return self.parameters['uploadType'] || self.parameters['upload_type']
108
- end
109
-
110
- # @!attribute http_method
111
- # @return [Symbol] HTTP method if invoking a URI
112
- def http_method
113
- return @http_method ||= self.api_method.http_method.to_s.downcase.to_sym
114
- end
115
-
116
- def http_method=(new_http_method)
117
- if new_http_method.kind_of?(Symbol)
118
- @http_method = new_http_method.to_s.downcase.to_sym
119
- elsif new_http_method.respond_to?(:to_str)
120
- @http_method = new_http_method.to_s.downcase.to_sym
121
- else
122
- raise TypeError,
123
- "Expected String or Symbol, got #{new_http_method.class}."
124
- end
125
- end
126
-
127
- def api_method=(new_api_method)
128
- if new_api_method.nil? || new_api_method.kind_of?(Google::APIClient::Method)
129
- @api_method = new_api_method
130
- else
131
- raise TypeError,
132
- "Expected Google::APIClient::Method, got #{new_api_method.class}."
133
- end
134
- end
135
-
136
- # @!attribute uri
137
- # @return [Addressable::URI] URI to send request
138
- def uri
139
- return @uri ||= self.api_method.generate_uri(self.parameters)
140
- end
141
-
142
- def uri=(new_uri)
143
- @uri = Addressable::URI.parse(new_uri)
144
- @parameters.update(@uri.query_values) unless @uri.query_values.nil?
145
- end
146
-
147
-
148
- # Transmits the request with the given connection
149
- #
150
- # @api private
151
- #
152
- # @param [Faraday::Connection] connection
153
- # the connection to transmit with
154
- # @param [TrueValue,FalseValue] is_retry
155
- # True if request has been previous sent
156
- #
157
- # @return [Google::APIClient::Result]
158
- # result of API request
159
- def send(connection, is_retry = false)
160
- self.body.rewind if is_retry && self.body.respond_to?(:rewind)
161
- env = self.to_env(connection)
162
- logger.debug { "#{self.class} Sending API request #{env[:method]} #{env[:url].to_s} #{env[:request_headers]}" }
163
- http_response = connection.app.call(env)
164
- result = self.process_http_response(http_response)
165
-
166
- logger.debug { "#{self.class} Result: #{result.status} #{result.headers}" }
167
-
168
- # Resumamble slightly different than other upload protocols in that it requires at least
169
- # 2 requests.
170
- if result.status == 200 && self.upload_type == 'resumable' && self.media
171
- upload = result.resumable_upload
172
- unless upload.complete?
173
- logger.debug { "#{self.class} Sending upload body" }
174
- result = upload.send(connection)
175
- end
176
- end
177
- return result
178
- end
179
-
180
- # Convert to an HTTP request. Returns components in order of method, URI,
181
- # request headers, and body
182
- #
183
- # @api private
184
- #
185
- # @return [Array<(Symbol, Addressable::URI, Hash, [#read,#to_str])>]
186
- def to_http_request
187
- request = (
188
- if self.api_method
189
- self.api_method.generate_request(self.parameters, self.body, self.headers)
190
- elsif self.uri
191
- unless self.parameters.empty?
192
- self.uri.query = Addressable::URI.form_encode(self.parameters)
193
- end
194
- [self.http_method, self.uri.to_s, self.headers, self.body]
195
- end)
196
- return request
197
- end
198
-
199
- ##
200
- # Hashified verison of the API request
201
- #
202
- # @return [Hash]
203
- def to_hash
204
- options = {}
205
- if self.api_method
206
- options[:api_method] = self.api_method
207
- options[:parameters] = self.parameters
208
- else
209
- options[:http_method] = self.http_method
210
- options[:uri] = self.uri
211
- end
212
- options[:headers] = self.headers
213
- options[:body] = self.body
214
- options[:media] = self.media
215
- unless self.authorization.nil?
216
- options[:authorization] = self.authorization
217
- end
218
- return options
219
- end
220
-
221
- ##
222
- # Prepares the request for execution, building a hash of parts
223
- # suitable for sending to Faraday::Connection.
224
- #
225
- # @api private
226
- #
227
- # @param [Faraday::Connection] connection
228
- # Connection for building the request
229
- #
230
- # @return [Hash]
231
- # Encoded request
232
- def to_env(connection)
233
- method, uri, headers, body = self.to_http_request
234
- http_request = connection.build_request(method) do |req|
235
- req.url(uri.to_s)
236
- req.headers.update(headers)
237
- req.body = body
238
- end
239
-
240
- if self.authorization.respond_to?(:generate_authenticated_request)
241
- http_request = self.authorization.generate_authenticated_request(
242
- :request => http_request,
243
- :connection => connection
244
- )
245
- end
246
-
247
- request_env = http_request.to_env(connection)
248
- end
249
-
250
- ##
251
- # Convert HTTP response to an API Result
252
- #
253
- # @api private
254
- #
255
- # @param [Faraday::Response] response
256
- # HTTP response
257
- #
258
- # @return [Google::APIClient::Result]
259
- # Processed API response
260
- def process_http_response(response)
261
- Result.new(self, response)
262
- end
263
-
264
- protected
265
-
266
- ##
267
- # Adjust headers & body for media uploads
268
- #
269
- # @api private
270
- #
271
- # @param [Hash] options
272
- # @option options [Hash, Array] :parameters
273
- # Request parameters for the API method.
274
- # @option options [Google::APIClient::UploadIO] :media
275
- # File to upload, if media upload request
276
- # @option options [#to_json, #to_hash] :body_object
277
- # Main body of the API request. Typically hash or object that can
278
- # be serialized to JSON
279
- # @option options [#read, #to_str] :body
280
- # Raw body to send in POST/PUT requests
281
- def initialize_media_upload(options)
282
- self.media = options[:media]
283
- case self.upload_type
284
- when "media"
285
- if options[:body] || options[:body_object]
286
- raise ArgumentError, "Can not specify body & body object for simple uploads"
287
- end
288
- self.headers['Content-Type'] ||= self.media.content_type
289
- self.headers['Content-Length'] ||= self.media.length.to_s
290
- self.body = self.media
291
- when "multipart"
292
- unless options[:body_object]
293
- raise ArgumentError, "Multipart requested but no body object"
294
- end
295
- metadata = StringIO.new(serialize_body(options[:body_object]))
296
- build_multipart([Faraday::UploadIO.new(metadata, 'application/json', 'file.json'), self.media])
297
- when "resumable"
298
- file_length = self.media.length
299
- self.headers['X-Upload-Content-Type'] = self.media.content_type
300
- self.headers['X-Upload-Content-Length'] = file_length.to_s
301
- if options[:body_object]
302
- self.headers['Content-Type'] ||= 'application/json'
303
- self.body = serialize_body(options[:body_object])
304
- else
305
- self.body = ''
306
- end
307
- end
308
- end
309
-
310
- ##
311
- # Assemble a multipart message from a set of parts
312
- #
313
- # @api private
314
- #
315
- # @param [Array<[#read,#to_str]>] parts
316
- # Array of parts to encode.
317
- # @param [String] mime_type
318
- # MIME type of the message
319
- # @param [String] boundary
320
- # Boundary for separating each part of the message
321
- def build_multipart(parts, mime_type = 'multipart/related', boundary = MULTIPART_BOUNDARY)
322
- env = Faraday::Env.new
323
- env.request = Faraday::RequestOptions.new
324
- env.request.boundary = boundary
325
- env.request_headers = {'Content-Type' => "#{mime_type};boundary=#{boundary}"}
326
- multipart = Faraday::Request::Multipart.new
327
- self.body = multipart.create_multipart(env, parts.map {|part| [nil, part]})
328
- self.headers.update(env[:request_headers])
329
- end
330
-
331
- ##
332
- # Serialize body object to JSON
333
- #
334
- # @api private
335
- #
336
- # @param [#to_json,#to_hash] body
337
- # object to serialize
338
- #
339
- # @return [String]
340
- # JSON
341
- def serialize_body(body)
342
- return body.to_json if body.respond_to?(:to_json)
343
- return MultiJson.dump(body.to_hash) if body.respond_to?(:to_hash)
344
- raise TypeError, 'Could not convert body object to JSON.' +
345
- 'Must respond to :to_json or :to_hash.'
346
- end
347
-
348
- end
349
- end
350
- end