google-api-client 0.8.7 → 0.9.pre1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (397) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +20 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +7 -0
  5. data/.rubocop_todo.yml +63 -0
  6. data/.travis.yml +21 -0
  7. data/.yardopts +12 -0
  8. data/CHANGELOG.md +6 -3
  9. data/CONTRIBUTING.md +31 -0
  10. data/Gemfile +28 -2
  11. data/MIGRATING.md +171 -0
  12. data/README.md +158 -150
  13. data/Rakefile +1 -40
  14. data/api_names.yaml +872 -0
  15. data/api_names_out.yaml +20843 -0
  16. data/bin/generate-api +93 -0
  17. data/generated/google/apis/adexchangebuyer_v1_3.rb +35 -0
  18. data/generated/google/apis/adexchangebuyer_v1_3/classes.rb +1124 -0
  19. data/generated/google/apis/adexchangebuyer_v1_3/representations.rb +375 -0
  20. data/generated/google/apis/adexchangebuyer_v1_3/service.rb +893 -0
  21. data/generated/google/apis/adexchangeseller_v2_0.rb +38 -0
  22. data/generated/google/apis/adexchangeseller_v2_0/classes.rb +792 -0
  23. data/generated/google/apis/adexchangeseller_v2_0/representations.rb +309 -0
  24. data/generated/google/apis/adexchangeseller_v2_0/service.rb +682 -0
  25. data/generated/google/apis/admin_directory_v1.rb +89 -0
  26. data/generated/google/apis/admin_directory_v1/classes.rb +2389 -0
  27. data/generated/google/apis/admin_directory_v1/representations.rb +780 -0
  28. data/generated/google/apis/admin_directory_v1/service.rb +2805 -0
  29. data/generated/google/apis/admin_reports_v1.rb +38 -0
  30. data/generated/google/apis/admin_reports_v1/classes.rb +582 -0
  31. data/generated/google/apis/admin_reports_v1/representations.rb +231 -0
  32. data/generated/google/apis/admin_reports_v1/service.rb +341 -0
  33. data/generated/google/apis/adsense_v1_4.rb +38 -0
  34. data/generated/google/apis/adsense_v1_4/classes.rb +1279 -0
  35. data/generated/google/apis/adsense_v1_4/representations.rb +493 -0
  36. data/generated/google/apis/adsense_v1_4/service.rb +1752 -0
  37. data/generated/google/apis/adsensehost_v4_1.rb +35 -0
  38. data/generated/google/apis/adsensehost_v4_1/classes.rb +834 -0
  39. data/generated/google/apis/adsensehost_v4_1/representations.rb +327 -0
  40. data/generated/google/apis/adsensehost_v4_1/service.rb +1190 -0
  41. data/generated/google/apis/analytics_v3.rb +49 -0
  42. data/generated/google/apis/analytics_v3/classes.rb +5113 -0
  43. data/generated/google/apis/analytics_v3/representations.rb +1661 -0
  44. data/generated/google/apis/analytics_v3/service.rb +3600 -0
  45. data/generated/google/apis/androidenterprise_v1.rb +34 -0
  46. data/generated/google/apis/androidenterprise_v1/classes.rb +1162 -0
  47. data/generated/google/apis/androidenterprise_v1/representations.rb +431 -0
  48. data/generated/google/apis/androidenterprise_v1/service.rb +1979 -0
  49. data/generated/google/apis/androidpublisher_v2.rb +34 -0
  50. data/generated/google/apis/androidpublisher_v2/classes.rb +1374 -0
  51. data/generated/google/apis/androidpublisher_v2/representations.rb +630 -0
  52. data/generated/google/apis/androidpublisher_v2/service.rb +2390 -0
  53. data/generated/google/apis/appsactivity_v1.rb +46 -0
  54. data/generated/google/apis/appsactivity_v1/classes.rb +392 -0
  55. data/generated/google/apis/appsactivity_v1/representations.rb +184 -0
  56. data/generated/google/apis/appsactivity_v1/service.rb +129 -0
  57. data/generated/google/apis/appstate_v1.rb +34 -0
  58. data/generated/google/apis/appstate_v1/classes.rb +154 -0
  59. data/generated/google/apis/appstate_v1/representations.rb +79 -0
  60. data/generated/google/apis/appstate_v1/service.rb +265 -0
  61. data/generated/google/apis/autoscaler_v1beta2.rb +38 -0
  62. data/generated/google/apis/autoscaler_v1beta2/classes.rb +747 -0
  63. data/generated/google/apis/autoscaler_v1beta2/representations.rb +281 -0
  64. data/generated/google/apis/autoscaler_v1beta2/service.rb +488 -0
  65. data/generated/google/apis/bigquery_v2.rb +49 -0
  66. data/generated/google/apis/bigquery_v2/classes.rb +2255 -0
  67. data/generated/google/apis/bigquery_v2/representations.rb +754 -0
  68. data/generated/google/apis/bigquery_v2/service.rb +1003 -0
  69. data/generated/google/apis/blogger_v3.rb +37 -0
  70. data/generated/google/apis/blogger_v3/classes.rb +1354 -0
  71. data/generated/google/apis/blogger_v3/representations.rb +562 -0
  72. data/generated/google/apis/blogger_v3/service.rb +1620 -0
  73. data/generated/google/apis/books_v1.rb +34 -0
  74. data/generated/google/apis/books_v1/classes.rb +3515 -0
  75. data/generated/google/apis/books_v1/representations.rb +1361 -0
  76. data/generated/google/apis/books_v1/service.rb +2170 -0
  77. data/generated/google/apis/calendar_v3.rb +37 -0
  78. data/generated/google/apis/calendar_v3/classes.rb +1702 -0
  79. data/generated/google/apis/calendar_v3/representations.rb +566 -0
  80. data/generated/google/apis/calendar_v3/service.rb +1943 -0
  81. data/generated/google/apis/civicinfo_v2.rb +31 -0
  82. data/generated/google/apis/civicinfo_v2/classes.rb +1057 -0
  83. data/generated/google/apis/civicinfo_v2/representations.rb +374 -0
  84. data/generated/google/apis/civicinfo_v2/service.rb +284 -0
  85. data/generated/google/apis/cloudmonitoring_v2beta2.rb +34 -0
  86. data/generated/google/apis/cloudmonitoring_v2beta2/classes.rb +679 -0
  87. data/generated/google/apis/cloudmonitoring_v2beta2/representations.rb +311 -0
  88. data/generated/google/apis/cloudmonitoring_v2beta2/service.rb +458 -0
  89. data/generated/google/apis/cloudresourcemanager_v1beta1.rb +38 -0
  90. data/generated/google/apis/cloudresourcemanager_v1beta1/classes.rb +139 -0
  91. data/generated/google/apis/cloudresourcemanager_v1beta1/representations.rb +65 -0
  92. data/generated/google/apis/cloudresourcemanager_v1beta1/service.rb +301 -0
  93. data/generated/google/apis/compute_v1.rb +49 -0
  94. data/generated/google/apis/compute_v1/classes.rb +6391 -0
  95. data/generated/google/apis/compute_v1/representations.rb +2209 -0
  96. data/generated/google/apis/compute_v1/service.rb +6352 -0
  97. data/generated/google/apis/container_v1beta1.rb +35 -0
  98. data/generated/google/apis/container_v1beta1/classes.rb +466 -0
  99. data/generated/google/apis/container_v1beta1/representations.rb +177 -0
  100. data/generated/google/apis/container_v1beta1/service.rb +394 -0
  101. data/generated/google/apis/content_v2.rb +35 -0
  102. data/generated/google/apis/content_v2/classes.rb +3780 -0
  103. data/generated/google/apis/content_v2/representations.rb +1456 -0
  104. data/generated/google/apis/content_v2/service.rb +1706 -0
  105. data/generated/google/apis/coordinate_v1.rb +37 -0
  106. data/generated/google/apis/coordinate_v1/classes.rb +669 -0
  107. data/generated/google/apis/coordinate_v1/representations.rb +285 -0
  108. data/generated/google/apis/coordinate_v1/service.rb +687 -0
  109. data/{lib/google/api_client/auth/compute_service_account.rb → generated/google/apis/customsearch_v1.rb} +13 -10
  110. data/generated/google/apis/customsearch_v1/classes.rb +771 -0
  111. data/generated/google/apis/customsearch_v1/representations.rb +276 -0
  112. data/generated/google/apis/customsearch_v1/service.rb +208 -0
  113. data/generated/google/apis/datastore_v1beta2.rb +40 -0
  114. data/generated/google/apis/datastore_v1beta2/classes.rb +1186 -0
  115. data/generated/google/apis/datastore_v1beta2/representations.rb +526 -0
  116. data/generated/google/apis/datastore_v1beta2/service.rb +300 -0
  117. data/generated/google/apis/deploymentmanager_v2beta2.rb +41 -0
  118. data/generated/google/apis/deploymentmanager_v2beta2/classes.rb +820 -0
  119. data/generated/google/apis/deploymentmanager_v2beta2/representations.rb +303 -0
  120. data/generated/google/apis/deploymentmanager_v2beta2/service.rb +647 -0
  121. data/generated/google/apis/dfareporting_v2_1.rb +37 -0
  122. data/generated/google/apis/dfareporting_v2_1/classes.rb +10755 -0
  123. data/generated/google/apis/dfareporting_v2_1/representations.rb +3438 -0
  124. data/generated/google/apis/dfareporting_v2_1/service.rb +8775 -0
  125. data/generated/google/apis/discovery_v1.rb +32 -0
  126. data/generated/google/apis/discovery_v1/classes.rb +947 -0
  127. data/generated/google/apis/discovery_v1/representations.rb +355 -0
  128. data/generated/google/apis/discovery_v1/service.rb +144 -0
  129. data/generated/google/apis/dns_v1.rb +41 -0
  130. data/generated/google/apis/dns_v1/classes.rb +406 -0
  131. data/generated/google/apis/dns_v1/representations.rb +151 -0
  132. data/generated/google/apis/dns_v1/service.rb +460 -0
  133. data/{spec/google/api_client/request_spec.rb → generated/google/apis/doubleclickbidmanager_v1.rb} +15 -13
  134. data/generated/google/apis/doubleclickbidmanager_v1/classes.rb +709 -0
  135. data/generated/google/apis/doubleclickbidmanager_v1/representations.rb +297 -0
  136. data/generated/google/apis/doubleclickbidmanager_v1/service.rb +349 -0
  137. data/generated/google/apis/doubleclicksearch_v2.rb +35 -0
  138. data/generated/google/apis/doubleclicksearch_v2/classes.rb +947 -0
  139. data/generated/google/apis/doubleclicksearch_v2/representations.rb +315 -0
  140. data/generated/google/apis/doubleclicksearch_v2/service.rb +490 -0
  141. data/generated/google/apis/drive_v2.rb +55 -0
  142. data/generated/google/apis/drive_v2/classes.rb +2519 -0
  143. data/generated/google/apis/drive_v2/representations.rb +781 -0
  144. data/generated/google/apis/drive_v2/service.rb +2685 -0
  145. data/generated/google/apis/fitness_v1.rb +49 -0
  146. data/generated/google/apis/fitness_v1/classes.rb +809 -0
  147. data/generated/google/apis/fitness_v1/representations.rb +295 -0
  148. data/generated/google/apis/fitness_v1/service.rb +684 -0
  149. data/generated/google/apis/fusiontables_v2.rb +37 -0
  150. data/generated/google/apis/fusiontables_v2/classes.rb +1048 -0
  151. data/generated/google/apis/fusiontables_v2/representations.rb +409 -0
  152. data/generated/google/apis/fusiontables_v2/service.rb +1496 -0
  153. data/generated/google/apis/games_configuration_v1configuration.rb +34 -0
  154. data/generated/google/apis/games_configuration_v1configuration/classes.rb +506 -0
  155. data/generated/google/apis/games_configuration_v1configuration/representations.rb +206 -0
  156. data/generated/google/apis/games_configuration_v1configuration/service.rb +578 -0
  157. data/generated/google/apis/games_v1.rb +40 -0
  158. data/generated/google/apis/games_v1/classes.rb +4578 -0
  159. data/generated/google/apis/games_v1/representations.rb +1570 -0
  160. data/generated/google/apis/games_v1/service.rb +2306 -0
  161. data/generated/google/apis/gan_v1beta1.rb +31 -0
  162. data/generated/google/apis/gan_v1beta1/classes.rb +1428 -0
  163. data/generated/google/apis/gan_v1beta1/representations.rb +428 -0
  164. data/generated/google/apis/gan_v1beta1/service.rb +692 -0
  165. data/generated/google/apis/genomics_v1beta2.rb +46 -0
  166. data/generated/google/apis/genomics_v1beta2/classes.rb +3288 -0
  167. data/generated/google/apis/genomics_v1beta2/representations.rb +1194 -0
  168. data/generated/google/apis/genomics_v1beta2/service.rb +2356 -0
  169. data/generated/google/apis/gmail_v1.rb +49 -0
  170. data/generated/google/apis/gmail_v1/classes.rb +794 -0
  171. data/generated/google/apis/gmail_v1/representations.rb +339 -0
  172. data/generated/google/apis/gmail_v1/service.rb +1502 -0
  173. data/generated/google/apis/groupsmigration_v1.rb +34 -0
  174. data/generated/google/apis/groupsmigration_v1/classes.rb +51 -0
  175. data/generated/google/apis/groupsmigration_v1/representations.rb +38 -0
  176. data/generated/google/apis/groupsmigration_v1/service.rb +111 -0
  177. data/generated/google/apis/groupssettings_v1.rb +34 -0
  178. data/generated/google/apis/groupssettings_v1/classes.rb +221 -0
  179. data/generated/google/apis/groupssettings_v1/representations.rb +64 -0
  180. data/generated/google/apis/groupssettings_v1/service.rb +179 -0
  181. data/generated/google/apis/identitytoolkit_v3.rb +31 -0
  182. data/generated/google/apis/identitytoolkit_v3/classes.rb +1229 -0
  183. data/generated/google/apis/identitytoolkit_v3/representations.rb +422 -0
  184. data/generated/google/apis/identitytoolkit_v3/service.rb +491 -0
  185. data/generated/google/apis/licensing_v1.rb +34 -0
  186. data/generated/google/apis/licensing_v1/classes.rb +132 -0
  187. data/generated/google/apis/licensing_v1/representations.rb +68 -0
  188. data/generated/google/apis/licensing_v1/service.rb +376 -0
  189. data/generated/google/apis/logging_v1beta3.rb +35 -0
  190. data/generated/google/apis/logging_v1beta3/classes.rb +505 -0
  191. data/generated/google/apis/logging_v1beta3/representations.rb +222 -0
  192. data/generated/google/apis/logging_v1beta3/service.rb +670 -0
  193. data/generated/google/apis/manager_v1beta2.rb +50 -0
  194. data/generated/google/apis/manager_v1beta2/classes.rb +1287 -0
  195. data/generated/google/apis/manager_v1beta2/representations.rb +536 -0
  196. data/generated/google/apis/manager_v1beta2/service.rb +380 -0
  197. data/generated/google/apis/mapsengine_v1.rb +38 -0
  198. data/generated/google/apis/mapsengine_v1/classes.rb +2873 -0
  199. data/generated/google/apis/mapsengine_v1/representations.rb +1235 -0
  200. data/generated/google/apis/mapsengine_v1/service.rb +3465 -0
  201. data/generated/google/apis/mirror_v1.rb +37 -0
  202. data/generated/google/apis/mirror_v1/classes.rb +1072 -0
  203. data/generated/google/apis/mirror_v1/representations.rb +350 -0
  204. data/generated/google/apis/mirror_v1/service.rb +1001 -0
  205. data/generated/google/apis/oauth2_v2.rb +43 -0
  206. data/generated/google/apis/oauth2_v2/classes.rb +245 -0
  207. data/generated/google/apis/oauth2_v2/representations.rb +94 -0
  208. data/generated/google/apis/oauth2_v2/service.rb +203 -0
  209. data/generated/google/apis/pagespeedonline_v2.rb +32 -0
  210. data/generated/google/apis/pagespeedonline_v2/classes.rb +614 -0
  211. data/generated/google/apis/pagespeedonline_v2/representations.rb +244 -0
  212. data/generated/google/apis/pagespeedonline_v2/service.rb +120 -0
  213. data/generated/google/apis/plus_domains_v1.rb +61 -0
  214. data/generated/google/apis/plus_domains_v1/classes.rb +2402 -0
  215. data/generated/google/apis/plus_domains_v1/representations.rb +873 -0
  216. data/generated/google/apis/plus_domains_v1/service.rb +924 -0
  217. data/generated/google/apis/plus_v1.rb +43 -0
  218. data/generated/google/apis/plus_v1/classes.rb +2384 -0
  219. data/generated/google/apis/plus_v1/representations.rb +812 -0
  220. data/generated/google/apis/plus_v1/service.rb +616 -0
  221. data/generated/google/apis/prediction_v1_6.rb +44 -0
  222. data/generated/google/apis/prediction_v1_6/classes.rb +751 -0
  223. data/generated/google/apis/prediction_v1_6/representations.rb +327 -0
  224. data/generated/google/apis/prediction_v1_6/service.rb +388 -0
  225. data/generated/google/apis/pubsub_v1beta2.rb +37 -0
  226. data/generated/google/apis/pubsub_v1beta2/classes.rb +824 -0
  227. data/generated/google/apis/pubsub_v1beta2/representations.rb +366 -0
  228. data/generated/google/apis/pubsub_v1beta2/service.rb +778 -0
  229. data/generated/google/apis/qpx_express_v1.rb +31 -0
  230. data/generated/google/apis/qpx_express_v1/classes.rb +1268 -0
  231. data/generated/google/apis/qpx_express_v1/representations.rb +424 -0
  232. data/generated/google/apis/qpx_express_v1/service.rb +101 -0
  233. data/generated/google/apis/replicapool_v1beta2.rb +41 -0
  234. data/generated/google/apis/replicapool_v1beta2/classes.rb +621 -0
  235. data/generated/google/apis/replicapool_v1beta2/representations.rb +235 -0
  236. data/generated/google/apis/replicapool_v1beta2/service.rb +620 -0
  237. data/generated/google/apis/replicapoolupdater_v1beta1.rb +41 -0
  238. data/generated/google/apis/replicapoolupdater_v1beta1/classes.rb +682 -0
  239. data/generated/google/apis/replicapoolupdater_v1beta1/representations.rb +247 -0
  240. data/generated/google/apis/replicapoolupdater_v1beta1/service.rb +472 -0
  241. data/generated/google/apis/reseller_v1.rb +37 -0
  242. data/generated/google/apis/reseller_v1/classes.rb +502 -0
  243. data/generated/google/apis/reseller_v1/representations.rb +199 -0
  244. data/generated/google/apis/reseller_v1/service.rb +637 -0
  245. data/generated/google/apis/resourceviews_v1beta2.rb +47 -0
  246. data/generated/google/apis/resourceviews_v1beta2/classes.rb +660 -0
  247. data/generated/google/apis/resourceviews_v1beta2/representations.rb +269 -0
  248. data/generated/google/apis/resourceviews_v1beta2/service.rb +574 -0
  249. data/generated/google/apis/site_verification_v1.rb +37 -0
  250. data/generated/google/apis/site_verification_v1/classes.rb +185 -0
  251. data/generated/google/apis/site_verification_v1/representations.rb +101 -0
  252. data/generated/google/apis/site_verification_v1/service.rb +322 -0
  253. data/generated/google/apis/sqladmin_v1beta4.rb +37 -0
  254. data/generated/google/apis/sqladmin_v1beta4/classes.rb +1817 -0
  255. data/generated/google/apis/sqladmin_v1beta4/representations.rb +688 -0
  256. data/generated/google/apis/sqladmin_v1beta4/service.rb +1534 -0
  257. data/generated/google/apis/storage_v1.rb +43 -0
  258. data/generated/google/apis/storage_v1/classes.rb +1177 -0
  259. data/generated/google/apis/storage_v1/representations.rb +427 -0
  260. data/generated/google/apis/storage_v1/service.rb +1920 -0
  261. data/generated/google/apis/tagmanager_v1.rb +52 -0
  262. data/generated/google/apis/tagmanager_v1/classes.rb +1226 -0
  263. data/generated/google/apis/tagmanager_v1/representations.rb +461 -0
  264. data/generated/google/apis/tagmanager_v1/service.rb +1978 -0
  265. data/generated/google/apis/taskqueue_v1beta2.rb +37 -0
  266. data/generated/google/apis/taskqueue_v1beta2/classes.rb +254 -0
  267. data/generated/google/apis/taskqueue_v1beta2/representations.rb +114 -0
  268. data/generated/google/apis/taskqueue_v1beta2/service.rb +416 -0
  269. data/generated/google/apis/tasks_v1.rb +37 -0
  270. data/generated/google/apis/tasks_v1/classes.rb +296 -0
  271. data/generated/google/apis/tasks_v1/representations.rb +115 -0
  272. data/generated/google/apis/tasks_v1/service.rb +657 -0
  273. data/generated/google/apis/translate_v2.rb +31 -0
  274. data/generated/google/apis/translate_v2/classes.rb +168 -0
  275. data/generated/google/apis/translate_v2/representations.rb +109 -0
  276. data/generated/google/apis/translate_v2/service.rb +185 -0
  277. data/generated/google/apis/urlshortener_v1.rb +34 -0
  278. data/generated/google/apis/urlshortener_v1/classes.rb +246 -0
  279. data/generated/google/apis/urlshortener_v1/representations.rb +111 -0
  280. data/generated/google/apis/urlshortener_v1/service.rb +179 -0
  281. data/generated/google/apis/webmasters_v3.rb +37 -0
  282. data/generated/google/apis/webmasters_v3/classes.rb +563 -0
  283. data/generated/google/apis/webmasters_v3/representations.rb +250 -0
  284. data/generated/google/apis/webmasters_v3/service.rb +587 -0
  285. data/generated/google/apis/youtube_analytics_v1.rb +46 -0
  286. data/generated/google/apis/youtube_analytics_v1/classes.rb +540 -0
  287. data/generated/google/apis/youtube_analytics_v1/representations.rb +242 -0
  288. data/generated/google/apis/youtube_analytics_v1/service.rb +567 -0
  289. data/generated/google/apis/youtube_v3.rb +49 -0
  290. data/generated/google/apis/youtube_v3/classes.rb +7225 -0
  291. data/generated/google/apis/youtube_v3/representations.rb +2529 -0
  292. data/generated/google/apis/youtube_v3/service.rb +4051 -0
  293. data/google-api-client.gemspec +27 -39
  294. data/lib/google/api_client/auth/storage.rb +3 -2
  295. data/lib/google/api_client/auth/storages/file_store.rb +1 -3
  296. data/lib/google/api_client/auth/storages/redis_store.rb +6 -2
  297. data/lib/google/apis.rb +48 -0
  298. data/lib/google/apis/core/api_command.rb +128 -0
  299. data/lib/google/apis/core/base_service.rb +314 -0
  300. data/lib/google/apis/core/batch.rb +222 -0
  301. data/lib/google/apis/core/download.rb +94 -0
  302. data/lib/google/apis/core/hashable.rb +44 -0
  303. data/lib/google/apis/core/http_command.rb +275 -0
  304. data/lib/google/apis/core/json_representation.rb +122 -0
  305. data/lib/google/{api_client/version.rb → apis/core/logging.rb} +12 -8
  306. data/lib/google/apis/core/multipart.rb +173 -0
  307. data/lib/google/apis/core/upload.rb +275 -0
  308. data/lib/google/{api_client → apis}/errors.rb +32 -28
  309. data/lib/google/apis/generator.rb +70 -0
  310. data/lib/google/apis/generator/annotator.rb +271 -0
  311. data/lib/google/apis/generator/helpers.rb +74 -0
  312. data/lib/google/apis/generator/model.rb +130 -0
  313. data/lib/google/apis/generator/template.rb +124 -0
  314. data/lib/google/apis/generator/templates/_class.tmpl +40 -0
  315. data/lib/google/apis/generator/templates/_method.tmpl +90 -0
  316. data/lib/google/apis/generator/templates/_representation.tmpl +51 -0
  317. data/lib/google/apis/generator/templates/_representation_stub.tmpl +15 -0
  318. data/lib/google/apis/generator/templates/_representation_type.tmpl +10 -0
  319. data/lib/google/{api_client/reference.rb → apis/generator/templates/classes.rb.tmpl} +11 -9
  320. data/lib/google/apis/generator/templates/module.rb.tmpl +40 -0
  321. data/lib/google/apis/generator/templates/representations.rb.tmpl +32 -0
  322. data/lib/google/apis/generator/templates/service.rb.tmpl +60 -0
  323. data/lib/google/apis/options.rb +79 -0
  324. data/lib/google/apis/version.rb +39 -0
  325. data/rakelib/metrics.rake +22 -0
  326. data/rakelib/rubocop.rake +10 -0
  327. data/rakelib/spec.rake +11 -0
  328. data/rakelib/yard.rake +11 -0
  329. data/samples/calendar/calendar.rb +43 -0
  330. data/samples/drive/drive.rb +40 -0
  331. data/samples/pubsub/pubsub.rb +52 -0
  332. data/{lib/google/api_client/discovery.rb → samples/translate/translate.rb} +14 -5
  333. data/script/generate +79 -0
  334. data/script/package +8 -0
  335. data/script/release +15 -0
  336. data/spec/fixtures/files/api_names.yaml +3 -0
  337. data/spec/fixtures/files/auth_stored_credentials.json +8 -0
  338. data/spec/fixtures/files/client_secrets.json +1 -0
  339. data/spec/fixtures/files/test.blah +1 -0
  340. data/spec/fixtures/files/test.txt +1 -0
  341. data/spec/fixtures/files/test_api.json +440 -0
  342. data/spec/google/api_client/auth/storage_spec.rb +1 -3
  343. data/spec/google/api_client/auth/storages/file_store_spec.rb +1 -2
  344. data/spec/google/api_client/auth/storages/redis_store_spec.rb +1 -3
  345. data/spec/google/apis/core/api_command_spec.rb +170 -0
  346. data/spec/google/apis/core/batch_spec.rb +128 -0
  347. data/spec/google/apis/core/download_spec.rb +90 -0
  348. data/spec/google/apis/core/hashable_spec.rb +60 -0
  349. data/spec/google/apis/core/http_command_spec.rb +238 -0
  350. data/spec/google/apis/core/json_representation_spec.rb +192 -0
  351. data/spec/google/apis/core/service_spec.rb +247 -0
  352. data/spec/google/apis/core/upload_spec.rb +238 -0
  353. data/{lib/google/api_client/service_account.rb → spec/google/apis/generated_spec.rb} +14 -8
  354. data/spec/google/apis/generator/generator_spec.rb +272 -0
  355. data/spec/google/apis/logging_spec.rb +45 -0
  356. data/spec/google/apis/options_spec.rb +40 -0
  357. data/spec/integration_tests/drive_spec.rb +35 -0
  358. data/spec/integration_tests/pubsub_spec.rb +48 -0
  359. data/spec/integration_tests/url_shortener_spec.rb +31 -0
  360. data/spec/spec_helper.rb +102 -46
  361. metadata +433 -178
  362. data/lib/compat/multi_json.rb +0 -19
  363. data/lib/google/api_client.rb +0 -750
  364. data/lib/google/api_client/auth/file_storage.rb +0 -59
  365. data/lib/google/api_client/auth/jwt_asserter.rb +0 -126
  366. data/lib/google/api_client/auth/key_utils.rb +0 -93
  367. data/lib/google/api_client/auth/pkcs12.rb +0 -41
  368. data/lib/google/api_client/batch.rb +0 -326
  369. data/lib/google/api_client/charset.rb +0 -33
  370. data/lib/google/api_client/discovery/api.rb +0 -310
  371. data/lib/google/api_client/discovery/media.rb +0 -77
  372. data/lib/google/api_client/discovery/method.rb +0 -363
  373. data/lib/google/api_client/discovery/resource.rb +0 -156
  374. data/lib/google/api_client/discovery/schema.rb +0 -117
  375. data/lib/google/api_client/environment.rb +0 -42
  376. data/lib/google/api_client/gzip.rb +0 -28
  377. data/lib/google/api_client/logging.rb +0 -32
  378. data/lib/google/api_client/media.rb +0 -259
  379. data/lib/google/api_client/railtie.rb +0 -18
  380. data/lib/google/api_client/request.rb +0 -350
  381. data/lib/google/api_client/result.rb +0 -255
  382. data/lib/google/api_client/service.rb +0 -233
  383. data/lib/google/api_client/service/batch.rb +0 -110
  384. data/lib/google/api_client/service/request.rb +0 -144
  385. data/lib/google/api_client/service/resource.rb +0 -40
  386. data/lib/google/api_client/service/result.rb +0 -162
  387. data/lib/google/api_client/service/simple_file_store.rb +0 -151
  388. data/lib/google/api_client/service/stub_generator.rb +0 -61
  389. data/spec/google/api_client/batch_spec.rb +0 -248
  390. data/spec/google/api_client/discovery_spec.rb +0 -708
  391. data/spec/google/api_client/gzip_spec.rb +0 -98
  392. data/spec/google/api_client/media_spec.rb +0 -178
  393. data/spec/google/api_client/result_spec.rb +0 -207
  394. data/spec/google/api_client/service_account_spec.rb +0 -169
  395. data/spec/google/api_client/service_spec.rb +0 -618
  396. data/spec/google/api_client/simple_file_store_spec.rb +0 -133
  397. data/spec/google/api_client_spec.rb +0 -352
@@ -0,0 +1,238 @@
1
+ # Copyright 2015 Google Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require 'spec_helper'
16
+ require 'google/apis/core/upload'
17
+ require 'google/apis/core/json_representation'
18
+ require 'hurley/test'
19
+
20
+ # TODO: JSON Response decoding
21
+ # TODO: Upload from IO
22
+ # TODO: Upload from file
23
+
24
+ RSpec.describe Google::Apis::Core::UploadIO do
25
+ let(:upload_io) { Google::Apis::Core::UploadIO.from_file(file) }
26
+
27
+ context 'with text file' do
28
+ let(:file) { File.join(FIXTURES_DIR, 'files', 'test.txt') }
29
+ it 'should infer content type from file' do
30
+ expect(upload_io.content_type).to eql('text/plain')
31
+ end
32
+
33
+ it 'should allow overriding the mime type' do
34
+ io = Google::Apis::Core::UploadIO.from_file(file, content_type: 'application/json')
35
+ expect(io.content_type).to eql('application/json')
36
+ end
37
+ end
38
+
39
+ context 'with unknown type' do
40
+ let(:file) { File.join(FIXTURES_DIR, 'files', 'test.blah') }
41
+ it 'should use the default mime type' do
42
+ expect(upload_io.content_type).to eql('application/octet-stream')
43
+ end
44
+
45
+ it 'should allow overriding the mime type' do
46
+ io = Google::Apis::Core::UploadIO.from_file(file, content_type: 'application/json')
47
+ expect(io.content_type).to eql('application/json')
48
+ end
49
+ end
50
+ end
51
+
52
+ RSpec.describe Google::Apis::Core::RawUploadCommand do
53
+ include TestHelpers
54
+ include_context 'HTTP client'
55
+
56
+ let(:command) do
57
+ command = Google::Apis::Core::RawUploadCommand.new(:post, 'https://www.googleapis.com/zoo/animals')
58
+ command.upload_source = file
59
+ command.upload_content_type = 'text/plain'
60
+ command
61
+ end
62
+
63
+ shared_examples 'should upload' do
64
+ before(:example) do
65
+ stub_request(:post, 'https://www.googleapis.com/zoo/animals').to_return(body: '')
66
+ end
67
+
68
+ it 'should send content' do
69
+ command.execute(client)
70
+ expect(a_request(:post, 'https://www.googleapis.com/zoo/animals')
71
+ .with(body: "Hello world\n")).to have_been_made
72
+ end
73
+
74
+ it 'should send upload protocol' do
75
+ command.execute(client)
76
+ expect(a_request(:post, 'https://www.googleapis.com/zoo/animals')
77
+ .with { |req| req.headers['X-Goog-Upload-Protocol'] == 'raw' }).to have_been_made
78
+ end
79
+ end
80
+
81
+ context('with StringIO input') do
82
+ let(:file) { StringIO.new("Hello world\n") }
83
+ include_examples 'should upload'
84
+ end
85
+
86
+ context('with IO input') do
87
+ let(:file) { File.open(File.join(FIXTURES_DIR, 'files', 'test.txt'), 'r') }
88
+ include_examples 'should upload'
89
+
90
+ it 'should not close stream' do
91
+ expect(file.closed?).to be false
92
+ end
93
+ end
94
+
95
+ context('with file path input') do
96
+ let(:file) { File.join(FIXTURES_DIR, 'files', 'test.txt') }
97
+ include_examples 'should upload'
98
+ end
99
+
100
+ context('with invalid input') do
101
+ let(:file) { -> {} }
102
+ it 'should raise client error' do
103
+ expect { command.execute(client) }.to raise_error(Google::Apis::ClientError)
104
+ end
105
+ end
106
+ end
107
+
108
+ RSpec.describe Google::Apis::Core::MultipartUploadCommand do
109
+ include TestHelpers
110
+ include_context 'HTTP client'
111
+
112
+ let(:command) do
113
+ command = Google::Apis::Core::MultipartUploadCommand.new(:post, 'https://www.googleapis.com/zoo/animals')
114
+ command.upload_source = StringIO.new('Hello world')
115
+ command.upload_content_type = 'text/plain'
116
+ command.body = 'metadata'
117
+ command
118
+ end
119
+
120
+ before(:example) do
121
+ stub_request(:post, 'https://www.googleapis.com/zoo/animals').to_return(body: %(Hello world))
122
+ end
123
+
124
+ it 'should send content' do
125
+ expected_body = <<EOF.gsub(/\n/, "\r\n")
126
+ --RubyApiClientUpload
127
+ Content-Type: application/json
128
+
129
+ metadata
130
+ --RubyApiClientUpload
131
+ Content-Length: 11
132
+ Content-Type: text/plain
133
+ Content-Transfer-Encoding: binary
134
+
135
+ Hello world
136
+ --RubyApiClientUpload--
137
+
138
+ EOF
139
+ command.execute(client)
140
+ expect(a_request(:post, 'https://www.googleapis.com/zoo/animals')
141
+ .with(body: expected_body)).to have_been_made
142
+ end
143
+
144
+ it 'should send upload protocol' do
145
+ command.execute(client)
146
+ expect(a_request(:post, 'https://www.googleapis.com/zoo/animals')
147
+ .with { |req| req.headers['X-Goog-Upload-Protocol'] == 'multipart' }).to have_been_made
148
+ end
149
+ end
150
+
151
+ RSpec.describe Google::Apis::Core::ResumableUploadCommand do
152
+ include TestHelpers
153
+ include_context 'HTTP client'
154
+
155
+ let(:command) do
156
+ command = Google::Apis::Core::ResumableUploadCommand.new(:post, 'https://www.googleapis.com/zoo/animals')
157
+ command.upload_source = StringIO.new('Hello world')
158
+ command.upload_content_type = 'text/plain'
159
+ command
160
+ end
161
+
162
+ context 'with uninterrupted upload' do
163
+ before(:example) do
164
+ stub_request(:post, 'https://www.googleapis.com/zoo/animals')
165
+ .to_return(headers: { 'X-Goog-Upload-Status' => 'active', 'X-Goog-Upload-URL' => 'https://www.googleapis.com/zoo/animals' })
166
+ .to_return(headers: { 'X-Goog-Upload-Status' => 'final' }, body: %(OK))
167
+ end
168
+
169
+ it 'should send upload protocol' do
170
+ command.execute(client)
171
+ expect(a_request(:post, 'https://www.googleapis.com/zoo/animals')
172
+ .with { |req| req.headers['X-Goog-Upload-Protocol'] == 'resumable' }).to have_been_made
173
+ end
174
+
175
+ it 'should send start command' do
176
+ command.execute(client)
177
+ expect(a_request(:post, 'https://www.googleapis.com/zoo/animals')
178
+ .with { |req| req.headers['X-Goog-Upload-Command'] == 'start' }).to have_been_made
179
+ end
180
+
181
+ it 'should send upload command' do
182
+ command.execute(client)
183
+ expect(a_request(:post, 'https://www.googleapis.com/zoo/animals')
184
+ .with { |req| req.headers['X-Goog-Upload-Command'].include?('upload') }).to have_been_made
185
+ end
186
+
187
+ it 'should send upload content' do
188
+ command.execute(client)
189
+ expect(a_request(:post, 'https://www.googleapis.com/zoo/animals')
190
+ .with(body: 'Hello world')).to have_been_made
191
+ end
192
+ end
193
+
194
+ context 'with retriable error on start' do
195
+ before(:example) do
196
+ stub_request(:post, 'https://www.googleapis.com/zoo/animals')
197
+ .to_timeout
198
+ .to_return(headers: { 'X-Goog-Upload-Status' => 'active', 'X-Goog-Upload-URL' => 'https://www.googleapis.com/zoo/animals' })
199
+ .to_return(headers: { 'X-Goog-Upload-Status' => 'active', 'X-Goog-Upload-Size-Received' => '6' })
200
+ .to_return(headers: { 'X-Goog-Upload-Status' => 'final' }, body: %(OK))
201
+ end
202
+
203
+ it 'should retry start command and continue' do
204
+ command.execute(client)
205
+ expect(a_request(:post, 'https://www.googleapis.com/zoo/animals')
206
+ .with(body: 'Hello world')).to have_been_made
207
+ end
208
+ end
209
+
210
+ context 'with interruption' do
211
+ before(:example) do
212
+ stub_request(:post, 'https://www.googleapis.com/zoo/animals')
213
+ .to_return(headers: { 'X-Goog-Upload-Status' => 'active', 'X-Goog-Upload-URL' => 'https://www.googleapis.com/zoo/animals' })
214
+ .to_return(status: [500, 'Server error'])
215
+ .to_return(headers: { 'X-Goog-Upload-Status' => 'active', 'X-Goog-Upload-Size-Received' => '6' })
216
+ .to_return(headers: { 'X-Goog-Upload-Status' => 'final' }, body: %(OK))
217
+ end
218
+
219
+ it 'should send remaining upload content after failure' do
220
+ command.execute(client)
221
+ expect(a_request(:post, 'https://www.googleapis.com/zoo/animals')
222
+ .with(body: 'world')).to have_been_made
223
+ end
224
+ end
225
+
226
+ context 'with cancelled upload' do
227
+ before(:example) do
228
+ stub_request(:post, 'https://www.googleapis.com/zoo/animals')
229
+ .to_return(headers: { 'X-Goog-Upload-Status' => 'active', 'X-Goog-Upload-URL' => 'https://www.googleapis.com/zoo/animals' })
230
+ .to_return(status: [500, 'Server error'])
231
+ .to_return(headers: { 'X-Goog-Upload-Status' => 'cancelled' })
232
+ end
233
+
234
+ it 'should raise error' do
235
+ expect { command.execute(client) }.to raise_error Google::Apis::ClientError
236
+ end
237
+ end
238
+ 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,10 +12,16 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- require 'google/api_client/auth/pkcs12'
16
- require 'google/api_client/auth/jwt_asserter'
17
- require 'google/api_client/auth/key_utils'
18
- require 'google/api_client/auth/compute_service_account'
19
- require 'google/api_client/auth/storage'
20
- require 'google/api_client/auth/storages/redis_store'
21
- require 'google/api_client/auth/storages/file_store'
15
+ require 'spec_helper'
16
+
17
+ RSpec.describe Google::Apis do
18
+ # Minimal test just to ensure no syntax errors in generated code
19
+ it 'should load all APIs' do
20
+ expect do
21
+ Dir.glob(File.join(ROOT_DIR, 'generated', 'google', 'apis', '*.rb')) do |file|
22
+ base = File.basename(file, '.rb')
23
+ require sprintf('google/apis/%s', base)
24
+ end
25
+ end.not_to raise_error
26
+ end
27
+ end
@@ -0,0 +1,272 @@
1
+ # Copyright 2015 Google Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require 'spec_helper'
16
+ require 'google/apis/generator'
17
+ require 'tmpdir'
18
+ require 'fileutils'
19
+
20
+ # TODO - Naked arrays in method requests/responses
21
+
22
+ RSpec.describe Google::Apis::Generator do
23
+ include TestHelpers
24
+
25
+ context 'with test API' do
26
+ before(:context) do
27
+ generator = Google::Apis::Generator.new(api_names: File.join(FIXTURES_DIR, 'files', 'api_names.yaml'))
28
+ discovery = File.read(File.join(FIXTURES_DIR, 'files', 'test_api.json'))
29
+ generated_files = generator.render(discovery)
30
+ puts generator.dump_api_names
31
+ tempdir = Dir.mktmpdir
32
+ generated_files.each do |key, content|
33
+ path = File.join(tempdir, key)
34
+ FileUtils.mkdir_p(File.dirname(path))
35
+ File.open(path, 'w') do |f|
36
+ f.write(content)
37
+ end
38
+ end
39
+ $LOAD_PATH.unshift(tempdir)
40
+ require 'google/apis/test_v1'
41
+ end
42
+
43
+ let(:service) { Google::Apis::TestV1::TestService.new }
44
+
45
+ context 'with the generated service' do
46
+ it 'should set the base URL' do
47
+ expect(service.root_url.to_s).to eql('https://www.googleapis.com/')
48
+ end
49
+
50
+ it 'should define global methods from discovery' do
51
+ expect(service.method(:query)).to_not be_nil
52
+ end
53
+
54
+ it 'should define parameters on methods' do
55
+ parameters = service.method(:query).parameters.map { |(_k, v)| v }
56
+ expect(parameters).to include(:s, :i, :n, :b, :a, :e, :er, :sr)
57
+ end
58
+
59
+ it 'should modify parameter names that are ruby keywords' do
60
+ parameters = service.method(:query).parameters.map { |(_k, v)| v }
61
+ expect(parameters).to include(:do_)
62
+ end
63
+
64
+ it 'should define global parameters on methods' do
65
+ parameters = service.method(:query).parameters.map { |(_k, v)| v }
66
+ expect(parameters).to include(:fields, :quota_user, :user_ip)
67
+ end
68
+
69
+ it 'should include standard options & block' do
70
+ parameters = service.method(:query).parameters.map { |(_k, v)| v }
71
+ expect(parameters).to include(:options, :block)
72
+ end
73
+
74
+ it 'should define AUTH_TEST scope' do
75
+ expect(Google::Apis::TestV1::AUTH_TEST).to eql ('https://www.googleapis.com/auth/test')
76
+ end
77
+
78
+ it 'should define AUTH_TEST_READONLY scope' do
79
+ expect(Google::Apis::TestV1::AUTH_TEST_READONLY).to eql ('https://www.googleapis.com/auth/test.readonly')
80
+ end
81
+
82
+ context 'when simplifying class names' do
83
+ it 'should simplify the TestAnotherThing name' do
84
+ expect { Google::Apis::TestV1::AnotherThing.new }.not_to raise_error
85
+ end
86
+
87
+ it 'should not simplify the TestThing name' do
88
+ expect { Google::Apis::TestV1::TestThing.new }.not_to raise_error
89
+ end
90
+ end
91
+
92
+
93
+ context 'with the Thing resource' do
94
+ it 'should define the create method`' do
95
+ expect(service.method(:create_thing)).to_not be_nil
96
+ end
97
+
98
+ it 'should define the list method`' do
99
+ expect(service.method(:list_things)).to_not be_nil
100
+ end
101
+
102
+ it 'should define the get method`' do
103
+ expect(service.method(:get_thing)).to_not be_nil
104
+ end
105
+
106
+ it 'should include the download_dest parameter for get_thing' do
107
+ parameters = service.method(:get_thing).parameters.map { |(_k, v)| v }
108
+ expect(parameters).to include(:download_dest)
109
+ end
110
+
111
+ it 'should define the update method`' do
112
+ expect(service.method(:update_thing)).to_not be_nil
113
+ end
114
+
115
+ it 'should include the upload_source parameter for update_thing' do
116
+ parameters = service.method(:update_thing).parameters.map { |(_k, v)| v }
117
+ expect(parameters).to include(:upload_source)
118
+ end
119
+
120
+ it 'should define subresource methods' do
121
+ expect(service.method(:list_thing_subthings)).to_not be_nil
122
+ end
123
+ end
124
+
125
+ context 'with the get_thing method' do
126
+ before(:example) do
127
+ json = <<EOF
128
+ {
129
+ "id" : "123",
130
+ "name" : "A thing",
131
+ "enabled": true,
132
+ "properties": {
133
+ "prop_a" : "value_a",
134
+ "prop_b" : "value_b"
135
+ },
136
+ "photo": {
137
+ "filename": "image.jpg"
138
+ },
139
+ "hat": {
140
+ "type": "baseballHat",
141
+ "color": "red"
142
+ }
143
+ }
144
+ EOF
145
+ stub_request(:get, 'https://www.googleapis.com/test/v1/things/123')
146
+ .to_return(headers: { 'Content-Type' => 'application/json' }, body: json)
147
+ end
148
+
149
+ let(:thing) { service.get_thing('123') }
150
+
151
+ it 'should return a Thing' do
152
+ expect(thing).to be_instance_of(Google::Apis::TestV1::Thing)
153
+ end
154
+
155
+ it 'should set attributes' do
156
+ expect(thing.id).to eql '123'
157
+ end
158
+
159
+ it 'should alias boolean methods on Thing' do
160
+ expect(thing.enabled?).to be true
161
+ end
162
+
163
+ it 'should return a Hash for properties' do
164
+ expect(thing.properties).to be_instance_of(Hash)
165
+ end
166
+
167
+ it 'should set hash elements' do
168
+ expect(thing.properties).to include('prop_a' => 'value_a')
169
+ end
170
+
171
+ it 'should return the correct variant type for hat' do
172
+ expect(thing.hat).to be_instance_of(Google::Apis::TestV1::BaseballHat)
173
+ end
174
+
175
+ it 'should return the correct variant properties for hat' do
176
+ expect(thing.hat.color).to eql 'red'
177
+ end
178
+
179
+ it 'should return a photo' do
180
+ expect(thing.photo).to be_instance_of(Google::Apis::TestV1::Thing::Photo)
181
+ end
182
+
183
+ it 'should return photo properties' do
184
+ expect(thing.photo.filename).to eql 'image.jpg'
185
+ end
186
+ end
187
+
188
+ context 'with the create_thing method' do
189
+ before(:example) do
190
+ json = <<EOF
191
+ {
192
+ "id" : "123",
193
+ "name" : "A thing",
194
+ "properties": {
195
+ "prop_a" : "value_a"
196
+ },
197
+ "photo": {
198
+ "filename": "image.jpg"
199
+ },
200
+ "hat": {
201
+ "type": "topHat",
202
+ "height": 100
203
+ }
204
+ }
205
+ EOF
206
+ stub_request(:post, 'https://www.googleapis.com/test/v1/things')
207
+ .to_return(headers: { 'Content-Type' => 'application/json' }, body: json)
208
+ end
209
+
210
+ let(:thing) do
211
+ thing = Google::Apis::TestV1::Thing.new(name: 'A thing', properties: { 'prop_a' => 'value_a' })
212
+ thing.photo = Google::Apis::TestV1::Thing::Photo.new(filename: 'image.jpg')
213
+ thing.hat = Google::Apis::TestV1::TopHat.new(type: 'topHat', height: 100)
214
+ service.create_thing(thing)
215
+ end
216
+
217
+ it 'should serialize the thing' do
218
+ expected_body = <<EOF
219
+ {
220
+ "name" : "A thing",
221
+ "properties": {
222
+ "prop_a" : "value_a"
223
+ },
224
+ "photo": {
225
+ "filename": "image.jpg"
226
+ },
227
+ "hat": {
228
+ "type": "topHat",
229
+ "height": 100
230
+ }
231
+ }
232
+ EOF
233
+ expect(thing).to be_instance_of(Google::Apis::TestV1::Thing)
234
+ expect(a_request(:post, 'https://www.googleapis.com/test/v1/things')
235
+ .with { |req| expect(req.body).to be_json_eql(expected_body) }).to have_been_made
236
+ end
237
+
238
+ it 'should an updated id' do
239
+ expect(thing.id).to eql '123'
240
+ end
241
+ end
242
+
243
+ context 'with the query method' do
244
+ before(:example) do
245
+ body = %({"rows": [{"value": "hello"}, {"value": "world"}]})
246
+ stub_request(:get, 'https://www.googleapis.com/test/v1/query')
247
+ .to_return(headers: { 'Content-Type' => 'application/json' }, body: body)
248
+ end
249
+
250
+ it 'should return query results' do
251
+ results = service.query
252
+ expect(results).to be_instance_of(Google::Apis::TestV1::QueryResults)
253
+ end
254
+
255
+ it 'should return an array for items' do
256
+ results = service.query
257
+ expect(results.rows).to be_instance_of(Array)
258
+ end
259
+
260
+ it 'should return items of type Row' do
261
+ results = service.query
262
+ expect(results.rows.first).to be_instance_of(Google::Apis::TestV1::Row)
263
+ end
264
+
265
+ it 'should return values for rows' do
266
+ results = service.query
267
+ expect(results.rows[1].value).to eql('world')
268
+ end
269
+ end
270
+ end
271
+ end
272
+ end