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
@@ -0,0 +1,312 @@
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/options'
18
+ require 'google/apis/errors'
19
+ require 'retriable'
20
+ require 'hurley'
21
+ require 'hurley/addressable'
22
+ require 'hurley_patches'
23
+ require 'google/apis/core/logging'
24
+ require 'pp'
25
+
26
+ module Google
27
+ module Apis
28
+ module Core
29
+ # Command for HTTP request/response.
30
+ class HttpCommand
31
+ include Logging
32
+
33
+ RETRIABLE_ERRORS = [Google::Apis::ServerError, Google::Apis::RateLimitError, Google::Apis::TransmissionError]
34
+
35
+ # Request options
36
+ # @return [Google::Apis::RequestOptions]
37
+ attr_accessor :options
38
+
39
+ # HTTP request URL
40
+ # @return [String, Addressable::URI]
41
+ attr_accessor :url
42
+
43
+ # HTTP headers
44
+ # @return [Hurley::Header]
45
+ attr_accessor :header
46
+
47
+ # Request body
48
+ # @return [#read]
49
+ attr_accessor :body
50
+
51
+ # HTTP method
52
+ # @return [symbol]
53
+ attr_accessor :method
54
+
55
+ # HTTP Client
56
+ # @return [Hurley::Client]
57
+ attr_accessor :connection
58
+
59
+ # Query params
60
+ # @return [Hash]
61
+ attr_accessor :query
62
+
63
+ # Path params for URL Template
64
+ # @return [Hash]
65
+ attr_accessor :params
66
+
67
+ # @param [symbol] method
68
+ # HTTP method
69
+ # @param [String,Addressable::URI, Addressable::Template] url
70
+ # HTTP URL or template
71
+ # @param [String, #read] body
72
+ # Request body
73
+ def initialize(method, url, body: nil)
74
+ self.options = Google::Apis::RequestOptions.default.dup
75
+ self.url = url
76
+ self.url = Addressable::Template.new(url) if url.is_a?(String)
77
+ self.method = method
78
+ self.header = Hurley::Header.new
79
+ self.body = body
80
+ self.query = {}
81
+ self.params = {}
82
+ end
83
+
84
+ # Execute the command, retrying as necessary
85
+ #
86
+ # @param [Hurley::Client] client
87
+ # HTTP client
88
+ # @yield [result, err] Result or error if block supplied
89
+ # @return [Object]
90
+ # @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
91
+ # @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
92
+ # @raise [Google::Apis::AuthorizationError] Authorization is required
93
+ def execute(client)
94
+ prepare!
95
+ begin
96
+ Retriable.retriable tries: options.retries + 1,
97
+ base_interval: 1,
98
+ multiplier: 2,
99
+ on: RETRIABLE_ERRORS do |try|
100
+ # This 2nd level retriable only catches auth errors, and supports 1 retry, which allows
101
+ # auth to be re-attempted without having to retry all sorts of other failures like
102
+ # NotFound, etc
103
+ auth_tries = (try == 1 && authorization_refreshable? ? 2 : 1)
104
+ Retriable.retriable tries: auth_tries,
105
+ on: [Google::Apis::AuthorizationError],
106
+ on_retry: proc { |*| refresh_authorization } do
107
+ execute_once(client).tap do |result|
108
+ if block_given?
109
+ yield result, nil
110
+ end
111
+ end
112
+ end
113
+ end
114
+ rescue => e
115
+ if block_given?
116
+ yield nil, e
117
+ else
118
+ raise e
119
+ end
120
+ end
121
+ ensure
122
+ release!
123
+ end
124
+
125
+ # Refresh the authorization authorization after a 401 error
126
+ #
127
+ # @private
128
+ # @return [void]
129
+ def refresh_authorization
130
+ # Handled implicitly by auth lib, here in case need to override
131
+ logger.debug('Retrying after authentication failure')
132
+ end
133
+
134
+ # Check if attached credentials can be automatically refreshed
135
+ # @return [Boolean]
136
+ def authorization_refreshable?
137
+ options.authorization.respond_to?(:apply!)
138
+ end
139
+
140
+ # Prepare the request (e.g. calculate headers, serialize data, etc) before sending
141
+ #
142
+ # @private
143
+ # @return [void]
144
+ def prepare!
145
+ header.update(options.header) if options && options.header
146
+ self.url = url.expand(params) if url.is_a?(Addressable::Template)
147
+ url.query_values = query.merge(url.query_values || {})
148
+ end
149
+
150
+ # Release any resources used by this command
151
+ # @private
152
+ # @return [void]
153
+ def release!
154
+ end
155
+
156
+ # Check the response and either decode body or raise error
157
+ #
158
+ # @param [Fixnum] status
159
+ # HTTP status code of response
160
+ # @param [Hurley::Header] header
161
+ # Response headers
162
+ # @param [String, #read] body
163
+ # Response body
164
+ # @return [Object]
165
+ # Response object
166
+ # @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
167
+ # @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
168
+ # @raise [Google::Apis::AuthorizationError] Authorization is required
169
+ def process_response(status, header, body)
170
+ check_status(status, header, body)
171
+ decode_response_body(header[:content_type], body)
172
+ end
173
+
174
+ # Check the response and raise error if needed
175
+ #
176
+ # @param [Fixnum] status
177
+ # HTTP status code of response
178
+ # @param
179
+ # @param [Hurley::Header] header
180
+ # HTTP response headers
181
+ # @param [String] body
182
+ # HTTP response body
183
+ # @param [String] message
184
+ # Error message text
185
+ # @return [void]
186
+ # @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
187
+ # @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
188
+ # @raise [Google::Apis::AuthorizationError] Authorization is required
189
+ def check_status(status, header = nil, body = nil, message = nil)
190
+ # TODO: 304 Not Modified depends on context...
191
+ case status
192
+ when 200...300
193
+ nil
194
+ when 301, 302, 303, 307
195
+ message ||= sprintf('Redirect to %s', header[:location])
196
+ raise Google::Apis::RedirectError.new(message, status_code: status, header: header, body: body)
197
+ when 401
198
+ message ||= 'Unauthorized'
199
+ raise Google::Apis::AuthorizationError.new(message, status_code: status, header: header, body: body)
200
+ when 304, 400, 402...500
201
+ message ||= 'Invalid request'
202
+ raise Google::Apis::ClientError.new(message, status_code: status, header: header, body: body)
203
+ when 500...600
204
+ message ||= 'Server error'
205
+ raise Google::Apis::ServerError.new(message, status_code: status, header: header, body: body)
206
+ else
207
+ logger.warn(sprintf('Encountered unexpected status code %s', status))
208
+ message ||= 'Unknown error'
209
+ raise Google::Apis::TransmissionError.new(message, status_code: status, header: header, body: body)
210
+ end
211
+ end
212
+
213
+ # Process the actual response body. Intended to be overridden by subclasses
214
+ #
215
+ # @param [String] _content_type
216
+ # Content type of body
217
+ # @param [String, #read] body
218
+ # Response body
219
+ # @return [Object]
220
+ def decode_response_body(_content_type, body)
221
+ body
222
+ end
223
+
224
+ # Process a success response
225
+ # @param [Object] result
226
+ # Result object
227
+ # @return [Object] result if no block given
228
+ # @yield [result, nil] if block given
229
+ def success(result, &block)
230
+ logger.debug { sprintf('Success - %s', PP.pp(result, '')) }
231
+ block.call(result, nil) if block_given?
232
+ result
233
+ end
234
+
235
+ # Process an error response
236
+ # @param [StandardError] err
237
+ # Error object
238
+ # @param [Boolean] rethrow
239
+ # True if error should be raised again after handling
240
+ # @return [void]
241
+ # @yield [nil, err] if block given
242
+ # @raise [StandardError] if no block
243
+ def error(err, rethrow: false, &block)
244
+ logger.debug { sprintf('Error - %s', PP.pp(err, '')) }
245
+ err = Google::Apis::TransmissionError.new(err) if err.is_a?(Hurley::ClientError)
246
+ block.call(nil, err) if block_given?
247
+ fail err if rethrow || block.nil?
248
+ end
249
+
250
+ # Execute the command once.
251
+ #
252
+ # @private
253
+ # @param [Hurley::Client] client
254
+ # HTTP client
255
+ # @return [Object]
256
+ # @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
257
+ # @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
258
+ # @raise [Google::Apis::AuthorizationError] Authorization is required
259
+ def execute_once(client)
260
+ body.rewind if body.respond_to?(:rewind)
261
+ begin
262
+ logger.debug { sprintf('Sending HTTP %s %s', method, url) }
263
+ response = client.send(method, url, body) do |req|
264
+ # Temporary workaround for Hurley bug where the connection preference
265
+ # is ignored and it uses nested anyway
266
+ req.url.query_class = Hurley::Query::Flat
267
+ query.each do | k, v|
268
+ req.url.query[k] = normalize_query_value(v)
269
+ end
270
+ # End workaround
271
+ apply_request_options(req)
272
+ end
273
+ logger.debug { response.status_code }
274
+ logger.debug { response.inspect }
275
+ response = process_response(response.status_code, response.header, response.body)
276
+ success(response)
277
+ rescue => e
278
+ logger.debug { sprintf('Caught error %s', e) }
279
+ error(e, rethrow: true)
280
+ end
281
+ end
282
+
283
+ # Update the request with any specified options.
284
+ # @param [Hurley::Request] req
285
+ # HTTP request
286
+ # @return [void]
287
+ def apply_request_options(req)
288
+ if options.authorization.respond_to?(:apply!)
289
+ options.authorization.apply!(req.header)
290
+ elsif options.authorization.is_a?(String)
291
+ req.header[:authorization] = sprintf('Bearer %s', options.authorization)
292
+ end
293
+ req.header.update(header)
294
+ req.options.timeout = options.timeout_sec
295
+ end
296
+
297
+ private
298
+
299
+ def normalize_query_value(v)
300
+ case v
301
+ when Array
302
+ v.map { |v2| normalize_query_value(v2) }
303
+ when nil
304
+ nil
305
+ else
306
+ v.to_s
307
+ end
308
+ end
309
+ end
310
+ end
311
+ end
312
+ end
@@ -0,0 +1,127 @@
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 'representable/json'
16
+ require 'representable/json/hash'
17
+ require 'base64'
18
+ require 'date'
19
+
20
+ module Google
21
+ module Apis
22
+ module Core
23
+ # Support for serializing hashes + propery value/nil/unset tracking
24
+ # To be included in representers as a feature.
25
+ # @private
26
+ module JsonRepresentationSupport
27
+ def self.included(base)
28
+ base.extend(JsonSupport)
29
+ end
30
+
31
+ # @private
32
+ module JsonSupport
33
+ # Returns a customized getter function for Representable. Allows
34
+ # indifferent hash/attribute access.
35
+ #
36
+ # @param [String] name Property name
37
+ # @return [Proc]
38
+ def getter_fn(name)
39
+ ivar_name = "@#{name}".to_sym
40
+ lambda do |_|
41
+ if respond_to?(:[])
42
+ self[name] || instance_variable_get(ivar_name)
43
+ else
44
+ instance_variable_get(ivar_name)
45
+ end
46
+ end
47
+ end
48
+
49
+ # Returns a customized function for Representable that checks whether or not
50
+ # an attribute should be serialized. Allows proper patch semantics by distinguishing
51
+ # between nil & unset values
52
+ #
53
+ # @param [String] name Property name
54
+ # @return [Proc]
55
+ def if_fn(name)
56
+ ivar_name = "@#{name}".to_sym
57
+ lambda do |opts|
58
+ if opts[:skip_undefined]
59
+ if respond_to?(:key?)
60
+ self.key?(name) || instance_variable_defined?(ivar_name)
61
+ else
62
+ instance_variable_defined?(ivar_name)
63
+ end
64
+ else
65
+ true
66
+ end
67
+ end
68
+ end
69
+
70
+ def set_default_options(name, options)
71
+ if options[:base64]
72
+ options[:render_filter] = ->(value, _doc, *_args) { Base64.urlsafe_encode64(value) }
73
+ options[:parse_filter] = ->(fragment, _doc, *_args) { Base64.urlsafe_decode64(fragment) }
74
+ end
75
+ if options[:type] == DateTime
76
+ options[:render_filter] = ->(value, _doc, *_args) { value.is_a?(DateTime) ? value.rfc3339(3) : value.to_s }
77
+ options[:parse_filter] = ->(fragment, _doc, *_args) { DateTime.parse(fragment) }
78
+ end
79
+
80
+ options[:render_nil] = true
81
+ options[:getter] = getter_fn(name)
82
+ options[:if] = if_fn(name)
83
+ end
84
+
85
+ # Define a single value property
86
+ #
87
+ # @param [String] name
88
+ # Property name
89
+ # @param [Hash] options
90
+ def property(name, options = {})
91
+ set_default_options(name, options)
92
+ super(name, options)
93
+ end
94
+
95
+ # Define a collection property
96
+ #
97
+ # @param [String] name
98
+ # Property name
99
+ # @param [Hash] options
100
+ def collection(name, options = {})
101
+ set_default_options(name, options)
102
+ super(name, options)
103
+ end
104
+
105
+ # Define a hash property
106
+ #
107
+ # @param [String] name
108
+ # Property name
109
+ # @param [Hash] options
110
+ def hash(name = nil, options = nil)
111
+ return super() unless name # Allow Object.hash
112
+ set_default_options(name, options)
113
+ super(name, options)
114
+ end
115
+ end
116
+ end
117
+
118
+ # Base decorator for JSON representers
119
+ #
120
+ # @see https://github.com/apotonick/representable
121
+ class JsonRepresentation < Representable::Decorator
122
+ include Representable::JSON
123
+ feature JsonRepresentationSupport
124
+ end
125
+ end
126
+ end
127
+ end
@@ -1,4 +1,4 @@
1
- # Copyright 2010 Google Inc.
1
+ # Copyright 2015 Google Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -12,15 +12,19 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
+ require 'google/apis'
15
16
 
16
17
  module Google
17
- class APIClient
18
- module VERSION
19
- MAJOR = 0
20
- MINOR = 8
21
- TINY = 3
22
- PATCH = nil
23
- STRING = [MAJOR, MINOR, TINY, PATCH].compact.join('.')
18
+ module Apis
19
+ module Core
20
+ # Logging support
21
+ module Logging
22
+ # Get the logger instance
23
+ # @return [Logger]
24
+ def logger
25
+ Google::Apis.logger
26
+ end
27
+ end
24
28
  end
25
29
  end
26
30
  end
@@ -0,0 +1,187 @@
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 'hurley'
16
+
17
+ module Google
18
+ module Apis
19
+ module Core
20
+ # Part of a multipart request for holding JSON data
21
+ #
22
+ # @private
23
+ class JsonPart
24
+ include Hurley::Multipart::Part
25
+
26
+ # @return [Fixnum]
27
+ # Length of part
28
+ attr_reader :length
29
+
30
+ # @param [String] boundary
31
+ # Multipart boundary
32
+ # @param [String] value
33
+ # JSON content
34
+ def initialize(boundary, value, header = {})
35
+ @part = build_part(boundary, value)
36
+ @length = @part.bytesize
37
+ @io = StringIO.new(@part)
38
+ end
39
+
40
+ private
41
+
42
+ # Format the part
43
+ #
44
+ # @param [String] boundary
45
+ # Multipart boundary
46
+ # @param [String] value
47
+ # JSON content
48
+ # @return [String]
49
+ def build_part(boundary, value)
50
+ part = ''
51
+ part << "--#{boundary}\r\n"
52
+ part << "Content-Type: application/json\r\n"
53
+ part << "\r\n"
54
+ part << "#{value}\r\n"
55
+ end
56
+ end
57
+
58
+ # Part of a multipart request for holding arbitrary content. Modified
59
+ # from Hurley::Multipart::FilePart to remove Content-Disposition
60
+ #
61
+ # @private
62
+ class FilePart
63
+ include Hurley::Multipart::Part
64
+
65
+ # @return [Fixnum]
66
+ # Length of part
67
+ attr_reader :length
68
+
69
+ # @param [String] boundary
70
+ # Multipart boundary
71
+ # @param [Google::Apis::Core::UploadIO] io
72
+ # IO stream
73
+ # @param [Hash] header
74
+ # Additional headers
75
+ def initialize(boundary, io, header = {})
76
+ file_length = io.respond_to?(:length) ? io.length : File.size(io.local_path)
77
+
78
+ @head = build_head(boundary, io.content_type, file_length,
79
+ io.respond_to?(:opts) ? io.opts.merge(header) : header)
80
+
81
+ @length = @head.bytesize + file_length + FOOT.length
82
+ @io = Hurley::CompositeReadIO.new(@length, StringIO.new(@head), io, StringIO.new(FOOT))
83
+ end
84
+
85
+ private
86
+
87
+ # Construct the header for the part
88
+ #
89
+ # @param [String] boundary
90
+ # Multipart boundary
91
+ # @param [String] type
92
+ # Content type for the part
93
+ # @param [Fixnum] content_len
94
+ # Length of the part
95
+ # @param [Hash] header
96
+ # Headers for the part
97
+ def build_head(boundary, type, content_len, header)
98
+ content_id = ''
99
+ if header[:content_id]
100
+ content_id = sprintf(CID_FORMAT, header[:content_id])
101
+ end
102
+ sprintf(HEAD_FORMAT,
103
+ boundary,
104
+ content_len.to_i,
105
+ content_id,
106
+ header[:content_type] || type,
107
+ header[:content_transfer_encoding] || DEFAULT_TR_ENCODING)
108
+ end
109
+
110
+ DEFAULT_TR_ENCODING = 'binary'.freeze
111
+ FOOT = "\r\n".freeze
112
+ CID_FORMAT = "Content-ID: %s\r\n"
113
+ HEAD_FORMAT = <<-END
114
+ --%s\r
115
+ Content-Length: %d\r
116
+ %sContent-Type: %s\r
117
+ Content-Transfer-Encoding: %s\r
118
+ \r
119
+ END
120
+ end
121
+
122
+ # Helper for building multipart requests
123
+ class Multipart
124
+ MULTIPART_RELATED = 'multipart/related'
125
+ DEFAULT_BOUNDARY = 'RubyApiClientMultiPart'
126
+
127
+ # @return [String]
128
+ # Content type header
129
+ attr_reader :content_type
130
+
131
+ # @param [String] content_type
132
+ # Content type for the multipart request
133
+ # @param [String] boundary
134
+ # Part delimiter
135
+
136
+ def initialize(content_type: MULTIPART_RELATED, boundary: nil)
137
+ @parts = []
138
+ @boundary = boundary || DEFAULT_BOUNDARY
139
+ @content_type = "#{content_type}; boundary=#{boundary}"
140
+ end
141
+
142
+ # Append JSON data part
143
+ #
144
+ # @param [String] body
145
+ # JSON text
146
+ # @param [String] content_id
147
+ # Optional unique ID of this part
148
+ # @return [self]
149
+ def add_json(body, content_id: nil)
150
+ header = { :content_id => content_id }
151
+ @parts << Google::Apis::Core::JsonPart.new(@boundary, body, header)
152
+ self
153
+ end
154
+
155
+ # Append arbitrary data as a part
156
+ #
157
+ # @param [Google::Apis::Core::UploadIO] upload_io
158
+ # IO stream
159
+ # @param [String] content_id
160
+ # Optional unique ID of this part
161
+ # @return [self]
162
+ def add_upload(upload_io, content_id: nil)
163
+ header = { :content_id => content_id }
164
+ @parts << Google::Apis::Core::FilePart.new(@boundary,
165
+ upload_io,
166
+ header)
167
+ self
168
+ end
169
+
170
+ # Assemble the multipart requests
171
+ #
172
+ # @return [IO]
173
+ # IO stream
174
+ def assemble
175
+ @parts << Hurley::Multipart::EpiloguePart.new(@boundary)
176
+ ios = []
177
+ len = 0
178
+ @parts.each do |part|
179
+ len += part.length
180
+ ios << part.to_io
181
+ end
182
+ Hurley::CompositeReadIO.new(len, *ios)
183
+ end
184
+ end
185
+ end
186
+ end
187
+ end