google-api-client 0.8.6 → 0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (497) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +20 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +7 -0
  5. data/.rubocop_todo.yml +63 -0
  6. data/.travis.yml +22 -0
  7. data/.yardopts +12 -0
  8. data/CHANGELOG.md +41 -2
  9. data/CONTRIBUTING.md +31 -0
  10. data/Gemfile +32 -2
  11. data/MIGRATING.md +171 -0
  12. data/README.md +181 -148
  13. data/Rakefile +1 -40
  14. data/api_names.yaml +1036 -0
  15. data/api_names_out.yaml +26053 -0
  16. data/bin/generate-api +95 -0
  17. data/generated/google/apis/adexchangebuyer_v1_3.rb +35 -0
  18. data/generated/google/apis/adexchangebuyer_v1_3/classes.rb +1335 -0
  19. data/generated/google/apis/adexchangebuyer_v1_3/representations.rb +446 -0
  20. data/generated/google/apis/adexchangebuyer_v1_3/service.rb +872 -0
  21. data/generated/google/apis/adexchangeseller_v2_0.rb +38 -0
  22. data/generated/google/apis/adexchangeseller_v2_0/classes.rb +792 -0
  23. data/generated/google/apis/adexchangeseller_v2_0/representations.rb +309 -0
  24. data/generated/google/apis/adexchangeseller_v2_0/service.rb +668 -0
  25. data/generated/google/apis/admin_datatransfer_v1.rb +37 -0
  26. data/generated/google/apis/admin_datatransfer_v1/classes.rb +267 -0
  27. data/generated/google/apis/admin_datatransfer_v1/representations.rb +118 -0
  28. data/generated/google/apis/admin_datatransfer_v1/service.rb +262 -0
  29. data/generated/google/apis/admin_directory_v1.rb +113 -0
  30. data/generated/google/apis/admin_directory_v1/classes.rb +3141 -0
  31. data/generated/google/apis/admin_directory_v1/representations.rb +1029 -0
  32. data/generated/google/apis/admin_directory_v1/service.rb +3818 -0
  33. data/generated/google/apis/admin_reports_v1.rb +38 -0
  34. data/generated/google/apis/admin_reports_v1/classes.rb +582 -0
  35. data/generated/google/apis/admin_reports_v1/representations.rb +231 -0
  36. data/generated/google/apis/admin_reports_v1/service.rb +336 -0
  37. data/generated/google/apis/adsense_v1_4.rb +38 -0
  38. data/generated/google/apis/adsense_v1_4/classes.rb +1285 -0
  39. data/generated/google/apis/adsense_v1_4/representations.rb +494 -0
  40. data/generated/google/apis/adsense_v1_4/service.rb +1714 -0
  41. data/generated/google/apis/adsensehost_v4_1.rb +35 -0
  42. data/generated/google/apis/adsensehost_v4_1/classes.rb +834 -0
  43. data/generated/google/apis/adsensehost_v4_1/representations.rb +327 -0
  44. data/generated/google/apis/adsensehost_v4_1/service.rb +1164 -0
  45. data/generated/google/apis/analytics_v3.rb +49 -0
  46. data/generated/google/apis/analytics_v3/classes.rb +5118 -0
  47. data/generated/google/apis/analytics_v3/representations.rb +1662 -0
  48. data/generated/google/apis/analytics_v3/service.rb +3568 -0
  49. data/generated/google/apis/androidenterprise_v1.rb +35 -0
  50. data/generated/google/apis/androidenterprise_v1/classes.rb +1443 -0
  51. data/generated/google/apis/androidenterprise_v1/representations.rb +538 -0
  52. data/generated/google/apis/androidenterprise_v1/service.rb +2602 -0
  53. data/generated/google/apis/androidpublisher_v2.rb +34 -0
  54. data/generated/google/apis/androidpublisher_v2/classes.rb +1411 -0
  55. data/generated/google/apis/androidpublisher_v2/representations.rb +646 -0
  56. data/generated/google/apis/androidpublisher_v2/service.rb +2338 -0
  57. data/generated/google/apis/appengine_v1beta4.rb +35 -0
  58. data/generated/google/apis/appengine_v1beta4/classes.rb +1532 -0
  59. data/generated/google/apis/appengine_v1beta4/representations.rb +526 -0
  60. data/generated/google/apis/appengine_v1beta4/service.rb +476 -0
  61. data/generated/google/apis/appsactivity_v1.rb +46 -0
  62. data/generated/google/apis/appsactivity_v1/classes.rb +392 -0
  63. data/generated/google/apis/appsactivity_v1/representations.rb +184 -0
  64. data/generated/google/apis/appsactivity_v1/service.rb +128 -0
  65. data/generated/google/apis/appstate_v1.rb +34 -0
  66. data/generated/google/apis/appstate_v1/classes.rb +154 -0
  67. data/generated/google/apis/appstate_v1/representations.rb +79 -0
  68. data/generated/google/apis/appstate_v1/service.rb +260 -0
  69. data/generated/google/apis/autoscaler_v1beta2.rb +38 -0
  70. data/generated/google/apis/autoscaler_v1beta2/classes.rb +747 -0
  71. data/generated/google/apis/autoscaler_v1beta2/representations.rb +281 -0
  72. data/generated/google/apis/autoscaler_v1beta2/service.rb +478 -0
  73. data/generated/google/apis/bigquery_v2.rb +52 -0
  74. data/generated/google/apis/bigquery_v2/classes.rb +2471 -0
  75. data/generated/google/apis/bigquery_v2/representations.rb +816 -0
  76. data/generated/google/apis/bigquery_v2/service.rb +982 -0
  77. data/generated/google/apis/blogger_v3.rb +37 -0
  78. data/generated/google/apis/blogger_v3/classes.rb +1354 -0
  79. data/generated/google/apis/blogger_v3/representations.rb +562 -0
  80. data/generated/google/apis/blogger_v3/service.rb +1587 -0
  81. data/generated/google/apis/books_v1.rb +34 -0
  82. data/generated/google/apis/books_v1/classes.rb +3956 -0
  83. data/generated/google/apis/books_v1/representations.rb +1538 -0
  84. data/generated/google/apis/books_v1/service.rb +2290 -0
  85. data/generated/google/apis/calendar_v3.rb +37 -0
  86. data/generated/google/apis/calendar_v3/classes.rb +1742 -0
  87. data/generated/google/apis/calendar_v3/representations.rb +567 -0
  88. data/generated/google/apis/calendar_v3/service.rb +1968 -0
  89. data/{lib/google/api_client/service_account.rb → generated/google/apis/civicinfo_v2.rb} +18 -8
  90. data/generated/google/apis/civicinfo_v2/classes.rb +1127 -0
  91. data/generated/google/apis/civicinfo_v2/representations.rb +383 -0
  92. data/generated/google/apis/civicinfo_v2/service.rb +279 -0
  93. data/generated/google/apis/classroom_v1.rb +49 -0
  94. data/generated/google/apis/classroom_v1/classes.rb +512 -0
  95. data/generated/google/apis/classroom_v1/representations.rb +217 -0
  96. data/generated/google/apis/classroom_v1/service.rb +970 -0
  97. data/generated/google/apis/classroom_v1beta1.rb +49 -0
  98. data/generated/google/apis/classroom_v1beta1/classes.rb +447 -0
  99. data/generated/google/apis/classroom_v1beta1/representations.rb +190 -0
  100. data/generated/google/apis/classroom_v1beta1/service.rb +791 -0
  101. data/generated/google/apis/cloudbilling_v1.rb +35 -0
  102. data/generated/google/apis/cloudbilling_v1/classes.rb +169 -0
  103. data/generated/google/apis/cloudbilling_v1/representations.rb +79 -0
  104. data/generated/google/apis/cloudbilling_v1/service.rb +258 -0
  105. data/generated/google/apis/clouddebugger_v2.rb +41 -0
  106. data/generated/google/apis/clouddebugger_v2/classes.rb +1004 -0
  107. data/generated/google/apis/clouddebugger_v2/representations.rb +410 -0
  108. data/generated/google/apis/clouddebugger_v2/service.rb +370 -0
  109. data/generated/google/apis/cloudmonitoring_v2beta2.rb +37 -0
  110. data/generated/google/apis/cloudmonitoring_v2beta2/classes.rb +679 -0
  111. data/generated/google/apis/cloudmonitoring_v2beta2/representations.rb +311 -0
  112. data/generated/google/apis/cloudmonitoring_v2beta2/service.rb +452 -0
  113. data/generated/google/apis/cloudresourcemanager_v1beta1.rb +38 -0
  114. data/generated/google/apis/cloudresourcemanager_v1beta1/classes.rb +437 -0
  115. data/generated/google/apis/cloudresourcemanager_v1beta1/representations.rb +188 -0
  116. data/generated/google/apis/cloudresourcemanager_v1beta1/service.rb +623 -0
  117. data/generated/google/apis/cloudtrace_v1.rb +35 -0
  118. data/generated/google/apis/cloudtrace_v1/classes.rb +188 -0
  119. data/generated/google/apis/cloudtrace_v1/representations.rb +92 -0
  120. data/generated/google/apis/cloudtrace_v1/service.rb +190 -0
  121. data/generated/google/apis/clouduseraccounts_beta.rb +43 -0
  122. data/generated/google/apis/clouduseraccounts_beta/classes.rb +823 -0
  123. data/generated/google/apis/clouduseraccounts_beta/representations.rb +313 -0
  124. data/generated/google/apis/clouduseraccounts_beta/service.rb +854 -0
  125. data/generated/google/apis/compute_beta.rb +49 -0
  126. data/generated/google/apis/compute_beta/classes.rb +9128 -0
  127. data/generated/google/apis/compute_beta/representations.rb +3048 -0
  128. data/generated/google/apis/compute_beta/service.rb +10154 -0
  129. data/generated/google/apis/compute_v1.rb +49 -0
  130. data/generated/google/apis/compute_v1/classes.rb +8681 -0
  131. data/generated/google/apis/compute_v1/representations.rb +2895 -0
  132. data/generated/google/apis/compute_v1/service.rb +9252 -0
  133. data/generated/google/apis/container_v1.rb +35 -0
  134. data/generated/google/apis/container_v1/classes.rb +463 -0
  135. data/generated/google/apis/container_v1/representations.rb +175 -0
  136. data/generated/google/apis/container_v1/service.rb +367 -0
  137. data/generated/google/apis/container_v1beta1.rb +35 -0
  138. data/generated/google/apis/container_v1beta1/classes.rb +466 -0
  139. data/generated/google/apis/container_v1beta1/representations.rb +177 -0
  140. data/generated/google/apis/container_v1beta1/service.rb +394 -0
  141. data/generated/google/apis/content_v2.rb +35 -0
  142. data/generated/google/apis/content_v2/classes.rb +5986 -0
  143. data/generated/google/apis/content_v2/representations.rb +2288 -0
  144. data/generated/google/apis/content_v2/service.rb +2338 -0
  145. data/generated/google/apis/coordinate_v1.rb +37 -0
  146. data/generated/google/apis/coordinate_v1/classes.rb +669 -0
  147. data/generated/google/apis/coordinate_v1/representations.rb +285 -0
  148. data/generated/google/apis/coordinate_v1/service.rb +678 -0
  149. data/{lib/google/api_client/auth/compute_service_account.rb → generated/google/apis/customsearch_v1.rb} +13 -10
  150. data/generated/google/apis/customsearch_v1/classes.rb +771 -0
  151. data/generated/google/apis/customsearch_v1/representations.rb +276 -0
  152. data/generated/google/apis/customsearch_v1/service.rb +207 -0
  153. data/generated/google/apis/datastore_v1beta2.rb +40 -0
  154. data/generated/google/apis/datastore_v1beta2/classes.rb +1186 -0
  155. data/generated/google/apis/datastore_v1beta2/representations.rb +526 -0
  156. data/generated/google/apis/datastore_v1beta2/service.rb +294 -0
  157. data/generated/google/apis/deploymentmanager_v2.rb +44 -0
  158. data/generated/google/apis/deploymentmanager_v2/classes.rb +1091 -0
  159. data/generated/google/apis/deploymentmanager_v2/representations.rb +422 -0
  160. data/generated/google/apis/deploymentmanager_v2/service.rb +857 -0
  161. data/generated/google/apis/deploymentmanager_v2beta2.rb +44 -0
  162. data/generated/google/apis/deploymentmanager_v2beta2/classes.rb +843 -0
  163. data/generated/google/apis/deploymentmanager_v2beta2/representations.rb +306 -0
  164. data/generated/google/apis/deploymentmanager_v2beta2/service.rb +689 -0
  165. data/generated/google/apis/dfareporting_v2_1.rb +37 -0
  166. data/generated/google/apis/dfareporting_v2_1/classes.rb +10770 -0
  167. data/generated/google/apis/dfareporting_v2_1/representations.rb +3438 -0
  168. data/generated/google/apis/dfareporting_v2_1/service.rb +8585 -0
  169. data/generated/google/apis/discovery_v1.rb +32 -0
  170. data/generated/google/apis/discovery_v1/classes.rb +961 -0
  171. data/generated/google/apis/discovery_v1/representations.rb +357 -0
  172. data/generated/google/apis/discovery_v1/service.rb +142 -0
  173. data/generated/google/apis/dns_v1.rb +44 -0
  174. data/generated/google/apis/dns_v1/classes.rb +406 -0
  175. data/generated/google/apis/dns_v1/representations.rb +151 -0
  176. data/generated/google/apis/dns_v1/service.rb +454 -0
  177. data/generated/google/apis/doubleclickbidmanager_v1.rb +31 -0
  178. data/generated/google/apis/doubleclickbidmanager_v1/classes.rb +716 -0
  179. data/generated/google/apis/doubleclickbidmanager_v1/representations.rb +298 -0
  180. data/generated/google/apis/doubleclickbidmanager_v1/service.rb +341 -0
  181. data/generated/google/apis/doubleclicksearch_v2.rb +35 -0
  182. data/generated/google/apis/doubleclicksearch_v2/classes.rb +956 -0
  183. data/generated/google/apis/doubleclicksearch_v2/representations.rb +316 -0
  184. data/generated/google/apis/doubleclicksearch_v2/service.rb +480 -0
  185. data/generated/google/apis/drive_v2.rb +58 -0
  186. data/generated/google/apis/drive_v2/classes.rb +2562 -0
  187. data/generated/google/apis/drive_v2/representations.rb +795 -0
  188. data/generated/google/apis/drive_v2/service.rb +2696 -0
  189. data/generated/google/apis/drive_v3.rb +55 -0
  190. data/generated/google/apis/drive_v3/classes.rb +1534 -0
  191. data/generated/google/apis/drive_v3/representations.rb +497 -0
  192. data/generated/google/apis/drive_v3/service.rb +1541 -0
  193. data/generated/google/apis/fitness_v1.rb +49 -0
  194. data/generated/google/apis/fitness_v1/classes.rb +885 -0
  195. data/generated/google/apis/fitness_v1/representations.rb +320 -0
  196. data/generated/google/apis/fitness_v1/service.rb +675 -0
  197. data/generated/google/apis/fusiontables_v2.rb +37 -0
  198. data/generated/google/apis/fusiontables_v2/classes.rb +1048 -0
  199. data/generated/google/apis/fusiontables_v2/representations.rb +409 -0
  200. data/generated/google/apis/fusiontables_v2/service.rb +1463 -0
  201. data/generated/google/apis/games_configuration_v1configuration.rb +34 -0
  202. data/generated/google/apis/games_configuration_v1configuration/classes.rb +506 -0
  203. data/generated/google/apis/games_configuration_v1configuration/representations.rb +206 -0
  204. data/generated/google/apis/games_configuration_v1configuration/service.rb +565 -0
  205. data/generated/google/apis/games_management_v1management.rb +37 -0
  206. data/generated/google/apis/games_management_v1management/classes.rb +524 -0
  207. data/generated/google/apis/games_management_v1management/representations.rb +231 -0
  208. data/generated/google/apis/games_management_v1management/service.rb +994 -0
  209. data/generated/google/apis/games_v1.rb +40 -0
  210. data/generated/google/apis/games_v1/classes.rb +4617 -0
  211. data/generated/google/apis/games_v1/representations.rb +1584 -0
  212. data/generated/google/apis/games_v1/service.rb +2290 -0
  213. data/generated/google/apis/gan_v1beta1.rb +31 -0
  214. data/generated/google/apis/gan_v1beta1/classes.rb +1428 -0
  215. data/generated/google/apis/gan_v1beta1/representations.rb +428 -0
  216. data/generated/google/apis/gan_v1beta1/service.rb +682 -0
  217. data/generated/google/apis/genomics_v1.rb +49 -0
  218. data/generated/google/apis/genomics_v1/classes.rb +2609 -0
  219. data/generated/google/apis/genomics_v1/representations.rb +909 -0
  220. data/generated/google/apis/genomics_v1/service.rb +1676 -0
  221. data/generated/google/apis/genomics_v1beta2.rb +46 -0
  222. data/generated/google/apis/genomics_v1beta2/classes.rb +3288 -0
  223. data/generated/google/apis/genomics_v1beta2/representations.rb +1194 -0
  224. data/generated/google/apis/genomics_v1beta2/service.rb +2392 -0
  225. data/generated/google/apis/gmail_v1.rb +52 -0
  226. data/generated/google/apis/gmail_v1/classes.rb +794 -0
  227. data/generated/google/apis/gmail_v1/representations.rb +339 -0
  228. data/generated/google/apis/gmail_v1/service.rb +1470 -0
  229. data/generated/google/apis/groupsmigration_v1.rb +34 -0
  230. data/generated/google/apis/groupsmigration_v1/classes.rb +51 -0
  231. data/generated/google/apis/groupsmigration_v1/representations.rb +38 -0
  232. data/generated/google/apis/groupsmigration_v1/service.rb +110 -0
  233. data/generated/google/apis/groupssettings_v1.rb +34 -0
  234. data/generated/google/apis/groupssettings_v1/classes.rb +221 -0
  235. data/generated/google/apis/groupssettings_v1/representations.rb +64 -0
  236. data/generated/google/apis/groupssettings_v1/service.rb +179 -0
  237. data/generated/google/apis/identitytoolkit_v3.rb +31 -0
  238. data/generated/google/apis/identitytoolkit_v3/classes.rb +1466 -0
  239. data/generated/google/apis/identitytoolkit_v3/representations.rb +509 -0
  240. data/generated/google/apis/identitytoolkit_v3/service.rb +581 -0
  241. data/{spec/google/api_client/request_spec.rb → generated/google/apis/kgsearch_v1.rb} +16 -13
  242. data/generated/google/apis/kgsearch_v1/classes.rb +59 -0
  243. data/generated/google/apis/kgsearch_v1/representations.rb +39 -0
  244. data/generated/google/apis/kgsearch_v1/service.rb +111 -0
  245. data/generated/google/apis/licensing_v1.rb +34 -0
  246. data/generated/google/apis/licensing_v1/classes.rb +132 -0
  247. data/generated/google/apis/licensing_v1/representations.rb +68 -0
  248. data/generated/google/apis/licensing_v1/service.rb +369 -0
  249. data/generated/google/apis/logging_v1beta3.rb +47 -0
  250. data/generated/google/apis/logging_v1beta3/classes.rb +1079 -0
  251. data/generated/google/apis/logging_v1beta3/representations.rb +366 -0
  252. data/generated/google/apis/logging_v1beta3/service.rb +1001 -0
  253. data/generated/google/apis/manager_v1beta2.rb +53 -0
  254. data/generated/google/apis/manager_v1beta2/classes.rb +1287 -0
  255. data/generated/google/apis/manager_v1beta2/representations.rb +536 -0
  256. data/generated/google/apis/manager_v1beta2/service.rb +372 -0
  257. data/generated/google/apis/mapsengine_v1.rb +38 -0
  258. data/generated/google/apis/mapsengine_v1/classes.rb +2873 -0
  259. data/generated/google/apis/mapsengine_v1/representations.rb +1235 -0
  260. data/generated/google/apis/mapsengine_v1/service.rb +3388 -0
  261. data/generated/google/apis/mirror_v1.rb +37 -0
  262. data/generated/google/apis/mirror_v1/classes.rb +1072 -0
  263. data/generated/google/apis/mirror_v1/representations.rb +350 -0
  264. data/generated/google/apis/mirror_v1/service.rb +977 -0
  265. data/generated/google/apis/oauth2_v2.rb +43 -0
  266. data/generated/google/apis/oauth2_v2/classes.rb +245 -0
  267. data/generated/google/apis/oauth2_v2/representations.rb +94 -0
  268. data/generated/google/apis/oauth2_v2/service.rb +199 -0
  269. data/generated/google/apis/pagespeedonline_v2.rb +32 -0
  270. data/generated/google/apis/pagespeedonline_v2/classes.rb +614 -0
  271. data/generated/google/apis/pagespeedonline_v2/representations.rb +244 -0
  272. data/generated/google/apis/pagespeedonline_v2/service.rb +119 -0
  273. data/generated/google/apis/partners_v2.rb +32 -0
  274. data/generated/google/apis/partners_v2/classes.rb +942 -0
  275. data/generated/google/apis/partners_v2/representations.rb +402 -0
  276. data/generated/google/apis/partners_v2/service.rb +400 -0
  277. data/generated/google/apis/plus_domains_v1.rb +61 -0
  278. data/generated/google/apis/plus_domains_v1/classes.rb +2609 -0
  279. data/generated/google/apis/plus_domains_v1/representations.rb +987 -0
  280. data/generated/google/apis/plus_domains_v1/service.rb +904 -0
  281. data/generated/google/apis/plus_v1.rb +43 -0
  282. data/generated/google/apis/plus_v1/classes.rb +2094 -0
  283. data/generated/google/apis/plus_v1/representations.rb +805 -0
  284. data/generated/google/apis/plus_v1/service.rb +470 -0
  285. data/generated/google/apis/prediction_v1_6.rb +44 -0
  286. data/generated/google/apis/prediction_v1_6/classes.rb +751 -0
  287. data/generated/google/apis/prediction_v1_6/representations.rb +327 -0
  288. data/generated/google/apis/prediction_v1_6/service.rb +380 -0
  289. data/generated/google/apis/proximitybeacon_v1beta1.rb +31 -0
  290. data/generated/google/apis/proximitybeacon_v1beta1/classes.rb +639 -0
  291. data/generated/google/apis/proximitybeacon_v1beta1/representations.rb +274 -0
  292. data/generated/google/apis/proximitybeacon_v1beta1/service.rb +591 -0
  293. data/generated/google/apis/pubsub_v1.rb +37 -0
  294. data/generated/google/apis/pubsub_v1/classes.rb +614 -0
  295. data/generated/google/apis/pubsub_v1/representations.rb +281 -0
  296. data/generated/google/apis/pubsub_v1/service.rb +774 -0
  297. data/generated/google/apis/pubsub_v1beta2.rb +37 -0
  298. data/generated/google/apis/pubsub_v1beta2/classes.rb +620 -0
  299. data/generated/google/apis/pubsub_v1beta2/representations.rb +282 -0
  300. data/generated/google/apis/pubsub_v1beta2/service.rb +774 -0
  301. data/generated/google/apis/qpx_express_v1.rb +31 -0
  302. data/generated/google/apis/qpx_express_v1/classes.rb +1268 -0
  303. data/generated/google/apis/qpx_express_v1/representations.rb +424 -0
  304. data/generated/google/apis/qpx_express_v1/service.rb +100 -0
  305. data/generated/google/apis/replicapool_v1beta2.rb +44 -0
  306. data/generated/google/apis/replicapool_v1beta2/classes.rb +631 -0
  307. data/generated/google/apis/replicapool_v1beta2/representations.rb +236 -0
  308. data/generated/google/apis/replicapool_v1beta2/service.rb +608 -0
  309. data/generated/google/apis/replicapoolupdater_v1beta1.rb +44 -0
  310. data/generated/google/apis/replicapoolupdater_v1beta1/classes.rb +733 -0
  311. data/generated/google/apis/replicapoolupdater_v1beta1/representations.rb +264 -0
  312. data/generated/google/apis/replicapoolupdater_v1beta1/service.rb +508 -0
  313. data/generated/google/apis/reseller_v1.rb +37 -0
  314. data/generated/google/apis/reseller_v1/classes.rb +520 -0
  315. data/generated/google/apis/reseller_v1/representations.rb +200 -0
  316. data/generated/google/apis/reseller_v1/service.rb +623 -0
  317. data/generated/google/apis/resourceviews_v1beta2.rb +50 -0
  318. data/generated/google/apis/resourceviews_v1beta2/classes.rb +660 -0
  319. data/generated/google/apis/resourceviews_v1beta2/representations.rb +269 -0
  320. data/generated/google/apis/resourceviews_v1beta2/service.rb +563 -0
  321. data/generated/google/apis/script_v1.rb +61 -0
  322. data/generated/google/apis/script_v1/classes.rb +259 -0
  323. data/generated/google/apis/script_v1/representations.rb +106 -0
  324. data/generated/google/apis/script_v1/service.rb +98 -0
  325. data/generated/google/apis/site_verification_v1.rb +37 -0
  326. data/generated/google/apis/site_verification_v1/classes.rb +185 -0
  327. data/generated/google/apis/site_verification_v1/representations.rb +101 -0
  328. data/generated/google/apis/site_verification_v1/service.rb +315 -0
  329. data/generated/google/apis/sqladmin_v1beta4.rb +37 -0
  330. data/generated/google/apis/sqladmin_v1beta4/classes.rb +2001 -0
  331. data/generated/google/apis/sqladmin_v1beta4/representations.rb +758 -0
  332. data/generated/google/apis/sqladmin_v1beta4/service.rb +1625 -0
  333. data/generated/google/apis/storage_v1.rb +46 -0
  334. data/generated/google/apis/storage_v1/classes.rb +1222 -0
  335. data/generated/google/apis/storage_v1/representations.rb +445 -0
  336. data/generated/google/apis/storage_v1/service.rb +1903 -0
  337. data/generated/google/apis/storagetransfer_v1.rb +35 -0
  338. data/generated/google/apis/storagetransfer_v1/classes.rb +1046 -0
  339. data/generated/google/apis/storagetransfer_v1/representations.rb +370 -0
  340. data/generated/google/apis/storagetransfer_v1/service.rb +473 -0
  341. data/generated/google/apis/tagmanager_v1.rb +52 -0
  342. data/generated/google/apis/tagmanager_v1/classes.rb +1384 -0
  343. data/generated/google/apis/tagmanager_v1/representations.rb +515 -0
  344. data/generated/google/apis/tagmanager_v1/service.rb +1817 -0
  345. data/generated/google/apis/taskqueue_v1beta2.rb +37 -0
  346. data/generated/google/apis/taskqueue_v1beta2/classes.rb +254 -0
  347. data/generated/google/apis/taskqueue_v1beta2/representations.rb +114 -0
  348. data/generated/google/apis/taskqueue_v1beta2/service.rb +408 -0
  349. data/generated/google/apis/tasks_v1.rb +37 -0
  350. data/generated/google/apis/tasks_v1/classes.rb +296 -0
  351. data/generated/google/apis/tasks_v1/representations.rb +115 -0
  352. data/generated/google/apis/tasks_v1/service.rb +643 -0
  353. data/generated/google/apis/translate_v2.rb +31 -0
  354. data/generated/google/apis/translate_v2/classes.rb +168 -0
  355. data/generated/google/apis/translate_v2/representations.rb +109 -0
  356. data/generated/google/apis/translate_v2/service.rb +182 -0
  357. data/generated/google/apis/urlshortener_v1.rb +34 -0
  358. data/generated/google/apis/urlshortener_v1/classes.rb +246 -0
  359. data/generated/google/apis/urlshortener_v1/representations.rb +111 -0
  360. data/generated/google/apis/urlshortener_v1/service.rb +176 -0
  361. data/generated/google/apis/webmasters_v3.rb +37 -0
  362. data/generated/google/apis/webmasters_v3/classes.rb +563 -0
  363. data/generated/google/apis/webmasters_v3/representations.rb +250 -0
  364. data/generated/google/apis/webmasters_v3/service.rb +573 -0
  365. data/generated/google/apis/youtube_analytics_v1.rb +46 -0
  366. data/generated/google/apis/youtube_analytics_v1/classes.rb +546 -0
  367. data/generated/google/apis/youtube_analytics_v1/representations.rb +243 -0
  368. data/generated/google/apis/youtube_analytics_v1/service.rb +562 -0
  369. data/generated/google/apis/youtube_v3.rb +49 -0
  370. data/generated/google/apis/youtube_v3/classes.rb +8136 -0
  371. data/generated/google/apis/youtube_v3/representations.rb +2838 -0
  372. data/generated/google/apis/youtube_v3/service.rb +4403 -0
  373. data/generated/google/apis/youtubereporting_v1.rb +38 -0
  374. data/generated/google/apis/youtubereporting_v1/classes.rb +258 -0
  375. data/generated/google/apis/youtubereporting_v1/representations.rb +128 -0
  376. data/generated/google/apis/youtubereporting_v1/service.rb +364 -0
  377. data/google-api-client.gemspec +27 -39
  378. data/lib/google/api_client/auth/installed_app.rb +7 -5
  379. data/lib/google/api_client/auth/key_utils.rb +1 -0
  380. data/lib/google/api_client/auth/storage.rb +4 -2
  381. data/lib/google/api_client/auth/storages/file_store.rb +2 -3
  382. data/lib/google/api_client/auth/storages/redis_store.rb +7 -2
  383. data/lib/google/api_client/client_secrets.rb +4 -5
  384. data/lib/google/apis.rb +48 -0
  385. data/lib/google/apis/core/api_command.rb +135 -0
  386. data/lib/google/apis/core/base_service.rb +317 -0
  387. data/lib/google/apis/core/batch.rb +239 -0
  388. data/lib/google/apis/core/download.rb +94 -0
  389. data/lib/google/apis/core/hashable.rb +44 -0
  390. data/lib/google/apis/core/http_client_adapter.rb +82 -0
  391. data/lib/google/apis/core/http_command.rb +312 -0
  392. data/lib/google/apis/core/json_representation.rb +127 -0
  393. data/lib/google/{api_client/version.rb → apis/core/logging.rb} +12 -8
  394. data/lib/google/apis/core/multipart.rb +187 -0
  395. data/lib/google/apis/core/upload.rb +288 -0
  396. data/lib/google/{api_client → apis}/errors.rb +39 -28
  397. data/lib/google/apis/generator.rb +70 -0
  398. data/lib/google/apis/generator/annotator.rb +295 -0
  399. data/lib/google/apis/generator/helpers.rb +74 -0
  400. data/lib/google/apis/generator/model.rb +143 -0
  401. data/lib/google/apis/generator/template.rb +124 -0
  402. data/lib/google/apis/generator/templates/_class.tmpl +40 -0
  403. data/lib/google/apis/generator/templates/_method.tmpl +92 -0
  404. data/lib/google/apis/generator/templates/_representation.tmpl +51 -0
  405. data/lib/google/apis/generator/templates/_representation_stub.tmpl +15 -0
  406. data/lib/google/apis/generator/templates/_representation_type.tmpl +10 -0
  407. data/lib/google/{api_client/reference.rb → apis/generator/templates/classes.rb.tmpl} +11 -9
  408. data/lib/google/apis/generator/templates/module.rb.tmpl +40 -0
  409. data/lib/google/apis/generator/templates/representations.rb.tmpl +32 -0
  410. data/lib/google/apis/generator/templates/service.rb.tmpl +60 -0
  411. data/lib/google/apis/options.rb +85 -0
  412. data/lib/google/apis/version.rb +39 -0
  413. data/rakelib/metrics.rake +22 -0
  414. data/rakelib/rubocop.rake +10 -0
  415. data/rakelib/spec.rake +11 -0
  416. data/rakelib/yard.rake +11 -0
  417. data/samples/Gemfile +7 -0
  418. data/samples/README.md +51 -0
  419. data/samples/google-api-samples +32 -0
  420. data/samples/lib/base_cli.rb +94 -0
  421. data/samples/lib/samples/analytics.rb +62 -0
  422. data/samples/lib/samples/calendar.rb +83 -0
  423. data/samples/lib/samples/drive.rb +82 -0
  424. data/samples/lib/samples/gmail.rb +50 -0
  425. data/samples/lib/samples/pubsub.rb +114 -0
  426. data/samples/lib/samples/translate.rb +44 -0
  427. data/samples/lib/samples/you_tube.rb +44 -0
  428. data/script/generate +95 -0
  429. data/script/package +8 -0
  430. data/script/release +15 -0
  431. data/spec/fixtures/files/api_names.yaml +3 -0
  432. data/spec/fixtures/files/auth_stored_credentials.json +8 -0
  433. data/spec/fixtures/files/child/.gitignore +0 -0
  434. data/spec/fixtures/files/client_secrets.json +1 -0
  435. data/spec/fixtures/files/invalid.json +1 -0
  436. data/spec/fixtures/files/test.blah +1 -0
  437. data/spec/fixtures/files/test.txt +1 -0
  438. data/spec/fixtures/files/test_api.json +440 -0
  439. data/spec/google/api_client/auth/storage_spec.rb +1 -3
  440. data/spec/google/api_client/auth/storages/file_store_spec.rb +1 -2
  441. data/spec/google/api_client/auth/storages/redis_store_spec.rb +1 -3
  442. data/spec/google/api_client/client_secrets_spec.rb +38 -1
  443. data/spec/google/apis/core/api_command_spec.rb +209 -0
  444. data/spec/google/apis/core/batch_spec.rb +142 -0
  445. data/spec/google/apis/core/download_spec.rb +103 -0
  446. data/spec/google/apis/core/hashable_spec.rb +60 -0
  447. data/spec/google/apis/core/http_command_spec.rb +284 -0
  448. data/spec/google/apis/core/json_representation_spec.rb +192 -0
  449. data/spec/google/apis/core/service_spec.rb +247 -0
  450. data/spec/google/apis/core/upload_spec.rb +300 -0
  451. data/{lib/google/api_client/discovery.rb → spec/google/apis/generated_spec.rb} +13 -5
  452. data/spec/google/apis/generator/generator_spec.rb +272 -0
  453. data/spec/google/apis/logging_spec.rb +45 -0
  454. data/spec/google/apis/options_spec.rb +40 -0
  455. data/spec/integration_tests/adsense_spec.rb +29 -0
  456. data/spec/integration_tests/drive_spec.rb +35 -0
  457. data/spec/integration_tests/pubsub_spec.rb +48 -0
  458. data/spec/integration_tests/url_shortener_spec.rb +45 -0
  459. data/spec/spec_helper.rb +131 -44
  460. data/spec/spec_helper/load_path_spec.rb +33 -0
  461. data/third_party/hurley_patches.rb +103 -0
  462. metadata +533 -170
  463. data/lib/compat/multi_json.rb +0 -19
  464. data/lib/google/api_client.rb +0 -750
  465. data/lib/google/api_client/auth/file_storage.rb +0 -59
  466. data/lib/google/api_client/auth/jwt_asserter.rb +0 -126
  467. data/lib/google/api_client/auth/pkcs12.rb +0 -41
  468. data/lib/google/api_client/batch.rb +0 -326
  469. data/lib/google/api_client/charset.rb +0 -33
  470. data/lib/google/api_client/discovery/api.rb +0 -310
  471. data/lib/google/api_client/discovery/media.rb +0 -77
  472. data/lib/google/api_client/discovery/method.rb +0 -363
  473. data/lib/google/api_client/discovery/resource.rb +0 -156
  474. data/lib/google/api_client/discovery/schema.rb +0 -117
  475. data/lib/google/api_client/environment.rb +0 -42
  476. data/lib/google/api_client/gzip.rb +0 -28
  477. data/lib/google/api_client/logging.rb +0 -32
  478. data/lib/google/api_client/media.rb +0 -259
  479. data/lib/google/api_client/railtie.rb +0 -18
  480. data/lib/google/api_client/request.rb +0 -350
  481. data/lib/google/api_client/result.rb +0 -255
  482. data/lib/google/api_client/service.rb +0 -233
  483. data/lib/google/api_client/service/batch.rb +0 -110
  484. data/lib/google/api_client/service/request.rb +0 -144
  485. data/lib/google/api_client/service/resource.rb +0 -40
  486. data/lib/google/api_client/service/result.rb +0 -162
  487. data/lib/google/api_client/service/simple_file_store.rb +0 -151
  488. data/lib/google/api_client/service/stub_generator.rb +0 -61
  489. data/spec/google/api_client/batch_spec.rb +0 -248
  490. data/spec/google/api_client/discovery_spec.rb +0 -708
  491. data/spec/google/api_client/gzip_spec.rb +0 -98
  492. data/spec/google/api_client/media_spec.rb +0 -178
  493. data/spec/google/api_client/result_spec.rb +0 -207
  494. data/spec/google/api_client/service_account_spec.rb +0 -169
  495. data/spec/google/api_client/service_spec.rb +0 -618
  496. data/spec/google/api_client/simple_file_store_spec.rb +0 -133
  497. data/spec/google/api_client_spec.rb +0 -352
@@ -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', 'third_party']
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'
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.3.0'
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.5'
28
+ spec.add_runtime_dependency 'thor', '~> 0.19'
29
+ spec.add_runtime_dependency 'httpclient', '~> 2.7'
30
+ spec.add_runtime_dependency 'memoist', '~> 0.11'
43
31
  end
@@ -23,14 +23,17 @@ module Google
23
23
  #
24
24
  # @example
25
25
  #
26
- # client = Google::APIClient.new
27
26
  # flow = Google::APIClient::InstalledAppFlow.new(
28
27
  # :client_id => '691380668085.apps.googleusercontent.com',
29
28
  # :client_secret => '...',
30
29
  # :scope => 'https://www.googleapis.com/auth/drive'
31
30
  # )
32
- # client.authorization = flow.authorize
31
+ # authorization = flow.authorize
32
+ # Drive = Google::Apis::DriveV2
33
+ # drive = Drive::DriveService.new
34
+ # drive.authorization = authorization
33
35
  #
36
+ # @deprecated Use google-auth-library-ruby instead
34
37
  class InstalledAppFlow
35
38
 
36
39
  RESPONSE_BODY = <<-HTML
@@ -83,7 +86,7 @@ module Google
83
86
  #
84
87
  # @return [Signet::OAuth2::Client]
85
88
  # Authorization instance, nil if user cancelled.
86
- def authorize(storage=nil)
89
+ def authorize(storage=nil, options={})
87
90
  auth = @authorization
88
91
 
89
92
  server = WEBrick::HTTPServer.new(
@@ -105,7 +108,7 @@ module Google
105
108
  server.stop
106
109
  end
107
110
 
108
- Launchy.open(auth.authorization_uri.to_s)
111
+ Launchy.open(auth.authorization_uri(options).to_s)
109
112
  server.start
110
113
  ensure
111
114
  server.shutdown
@@ -123,4 +126,3 @@ module Google
123
126
 
124
127
  end
125
128
  end
126
-
@@ -18,6 +18,7 @@ module Google
18
18
  # Helper for loading keys from the PKCS12 files downloaded when
19
19
  # setting up service accounts at the APIs Console.
20
20
  #
21
+ # @deprecated Use google-auth-library-ruby instead
21
22
  module KeyUtils
22
23
  ##
23
24
  # Loads a key from PKCS12 file, assuming a single private key
@@ -21,6 +21,7 @@ module Google
21
21
  # JSON serialized file. Meant to resemble the serialized format
22
22
  # http://google-api-python-client.googlecode.com/hg/docs/epy/oauth2client.file.Storage-class.html
23
23
  #
24
+ # @deprecated Use google-auth-library-ruby instead
24
25
  class Storage
25
26
 
26
27
  AUTHORIZATION_URI = 'https://accounts.google.com/o/oauth2/auth'
@@ -35,7 +36,8 @@ module Google
35
36
  ##
36
37
  # Initializes the Storage object.
37
38
  #
38
- # @params [Object] Storage object
39
+ # @param [Object] store
40
+ # Storage object
39
41
  def initialize(store)
40
42
  @store= store
41
43
  @authorization = nil
@@ -44,7 +46,7 @@ module Google
44
46
  ##
45
47
  # Write the credentials to the specified store.
46
48
  #
47
- # @params [Signet::OAuth2::Client] authorization
49
+ # @param [Signet::OAuth2::Client] authorization
48
50
  # Optional authorization instance. If not provided, the authorization
49
51
  # already associated with this instance will be written.
50
52
  def write_credentials(authorization=nil)
@@ -21,6 +21,7 @@ module Google
21
21
  # JSON serialized file. Meant to resemble the serialized format
22
22
  # http://google-api-python-client.googlecode.com/hg/docs/epy/oauth2client.file.Storage-class.html
23
23
  #
24
+ # @deprecated Use google-auth-library-ruby instead
24
25
  class FileStore
25
26
 
26
27
  attr_accessor :path
@@ -45,9 +46,7 @@ module Google
45
46
  ##
46
47
  # Write the credentials to the specified file.
47
48
  #
48
- # @param [Signet::OAuth2::Client] authorization
49
- # Optional authorization instance. If not provided, the authorization
50
- # already associated with this instance will be written.
49
+ # @param [Hash] credentials_hash
51
50
  def write_credentials(credentials_hash)
52
51
  open(self.path, 'w+') do |f|
53
52
  f.write(credentials_hash.to_json)
@@ -16,6 +16,7 @@ require 'json'
16
16
 
17
17
  module Google
18
18
  class APIClient
19
+ # @deprecated Use google-auth-library-ruby instead
19
20
  class RedisStore
20
21
 
21
22
  DEFAULT_REDIS_CREDENTIALS_KEY = "google_api_credentials"
@@ -25,7 +26,10 @@ module Google
25
26
  ##
26
27
  # Initializes the RedisStore object.
27
28
  #
28
- # @params [Object] Redis instance
29
+ # @param [Object] redis
30
+ # Redis instance
31
+ # @param [Object] key
32
+ # Optional key to store credentials under. Defaults to 'google_api_credentials'
29
33
  def initialize(redis, key = nil)
30
34
  @redis= redis
31
35
  @redis_credentials_key = key
@@ -33,6 +37,7 @@ module Google
33
37
 
34
38
  ##
35
39
  # Attempt to read in credentials from redis.
40
+ # @return [Hash]
36
41
  def load_credentials
37
42
  credentials = redis.get redis_credentials_key
38
43
  JSON.parse(credentials) if credentials
@@ -45,7 +50,7 @@ module Google
45
50
  ##
46
51
  # Write the credentials to redis.
47
52
  #
48
- # @params [Hash] credentials
53
+ # @param [Hash] credentials_hash
49
54
  def write_credentials(credentials_hash)
50
55
  redis.set(redis_credentials_key, credentials_hash.to_json)
51
56
  end
@@ -23,7 +23,7 @@ module Google
23
23
  # inspired by the Google API Python client.
24
24
  #
25
25
  # @see https://developers.google.com/api-client-library/python/guide/aaa_client_secrets
26
- #
26
+ # @deprecated Use google-auth-library-ruby instead
27
27
  # @example
28
28
  # {
29
29
  # "web": {
@@ -46,7 +46,6 @@ module Google
46
46
  # }
47
47
  # }
48
48
  class ClientSecrets
49
-
50
49
  ##
51
50
  # Reads client configuration from a file
52
51
  #
@@ -77,7 +76,7 @@ module Google
77
76
  end
78
77
 
79
78
  ##
80
- # Intialize OAuth client settings.
79
+ # Initialize OAuth client settings.
81
80
  #
82
81
  # @param [Hash] options
83
82
  # Parsed client secrets files
@@ -122,7 +121,7 @@ module Google
122
121
  def to_json
123
122
  return MultiJson.dump(to_hash)
124
123
  end
125
-
124
+
126
125
  def to_hash
127
126
  {
128
127
  self.flow => ({
@@ -147,7 +146,7 @@ module Google
147
146
  end
148
147
  }
149
148
  end
150
-
149
+
151
150
  def to_authorization
152
151
  gem 'signet', '>= 0.4.0'
153
152
  require 'signet/oauth_2/client'
@@ -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,135 @@
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 [Hurley::Header] header
83
+ # HTTP response headers
84
+ # @param [String] body
85
+ # HTTP response body
86
+ # @param [String] message
87
+ # Error message text
88
+ # @return [void]
89
+ # @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
90
+ # @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
91
+ # @raise [Google::Apis::AuthorizationError] Authorization is required
92
+ def check_status(status, header = nil, body = nil, message = nil)
93
+ case status
94
+ when 400, 402...500
95
+ error = parse_error(body)
96
+ if error
97
+ message = sprintf('%s: %s', error['reason'], error['message'])
98
+ raise Google::Apis::RateLimitError.new(message,
99
+ status_code: status,
100
+ header: header,
101
+ body: body) if RATE_LIMIT_ERRORS.include?(error['reason'])
102
+ end
103
+ super(status, header, body, message)
104
+ else
105
+ super(status, header, body, message)
106
+ end
107
+ end
108
+
109
+ private
110
+
111
+ # Attempt to parse a JSON error message, returning the first found error
112
+ # @param [String] body
113
+ # HTTP response body
114
+ # @return [Hash]
115
+ def parse_error(body)
116
+ hash = MultiJson.load(body)
117
+ hash['error']['errors'].first
118
+ rescue
119
+ nil
120
+ end
121
+
122
+ # Convert field names from ruby conventions to original names in JSON
123
+ #
124
+ # @param [String] fields
125
+ # Value of 'fields' param
126
+ # @return [String]
127
+ # Updated header value
128
+ def normalize_fields_param(fields)
129
+ # TODO: Generate map of parameter names during code gen. Small possibility that camelization fails
130
+ fields.gsub(/:/, '').gsub(/[\w_]+/) { |str| ActiveSupport::Inflector.camelize(str, false) }
131
+ end
132
+ end
133
+ end
134
+ end
135
+ end
@@ -0,0 +1,317 @@
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/core/http_client_adapter'
23
+ require 'google/apis/options'
24
+ require 'googleauth'
25
+ require 'hurley'
26
+ require 'hurley/addressable'
27
+
28
+ module Google
29
+ module Apis
30
+ module Core
31
+ # Base service for all APIs. Not to be used directly.
32
+ #
33
+ class BaseService
34
+ # Root URL (host/port) for the API
35
+ # @return [Addressable::URI]
36
+ attr_accessor :root_url
37
+
38
+ # Additional path prefix for all API methods
39
+ # @return [Addressable::URI]
40
+ attr_accessor :base_path
41
+
42
+ # Alternate path prefix for media uploads
43
+ # @return [Addressable::URI]
44
+ attr_accessor :upload_path
45
+
46
+ # Alternate path prefix for all batch methods
47
+ # @return [Addressable::URI]
48
+ attr_accessor :batch_path
49
+
50
+ # HTTP client
51
+ # @return [Hurley::Client]
52
+ attr_accessor :client
53
+
54
+ # General settings
55
+ # @return [Google::Apis::ClientOptions]
56
+ attr_accessor :client_options
57
+
58
+ # Default options for all requests
59
+ # @return [Google::Apis::RequestOptions]
60
+ attr_accessor :request_options
61
+
62
+ # @param [String,Addressable::URI] root_url
63
+ # Root URL for the API
64
+ # @param [String,Addressable::URI] base_path
65
+ # Additional path prefix for all API methods
66
+ # @api private
67
+ def initialize(root_url, base_path)
68
+ self.root_url = root_url
69
+ self.base_path = base_path
70
+ self.upload_path = "upload/#{base_path}"
71
+ self.batch_path = 'batch'
72
+ self.client_options = Google::Apis::ClientOptions.default.dup
73
+ self.request_options = Google::Apis::RequestOptions.default.dup
74
+ end
75
+
76
+ # @!attribute [rw] authorization
77
+ # @return [Signet::OAuth2::Client]
78
+ # OAuth2 credentials
79
+ def authorization=(authorization)
80
+ request_options.authorization = authorization
81
+ end
82
+
83
+ def authorization
84
+ request_options.authorization
85
+ end
86
+
87
+ # TODO: with(options) method
88
+
89
+ # Perform a batch request. Calls made within the block are sent in a single network
90
+ # request to the server.
91
+ #
92
+ # @example
93
+ # service.batch do |service|
94
+ # service.get_item(id1) do |res, err|
95
+ # # process response for 1st call
96
+ # end
97
+ # # ...
98
+ # service.get_item(idN) do |res, err|
99
+ # # process response for Nth call
100
+ # end
101
+ # end
102
+ #
103
+ # @param [Hash, Google::Apis::RequestOptions] options
104
+ # Request-specific options
105
+ # @yield [self]
106
+ # @return [void]
107
+ def batch(options = nil)
108
+ batch_command = BatchCommand.new(:post, Addressable::URI.parse(root_url + batch_path))
109
+ batch_command.options = request_options.merge(options)
110
+ apply_command_defaults(batch_command)
111
+ begin
112
+ Thread.current[:google_api_batch] = batch_command
113
+ yield self
114
+ ensure
115
+ Thread.current[:google_api_batch] = nil
116
+ end
117
+ batch_command.execute(client)
118
+ end
119
+
120
+ # Perform a batch upload request. Calls made within the block are sent in a single network
121
+ # request to the server. Batch uploads are useful for uploading multiple small files. For larger
122
+ # files, use single requests which use a resumable upload protocol.
123
+ #
124
+ # @example
125
+ # service.batch do |service|
126
+ # service.insert_item(upload_source: 'file1.txt') do |res, err|
127
+ # # process response for 1st call
128
+ # end
129
+ # # ...
130
+ # service.insert_item(upload_source: 'fileN.txt') do |res, err|
131
+ # # process response for Nth call
132
+ # end
133
+ # end
134
+ #
135
+ # @param [Hash, Google::Apis::RequestOptions] options
136
+ # Request-specific options
137
+ # @yield [self]
138
+ # @return [void]
139
+ def batch_upload(options = nil)
140
+ batch_command = BatchUploadCommand.new(:put, Addressable::URI.parse(root_url + upload_path))
141
+ batch_command.options = request_options.merge(options)
142
+ apply_command_defaults(batch_command)
143
+ begin
144
+ Thread.current[:google_api_batch] = batch_command
145
+ yield self
146
+ ensure
147
+ Thread.current[:google_api_batch] = nil
148
+ end
149
+ batch_command.execute(client)
150
+ end
151
+
152
+ # Get the current HTTP client
153
+ # @return [Hurley::Client]
154
+ def client
155
+ @client ||= new_client
156
+ end
157
+
158
+
159
+ # Simple escape hatch for making API requests directly to a given
160
+ # URL. This is not intended to be used as a generic HTTP client
161
+ # and should be used only in cases where no service method exists
162
+ # (e.g. fetching an export link for a Google Drive file.)
163
+ #
164
+ # @param [Symbol] method
165
+ # HTTP method as symbol (e.g. :get, :post, :put, ...)
166
+ # @param [String] url
167
+ # URL to call
168
+ # @param [Hash<String,String>] params
169
+ # Optional hash of query parameters
170
+ # @param [#read] body
171
+ # Optional body for POST/PUT
172
+ # @param [IO, String] download_dest
173
+ # IO stream or filename to receive content download
174
+ # @param [Google::Apis::RequestOptions] options
175
+ # Request-specific options
176
+ #
177
+ # @yield [result, err] Result & error if block supplied
178
+ # @yieldparam result [String] HTTP response body
179
+ # @yieldparam err [StandardError] error object if request failed
180
+ #
181
+ # @return [String] HTTP response body
182
+ def http(method, url, params: nil, body: nil, download_dest: nil, options: nil, &block)
183
+ if download_dest
184
+ command = DownloadCommand.new(method, url, body: body)
185
+ else
186
+ command = HttpCommand.new(method, url, body: body)
187
+ end
188
+ command.options = request_options.merge(options)
189
+ apply_command_defaults(command)
190
+ command.query.merge(Hash(params))
191
+ execute_or_queue_command(command, &block)
192
+ end
193
+
194
+ protected
195
+
196
+ # Create a new upload command.
197
+ #
198
+ # @param [symbol] method
199
+ # HTTP method for uploading (typically :put or :post)
200
+ # @param [String] path
201
+ # Additional path to upload endpoint, appended to API base path
202
+ # @param [Hash, Google::Apis::RequestOptions] options
203
+ # Request-specific options
204
+ # @return [Google::Apis::Core::UploadCommand]
205
+ def make_upload_command(method, path, options)
206
+ template = Addressable::Template.new(root_url + upload_path + path)
207
+ if batch?
208
+ command = MultipartUploadCommand.new(method, template)
209
+ else
210
+ command = ResumableUploadCommand.new(method, template)
211
+ end
212
+ command.options = request_options.merge(options)
213
+ apply_command_defaults(command)
214
+ command
215
+ end
216
+
217
+ # Create a new download command.
218
+ #
219
+ # @param [symbol] method
220
+ # HTTP method for uploading (typically :get)
221
+ # @param [String] path
222
+ # Additional path to download endpoint, appended to API base path
223
+ # @param [Hash, Google::Apis::RequestOptions] options
224
+ # Request-specific options
225
+ # @return [Google::Apis::Core::DownloadCommand]
226
+ def make_download_command(method, path, options)
227
+ template = Addressable::Template.new(root_url + base_path + path)
228
+ command = DownloadCommand.new(method, template)
229
+ command.options = request_options.merge(options)
230
+ command.query['alt'] = 'media'
231
+ apply_command_defaults(command)
232
+ command
233
+ end
234
+
235
+ # Create a new command.
236
+ #
237
+ # @param [symbol] method
238
+ # HTTP method (:get, :post, :delete, etc...)
239
+ # @param [String] path
240
+ # Additional path, appended to API base path
241
+ # @param [Hash, Google::Apis::RequestOptions] options
242
+ # Request-specific options
243
+ # @return [Google::Apis::Core::DownloadCommand]
244
+ def make_simple_command(method, path, options)
245
+ template = Addressable::Template.new(root_url + base_path + path)
246
+ command = ApiCommand.new(method, template)
247
+ command.options = request_options.merge(options)
248
+ apply_command_defaults(command)
249
+ command
250
+ end
251
+
252
+ # Execute the request. If a batch is in progress, the request is added to the batch instead.
253
+ #
254
+ # @param [Google::Apis::Core::HttpCommand] command
255
+ # Command to execute
256
+ # @return [Object] response object if command executed and no callback supplied
257
+ # @yield [result, err] Result & error if block supplied
258
+ # @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
259
+ # @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
260
+ # @raise [Google::Apis::AuthorizationError] Authorization is required
261
+ def execute_or_queue_command(command, &callback)
262
+ batch_command = current_batch
263
+ if batch_command
264
+ batch_command.add(command, &callback)
265
+ nil
266
+ else
267
+ command.execute(client, &callback)
268
+ end
269
+ end
270
+
271
+ # Update commands with service-specific options. To be implemented by subclasses
272
+ # @param [Google::Apis::Core::HttpCommand] _command
273
+ def apply_command_defaults(_command)
274
+ end
275
+
276
+ private
277
+
278
+ # Get the current batch context
279
+ #
280
+ # @return [Google:Apis::Core::BatchRequest]
281
+ def current_batch
282
+ Thread.current[:google_api_batch]
283
+ end
284
+
285
+ # Check if a batch is in progress
286
+ # @return [Boolean]
287
+ def batch?
288
+ !current_batch.nil?
289
+ end
290
+
291
+ # Create a new HTTP client
292
+ # @return [Hurley::Client]
293
+ def new_client
294
+ client = Hurley::Client.new
295
+ client.connection = Google::Apis::Core::HttpClientAdapter.new unless client_options.use_net_http
296
+ client.request_options.timeout = request_options.timeout_sec
297
+ client.request_options.open_timeout = request_options.open_timeout_sec
298
+ client.request_options.proxy = client_options.proxy_url
299
+ client.request_options.query_class = Hurley::Query::Flat
300
+ client.ssl_options.ca_file = File.join(Google::Apis::ROOT, 'lib', 'cacerts.pem')
301
+ client.header[:user_agent] = user_agent
302
+ client
303
+ end
304
+
305
+ # Build the user agent header
306
+ # @return [String]
307
+ def user_agent
308
+ sprintf('%s/%s google-api-ruby-client/%s %s (gzip)',
309
+ client_options.application_name,
310
+ client_options.application_version,
311
+ Google::Apis::VERSION,
312
+ Google::Apis::OS_VERSION)
313
+ end
314
+ end
315
+ end
316
+ end
317
+ end