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.
- checksums.yaml +4 -4
- data/.gitignore +20 -0
- data/.rspec +2 -0
- data/.rubocop.yml +7 -0
- data/.rubocop_todo.yml +63 -0
- data/.travis.yml +22 -0
- data/.yardopts +12 -0
- data/CHANGELOG.md +52 -2
- data/CONTRIBUTING.md +31 -0
- data/Gemfile +35 -1
- data/MIGRATING.md +171 -0
- data/README.md +181 -148
- data/Rakefile +1 -40
- data/api_names.yaml +1036 -0
- data/api_names_out.yaml +26053 -0
- data/bin/generate-api +95 -0
- data/generated/google/apis/adexchangebuyer_v1_3/classes.rb +1335 -0
- data/generated/google/apis/adexchangebuyer_v1_3/representations.rb +446 -0
- data/generated/google/apis/adexchangebuyer_v1_3/service.rb +872 -0
- data/generated/google/apis/adexchangebuyer_v1_3.rb +35 -0
- data/generated/google/apis/adexchangeseller_v2_0/classes.rb +792 -0
- data/generated/google/apis/adexchangeseller_v2_0/representations.rb +309 -0
- data/generated/google/apis/adexchangeseller_v2_0/service.rb +668 -0
- data/generated/google/apis/adexchangeseller_v2_0.rb +38 -0
- data/generated/google/apis/admin_datatransfer_v1/classes.rb +267 -0
- data/generated/google/apis/admin_datatransfer_v1/representations.rb +118 -0
- data/generated/google/apis/admin_datatransfer_v1/service.rb +262 -0
- data/generated/google/apis/admin_datatransfer_v1.rb +37 -0
- data/generated/google/apis/admin_directory_v1/classes.rb +3141 -0
- data/generated/google/apis/admin_directory_v1/representations.rb +1029 -0
- data/generated/google/apis/admin_directory_v1/service.rb +3818 -0
- data/generated/google/apis/admin_directory_v1.rb +113 -0
- data/generated/google/apis/admin_reports_v1/classes.rb +582 -0
- data/generated/google/apis/admin_reports_v1/representations.rb +231 -0
- data/generated/google/apis/admin_reports_v1/service.rb +336 -0
- data/generated/google/apis/admin_reports_v1.rb +38 -0
- data/generated/google/apis/adsense_v1_4/classes.rb +1285 -0
- data/generated/google/apis/adsense_v1_4/representations.rb +494 -0
- data/generated/google/apis/adsense_v1_4/service.rb +1714 -0
- data/generated/google/apis/adsense_v1_4.rb +38 -0
- data/generated/google/apis/adsensehost_v4_1/classes.rb +834 -0
- data/generated/google/apis/adsensehost_v4_1/representations.rb +327 -0
- data/generated/google/apis/adsensehost_v4_1/service.rb +1164 -0
- data/generated/google/apis/adsensehost_v4_1.rb +35 -0
- data/generated/google/apis/analytics_v3/classes.rb +5118 -0
- data/generated/google/apis/analytics_v3/representations.rb +1662 -0
- data/generated/google/apis/analytics_v3/service.rb +3568 -0
- data/generated/google/apis/analytics_v3.rb +49 -0
- data/generated/google/apis/androidenterprise_v1/classes.rb +1443 -0
- data/generated/google/apis/androidenterprise_v1/representations.rb +538 -0
- data/generated/google/apis/androidenterprise_v1/service.rb +2602 -0
- data/generated/google/apis/androidenterprise_v1.rb +35 -0
- data/generated/google/apis/androidpublisher_v2/classes.rb +1411 -0
- data/generated/google/apis/androidpublisher_v2/representations.rb +646 -0
- data/generated/google/apis/androidpublisher_v2/service.rb +2338 -0
- data/generated/google/apis/androidpublisher_v2.rb +34 -0
- data/generated/google/apis/appengine_v1beta4/classes.rb +1532 -0
- data/generated/google/apis/appengine_v1beta4/representations.rb +526 -0
- data/generated/google/apis/appengine_v1beta4/service.rb +476 -0
- data/generated/google/apis/appengine_v1beta4.rb +35 -0
- data/generated/google/apis/appsactivity_v1/classes.rb +392 -0
- data/generated/google/apis/appsactivity_v1/representations.rb +184 -0
- data/generated/google/apis/appsactivity_v1/service.rb +128 -0
- data/generated/google/apis/appsactivity_v1.rb +46 -0
- data/generated/google/apis/appstate_v1/classes.rb +154 -0
- data/generated/google/apis/appstate_v1/representations.rb +79 -0
- data/generated/google/apis/appstate_v1/service.rb +260 -0
- data/generated/google/apis/appstate_v1.rb +34 -0
- data/generated/google/apis/autoscaler_v1beta2/classes.rb +747 -0
- data/generated/google/apis/autoscaler_v1beta2/representations.rb +281 -0
- data/generated/google/apis/autoscaler_v1beta2/service.rb +478 -0
- data/generated/google/apis/autoscaler_v1beta2.rb +38 -0
- data/generated/google/apis/bigquery_v2/classes.rb +2471 -0
- data/generated/google/apis/bigquery_v2/representations.rb +816 -0
- data/generated/google/apis/bigquery_v2/service.rb +982 -0
- data/generated/google/apis/bigquery_v2.rb +52 -0
- data/generated/google/apis/blogger_v3/classes.rb +1354 -0
- data/generated/google/apis/blogger_v3/representations.rb +562 -0
- data/generated/google/apis/blogger_v3/service.rb +1587 -0
- data/generated/google/apis/blogger_v3.rb +37 -0
- data/generated/google/apis/books_v1/classes.rb +3956 -0
- data/generated/google/apis/books_v1/representations.rb +1538 -0
- data/generated/google/apis/books_v1/service.rb +2290 -0
- data/generated/google/apis/books_v1.rb +34 -0
- data/generated/google/apis/calendar_v3/classes.rb +1742 -0
- data/generated/google/apis/calendar_v3/representations.rb +567 -0
- data/generated/google/apis/calendar_v3/service.rb +1968 -0
- data/generated/google/apis/calendar_v3.rb +37 -0
- data/generated/google/apis/civicinfo_v2/classes.rb +1127 -0
- data/generated/google/apis/civicinfo_v2/representations.rb +383 -0
- data/generated/google/apis/civicinfo_v2/service.rb +279 -0
- data/{lib/google/api_client/service_account.rb → generated/google/apis/civicinfo_v2.rb} +18 -8
- data/generated/google/apis/classroom_v1/classes.rb +512 -0
- data/generated/google/apis/classroom_v1/representations.rb +217 -0
- data/generated/google/apis/classroom_v1/service.rb +970 -0
- data/generated/google/apis/classroom_v1.rb +49 -0
- data/generated/google/apis/classroom_v1beta1/classes.rb +447 -0
- data/generated/google/apis/classroom_v1beta1/representations.rb +190 -0
- data/generated/google/apis/classroom_v1beta1/service.rb +791 -0
- data/generated/google/apis/classroom_v1beta1.rb +49 -0
- data/generated/google/apis/cloudbilling_v1/classes.rb +169 -0
- data/generated/google/apis/cloudbilling_v1/representations.rb +79 -0
- data/generated/google/apis/cloudbilling_v1/service.rb +258 -0
- data/generated/google/apis/cloudbilling_v1.rb +35 -0
- data/generated/google/apis/clouddebugger_v2/classes.rb +1004 -0
- data/generated/google/apis/clouddebugger_v2/representations.rb +410 -0
- data/generated/google/apis/clouddebugger_v2/service.rb +370 -0
- data/generated/google/apis/clouddebugger_v2.rb +41 -0
- data/generated/google/apis/cloudmonitoring_v2beta2/classes.rb +679 -0
- data/generated/google/apis/cloudmonitoring_v2beta2/representations.rb +311 -0
- data/generated/google/apis/cloudmonitoring_v2beta2/service.rb +452 -0
- data/generated/google/apis/cloudmonitoring_v2beta2.rb +37 -0
- data/generated/google/apis/cloudresourcemanager_v1beta1/classes.rb +437 -0
- data/generated/google/apis/cloudresourcemanager_v1beta1/representations.rb +188 -0
- data/generated/google/apis/cloudresourcemanager_v1beta1/service.rb +623 -0
- data/generated/google/apis/cloudresourcemanager_v1beta1.rb +38 -0
- data/generated/google/apis/cloudtrace_v1/classes.rb +188 -0
- data/generated/google/apis/cloudtrace_v1/representations.rb +92 -0
- data/generated/google/apis/cloudtrace_v1/service.rb +190 -0
- data/generated/google/apis/cloudtrace_v1.rb +35 -0
- data/generated/google/apis/clouduseraccounts_beta/classes.rb +823 -0
- data/generated/google/apis/clouduseraccounts_beta/representations.rb +313 -0
- data/generated/google/apis/clouduseraccounts_beta/service.rb +854 -0
- data/generated/google/apis/clouduseraccounts_beta.rb +43 -0
- data/generated/google/apis/compute_beta/classes.rb +9128 -0
- data/generated/google/apis/compute_beta/representations.rb +3048 -0
- data/generated/google/apis/compute_beta/service.rb +10154 -0
- data/generated/google/apis/compute_beta.rb +49 -0
- data/generated/google/apis/compute_v1/classes.rb +8681 -0
- data/generated/google/apis/compute_v1/representations.rb +2895 -0
- data/generated/google/apis/compute_v1/service.rb +9252 -0
- data/generated/google/apis/compute_v1.rb +49 -0
- data/generated/google/apis/container_v1/classes.rb +463 -0
- data/generated/google/apis/container_v1/representations.rb +175 -0
- data/generated/google/apis/container_v1/service.rb +367 -0
- data/generated/google/apis/container_v1.rb +35 -0
- data/generated/google/apis/container_v1beta1/classes.rb +466 -0
- data/generated/google/apis/container_v1beta1/representations.rb +177 -0
- data/generated/google/apis/container_v1beta1/service.rb +394 -0
- data/generated/google/apis/container_v1beta1.rb +35 -0
- data/generated/google/apis/content_v2/classes.rb +5986 -0
- data/generated/google/apis/content_v2/representations.rb +2288 -0
- data/generated/google/apis/content_v2/service.rb +2338 -0
- data/generated/google/apis/content_v2.rb +35 -0
- data/generated/google/apis/coordinate_v1/classes.rb +669 -0
- data/generated/google/apis/coordinate_v1/representations.rb +285 -0
- data/generated/google/apis/coordinate_v1/service.rb +678 -0
- data/generated/google/apis/coordinate_v1.rb +37 -0
- data/generated/google/apis/customsearch_v1/classes.rb +771 -0
- data/generated/google/apis/customsearch_v1/representations.rb +276 -0
- data/generated/google/apis/customsearch_v1/service.rb +207 -0
- data/{lib/google/api_client/auth/compute_service_account.rb → generated/google/apis/customsearch_v1.rb} +13 -10
- data/generated/google/apis/datastore_v1beta2/classes.rb +1186 -0
- data/generated/google/apis/datastore_v1beta2/representations.rb +526 -0
- data/generated/google/apis/datastore_v1beta2/service.rb +294 -0
- data/generated/google/apis/datastore_v1beta2.rb +40 -0
- data/generated/google/apis/deploymentmanager_v2/classes.rb +1091 -0
- data/generated/google/apis/deploymentmanager_v2/representations.rb +422 -0
- data/generated/google/apis/deploymentmanager_v2/service.rb +857 -0
- data/generated/google/apis/deploymentmanager_v2.rb +44 -0
- data/generated/google/apis/deploymentmanager_v2beta2/classes.rb +843 -0
- data/generated/google/apis/deploymentmanager_v2beta2/representations.rb +306 -0
- data/generated/google/apis/deploymentmanager_v2beta2/service.rb +689 -0
- data/generated/google/apis/deploymentmanager_v2beta2.rb +44 -0
- data/generated/google/apis/dfareporting_v2_1/classes.rb +10770 -0
- data/generated/google/apis/dfareporting_v2_1/representations.rb +3438 -0
- data/generated/google/apis/dfareporting_v2_1/service.rb +8585 -0
- data/generated/google/apis/dfareporting_v2_1.rb +37 -0
- data/generated/google/apis/discovery_v1/classes.rb +961 -0
- data/generated/google/apis/discovery_v1/representations.rb +357 -0
- data/generated/google/apis/discovery_v1/service.rb +142 -0
- data/generated/google/apis/discovery_v1.rb +32 -0
- data/generated/google/apis/dns_v1/classes.rb +406 -0
- data/generated/google/apis/dns_v1/representations.rb +151 -0
- data/generated/google/apis/dns_v1/service.rb +454 -0
- data/generated/google/apis/dns_v1.rb +44 -0
- data/generated/google/apis/doubleclickbidmanager_v1/classes.rb +716 -0
- data/generated/google/apis/doubleclickbidmanager_v1/representations.rb +298 -0
- data/generated/google/apis/doubleclickbidmanager_v1/service.rb +341 -0
- data/generated/google/apis/doubleclickbidmanager_v1.rb +31 -0
- data/generated/google/apis/doubleclicksearch_v2/classes.rb +956 -0
- data/generated/google/apis/doubleclicksearch_v2/representations.rb +316 -0
- data/generated/google/apis/doubleclicksearch_v2/service.rb +480 -0
- data/generated/google/apis/doubleclicksearch_v2.rb +35 -0
- data/generated/google/apis/drive_v2/classes.rb +2562 -0
- data/generated/google/apis/drive_v2/representations.rb +795 -0
- data/generated/google/apis/drive_v2/service.rb +2696 -0
- data/generated/google/apis/drive_v2.rb +58 -0
- data/generated/google/apis/drive_v3/classes.rb +1534 -0
- data/generated/google/apis/drive_v3/representations.rb +497 -0
- data/generated/google/apis/drive_v3/service.rb +1541 -0
- data/generated/google/apis/drive_v3.rb +55 -0
- data/generated/google/apis/fitness_v1/classes.rb +885 -0
- data/generated/google/apis/fitness_v1/representations.rb +320 -0
- data/generated/google/apis/fitness_v1/service.rb +675 -0
- data/generated/google/apis/fitness_v1.rb +49 -0
- data/generated/google/apis/fusiontables_v2/classes.rb +1048 -0
- data/generated/google/apis/fusiontables_v2/representations.rb +409 -0
- data/generated/google/apis/fusiontables_v2/service.rb +1463 -0
- data/generated/google/apis/fusiontables_v2.rb +37 -0
- data/generated/google/apis/games_configuration_v1configuration/classes.rb +506 -0
- data/generated/google/apis/games_configuration_v1configuration/representations.rb +206 -0
- data/generated/google/apis/games_configuration_v1configuration/service.rb +565 -0
- data/generated/google/apis/games_configuration_v1configuration.rb +34 -0
- data/generated/google/apis/games_management_v1management/classes.rb +524 -0
- data/generated/google/apis/games_management_v1management/representations.rb +231 -0
- data/generated/google/apis/games_management_v1management/service.rb +994 -0
- data/generated/google/apis/games_management_v1management.rb +37 -0
- data/generated/google/apis/games_v1/classes.rb +4617 -0
- data/generated/google/apis/games_v1/representations.rb +1584 -0
- data/generated/google/apis/games_v1/service.rb +2290 -0
- data/generated/google/apis/games_v1.rb +40 -0
- data/generated/google/apis/gan_v1beta1/classes.rb +1428 -0
- data/generated/google/apis/gan_v1beta1/representations.rb +428 -0
- data/generated/google/apis/gan_v1beta1/service.rb +682 -0
- data/generated/google/apis/gan_v1beta1.rb +31 -0
- data/generated/google/apis/genomics_v1/classes.rb +2609 -0
- data/generated/google/apis/genomics_v1/representations.rb +909 -0
- data/generated/google/apis/genomics_v1/service.rb +1676 -0
- data/generated/google/apis/genomics_v1.rb +49 -0
- data/generated/google/apis/genomics_v1beta2/classes.rb +3288 -0
- data/generated/google/apis/genomics_v1beta2/representations.rb +1194 -0
- data/generated/google/apis/genomics_v1beta2/service.rb +2392 -0
- data/generated/google/apis/genomics_v1beta2.rb +46 -0
- data/generated/google/apis/gmail_v1/classes.rb +794 -0
- data/generated/google/apis/gmail_v1/representations.rb +339 -0
- data/generated/google/apis/gmail_v1/service.rb +1470 -0
- data/generated/google/apis/gmail_v1.rb +52 -0
- data/generated/google/apis/groupsmigration_v1/classes.rb +51 -0
- data/generated/google/apis/groupsmigration_v1/representations.rb +38 -0
- data/generated/google/apis/groupsmigration_v1/service.rb +110 -0
- data/generated/google/apis/groupsmigration_v1.rb +34 -0
- data/generated/google/apis/groupssettings_v1/classes.rb +221 -0
- data/generated/google/apis/groupssettings_v1/representations.rb +64 -0
- data/generated/google/apis/groupssettings_v1/service.rb +179 -0
- data/generated/google/apis/groupssettings_v1.rb +34 -0
- data/generated/google/apis/identitytoolkit_v3/classes.rb +1466 -0
- data/generated/google/apis/identitytoolkit_v3/representations.rb +509 -0
- data/generated/google/apis/identitytoolkit_v3/service.rb +581 -0
- data/generated/google/apis/identitytoolkit_v3.rb +31 -0
- data/generated/google/apis/kgsearch_v1/classes.rb +59 -0
- data/generated/google/apis/kgsearch_v1/representations.rb +39 -0
- data/generated/google/apis/kgsearch_v1/service.rb +111 -0
- data/{spec/google/api_client/request_spec.rb → generated/google/apis/kgsearch_v1.rb} +16 -13
- data/generated/google/apis/licensing_v1/classes.rb +132 -0
- data/generated/google/apis/licensing_v1/representations.rb +68 -0
- data/generated/google/apis/licensing_v1/service.rb +369 -0
- data/generated/google/apis/licensing_v1.rb +34 -0
- data/generated/google/apis/logging_v1beta3/classes.rb +1079 -0
- data/generated/google/apis/logging_v1beta3/representations.rb +366 -0
- data/generated/google/apis/logging_v1beta3/service.rb +1001 -0
- data/generated/google/apis/logging_v1beta3.rb +47 -0
- data/generated/google/apis/manager_v1beta2/classes.rb +1287 -0
- data/generated/google/apis/manager_v1beta2/representations.rb +536 -0
- data/generated/google/apis/manager_v1beta2/service.rb +372 -0
- data/generated/google/apis/manager_v1beta2.rb +53 -0
- data/generated/google/apis/mapsengine_v1/classes.rb +2873 -0
- data/generated/google/apis/mapsengine_v1/representations.rb +1235 -0
- data/generated/google/apis/mapsengine_v1/service.rb +3388 -0
- data/generated/google/apis/mapsengine_v1.rb +38 -0
- data/generated/google/apis/mirror_v1/classes.rb +1072 -0
- data/generated/google/apis/mirror_v1/representations.rb +350 -0
- data/generated/google/apis/mirror_v1/service.rb +977 -0
- data/generated/google/apis/mirror_v1.rb +37 -0
- data/generated/google/apis/oauth2_v2/classes.rb +245 -0
- data/generated/google/apis/oauth2_v2/representations.rb +94 -0
- data/generated/google/apis/oauth2_v2/service.rb +199 -0
- data/generated/google/apis/oauth2_v2.rb +43 -0
- data/generated/google/apis/pagespeedonline_v2/classes.rb +614 -0
- data/generated/google/apis/pagespeedonline_v2/representations.rb +244 -0
- data/generated/google/apis/pagespeedonline_v2/service.rb +119 -0
- data/generated/google/apis/pagespeedonline_v2.rb +32 -0
- data/generated/google/apis/partners_v2/classes.rb +942 -0
- data/generated/google/apis/partners_v2/representations.rb +402 -0
- data/generated/google/apis/partners_v2/service.rb +400 -0
- data/generated/google/apis/partners_v2.rb +32 -0
- data/generated/google/apis/plus_domains_v1/classes.rb +2609 -0
- data/generated/google/apis/plus_domains_v1/representations.rb +987 -0
- data/generated/google/apis/plus_domains_v1/service.rb +904 -0
- data/generated/google/apis/plus_domains_v1.rb +61 -0
- data/generated/google/apis/plus_v1/classes.rb +2094 -0
- data/generated/google/apis/plus_v1/representations.rb +805 -0
- data/generated/google/apis/plus_v1/service.rb +470 -0
- data/generated/google/apis/plus_v1.rb +43 -0
- data/generated/google/apis/prediction_v1_6/classes.rb +751 -0
- data/generated/google/apis/prediction_v1_6/representations.rb +327 -0
- data/generated/google/apis/prediction_v1_6/service.rb +380 -0
- data/generated/google/apis/prediction_v1_6.rb +44 -0
- data/generated/google/apis/proximitybeacon_v1beta1/classes.rb +639 -0
- data/generated/google/apis/proximitybeacon_v1beta1/representations.rb +274 -0
- data/generated/google/apis/proximitybeacon_v1beta1/service.rb +591 -0
- data/generated/google/apis/proximitybeacon_v1beta1.rb +31 -0
- data/generated/google/apis/pubsub_v1/classes.rb +614 -0
- data/generated/google/apis/pubsub_v1/representations.rb +281 -0
- data/generated/google/apis/pubsub_v1/service.rb +774 -0
- data/generated/google/apis/pubsub_v1.rb +37 -0
- data/generated/google/apis/pubsub_v1beta2/classes.rb +620 -0
- data/generated/google/apis/pubsub_v1beta2/representations.rb +282 -0
- data/generated/google/apis/pubsub_v1beta2/service.rb +774 -0
- data/generated/google/apis/pubsub_v1beta2.rb +37 -0
- data/generated/google/apis/qpx_express_v1/classes.rb +1268 -0
- data/generated/google/apis/qpx_express_v1/representations.rb +424 -0
- data/generated/google/apis/qpx_express_v1/service.rb +100 -0
- data/generated/google/apis/qpx_express_v1.rb +31 -0
- data/generated/google/apis/replicapool_v1beta2/classes.rb +631 -0
- data/generated/google/apis/replicapool_v1beta2/representations.rb +236 -0
- data/generated/google/apis/replicapool_v1beta2/service.rb +608 -0
- data/generated/google/apis/replicapool_v1beta2.rb +44 -0
- data/generated/google/apis/replicapoolupdater_v1beta1/classes.rb +733 -0
- data/generated/google/apis/replicapoolupdater_v1beta1/representations.rb +264 -0
- data/generated/google/apis/replicapoolupdater_v1beta1/service.rb +508 -0
- data/generated/google/apis/replicapoolupdater_v1beta1.rb +44 -0
- data/generated/google/apis/reseller_v1/classes.rb +520 -0
- data/generated/google/apis/reseller_v1/representations.rb +200 -0
- data/generated/google/apis/reseller_v1/service.rb +623 -0
- data/generated/google/apis/reseller_v1.rb +37 -0
- data/generated/google/apis/resourceviews_v1beta2/classes.rb +660 -0
- data/generated/google/apis/resourceviews_v1beta2/representations.rb +269 -0
- data/generated/google/apis/resourceviews_v1beta2/service.rb +563 -0
- data/generated/google/apis/resourceviews_v1beta2.rb +50 -0
- data/generated/google/apis/script_v1/classes.rb +259 -0
- data/generated/google/apis/script_v1/representations.rb +106 -0
- data/generated/google/apis/script_v1/service.rb +98 -0
- data/generated/google/apis/script_v1.rb +61 -0
- data/generated/google/apis/site_verification_v1/classes.rb +185 -0
- data/generated/google/apis/site_verification_v1/representations.rb +101 -0
- data/generated/google/apis/site_verification_v1/service.rb +315 -0
- data/generated/google/apis/site_verification_v1.rb +37 -0
- data/generated/google/apis/sqladmin_v1beta4/classes.rb +2001 -0
- data/generated/google/apis/sqladmin_v1beta4/representations.rb +758 -0
- data/generated/google/apis/sqladmin_v1beta4/service.rb +1625 -0
- data/generated/google/apis/sqladmin_v1beta4.rb +37 -0
- data/generated/google/apis/storage_v1/classes.rb +1222 -0
- data/generated/google/apis/storage_v1/representations.rb +445 -0
- data/generated/google/apis/storage_v1/service.rb +1903 -0
- data/generated/google/apis/storage_v1.rb +46 -0
- data/generated/google/apis/storagetransfer_v1/classes.rb +1046 -0
- data/generated/google/apis/storagetransfer_v1/representations.rb +370 -0
- data/generated/google/apis/storagetransfer_v1/service.rb +473 -0
- data/generated/google/apis/storagetransfer_v1.rb +35 -0
- data/generated/google/apis/tagmanager_v1/classes.rb +1384 -0
- data/generated/google/apis/tagmanager_v1/representations.rb +515 -0
- data/generated/google/apis/tagmanager_v1/service.rb +1817 -0
- data/generated/google/apis/tagmanager_v1.rb +52 -0
- data/generated/google/apis/taskqueue_v1beta2/classes.rb +254 -0
- data/generated/google/apis/taskqueue_v1beta2/representations.rb +114 -0
- data/generated/google/apis/taskqueue_v1beta2/service.rb +408 -0
- data/generated/google/apis/taskqueue_v1beta2.rb +37 -0
- data/generated/google/apis/tasks_v1/classes.rb +296 -0
- data/generated/google/apis/tasks_v1/representations.rb +115 -0
- data/generated/google/apis/tasks_v1/service.rb +643 -0
- data/generated/google/apis/tasks_v1.rb +37 -0
- data/generated/google/apis/translate_v2/classes.rb +168 -0
- data/generated/google/apis/translate_v2/representations.rb +109 -0
- data/generated/google/apis/translate_v2/service.rb +182 -0
- data/generated/google/apis/translate_v2.rb +31 -0
- data/generated/google/apis/urlshortener_v1/classes.rb +246 -0
- data/generated/google/apis/urlshortener_v1/representations.rb +111 -0
- data/generated/google/apis/urlshortener_v1/service.rb +176 -0
- data/generated/google/apis/urlshortener_v1.rb +34 -0
- data/generated/google/apis/webmasters_v3/classes.rb +563 -0
- data/generated/google/apis/webmasters_v3/representations.rb +250 -0
- data/generated/google/apis/webmasters_v3/service.rb +573 -0
- data/generated/google/apis/webmasters_v3.rb +37 -0
- data/generated/google/apis/youtube_analytics_v1/classes.rb +546 -0
- data/generated/google/apis/youtube_analytics_v1/representations.rb +243 -0
- data/generated/google/apis/youtube_analytics_v1/service.rb +562 -0
- data/generated/google/apis/youtube_analytics_v1.rb +46 -0
- data/generated/google/apis/youtube_v3/classes.rb +8136 -0
- data/generated/google/apis/youtube_v3/representations.rb +2838 -0
- data/generated/google/apis/youtube_v3/service.rb +4403 -0
- data/generated/google/apis/youtube_v3.rb +49 -0
- data/generated/google/apis/youtubereporting_v1/classes.rb +258 -0
- data/generated/google/apis/youtubereporting_v1/representations.rb +128 -0
- data/generated/google/apis/youtubereporting_v1/service.rb +364 -0
- data/generated/google/apis/youtubereporting_v1.rb +38 -0
- data/google-api-client.gemspec +27 -39
- data/lib/google/api_client/auth/installed_app.rb +7 -5
- data/lib/google/api_client/auth/key_utils.rb +12 -11
- data/lib/google/api_client/auth/storage.rb +5 -2
- data/lib/google/api_client/auth/storages/file_store.rb +2 -3
- data/lib/google/api_client/auth/storages/redis_store.rb +7 -2
- data/lib/google/api_client/client_secrets.rb +4 -5
- data/lib/google/apis/core/api_command.rb +135 -0
- data/lib/google/apis/core/base_service.rb +317 -0
- data/lib/google/apis/core/batch.rb +239 -0
- data/lib/google/apis/core/download.rb +94 -0
- data/lib/google/apis/core/hashable.rb +44 -0
- data/lib/google/apis/core/http_client_adapter.rb +82 -0
- data/lib/google/apis/core/http_command.rb +312 -0
- data/lib/google/apis/core/json_representation.rb +127 -0
- data/lib/google/{api_client/version.rb → apis/core/logging.rb} +12 -8
- data/lib/google/apis/core/multipart.rb +187 -0
- data/lib/google/apis/core/upload.rb +288 -0
- data/lib/google/{api_client → apis}/errors.rb +39 -28
- data/lib/google/apis/generator/annotator.rb +295 -0
- data/lib/google/apis/generator/helpers.rb +74 -0
- data/lib/google/apis/generator/model.rb +143 -0
- data/lib/google/apis/generator/template.rb +124 -0
- data/lib/google/apis/generator/templates/_class.tmpl +40 -0
- data/lib/google/apis/generator/templates/_method.tmpl +92 -0
- data/lib/google/apis/generator/templates/_representation.tmpl +51 -0
- data/lib/google/apis/generator/templates/_representation_stub.tmpl +15 -0
- data/lib/google/apis/generator/templates/_representation_type.tmpl +10 -0
- data/lib/google/{api_client/reference.rb → apis/generator/templates/classes.rb.tmpl} +11 -9
- data/lib/google/apis/generator/templates/module.rb.tmpl +40 -0
- data/lib/google/apis/generator/templates/representations.rb.tmpl +32 -0
- data/lib/google/apis/generator/templates/service.rb.tmpl +60 -0
- data/lib/google/apis/generator.rb +70 -0
- data/lib/google/apis/options.rb +85 -0
- data/lib/google/apis/version.rb +39 -0
- data/lib/google/apis.rb +48 -0
- data/rakelib/metrics.rake +22 -0
- data/rakelib/rubocop.rake +10 -0
- data/rakelib/spec.rake +11 -0
- data/rakelib/yard.rake +11 -0
- data/samples/Gemfile +7 -0
- data/samples/README.md +51 -0
- data/samples/google-api-samples +32 -0
- data/samples/lib/base_cli.rb +94 -0
- data/samples/lib/samples/analytics.rb +62 -0
- data/samples/lib/samples/calendar.rb +83 -0
- data/samples/lib/samples/drive.rb +82 -0
- data/samples/lib/samples/gmail.rb +50 -0
- data/samples/lib/samples/pubsub.rb +114 -0
- data/samples/lib/samples/translate.rb +44 -0
- data/samples/lib/samples/you_tube.rb +44 -0
- data/script/generate +95 -0
- data/script/package +8 -0
- data/script/release +15 -0
- data/spec/fixtures/files/api_names.yaml +3 -0
- data/spec/fixtures/files/auth_stored_credentials.json +8 -0
- data/spec/fixtures/files/child/.gitignore +0 -0
- data/spec/fixtures/files/client_secrets.json +1 -0
- data/spec/fixtures/files/invalid.json +1 -0
- data/spec/fixtures/files/test.blah +1 -0
- data/spec/fixtures/files/test.txt +1 -0
- data/spec/fixtures/files/test_api.json +440 -0
- data/spec/google/api_client/auth/storage_spec.rb +1 -3
- data/spec/google/api_client/auth/storages/file_store_spec.rb +1 -2
- data/spec/google/api_client/auth/storages/redis_store_spec.rb +1 -3
- data/spec/google/api_client/client_secrets_spec.rb +38 -1
- data/spec/google/apis/core/api_command_spec.rb +209 -0
- data/spec/google/apis/core/batch_spec.rb +142 -0
- data/spec/google/apis/core/download_spec.rb +103 -0
- data/spec/google/apis/core/hashable_spec.rb +60 -0
- data/spec/google/apis/core/http_command_spec.rb +284 -0
- data/spec/google/apis/core/json_representation_spec.rb +192 -0
- data/spec/google/apis/core/service_spec.rb +247 -0
- data/spec/google/apis/core/upload_spec.rb +300 -0
- data/{lib/google/api_client/discovery.rb → spec/google/apis/generated_spec.rb} +13 -5
- data/spec/google/apis/generator/generator_spec.rb +272 -0
- data/spec/google/apis/logging_spec.rb +45 -0
- data/spec/google/apis/options_spec.rb +40 -0
- data/spec/integration_tests/adsense_spec.rb +29 -0
- data/spec/integration_tests/drive_spec.rb +35 -0
- data/spec/integration_tests/pubsub_spec.rb +48 -0
- data/spec/integration_tests/url_shortener_spec.rb +45 -0
- data/spec/spec_helper/load_path_spec.rb +33 -0
- data/spec/spec_helper.rb +131 -44
- data/third_party/hurley_patches.rb +103 -0
- metadata +533 -170
- data/lib/compat/multi_json.rb +0 -19
- data/lib/google/api_client/auth/file_storage.rb +0 -59
- data/lib/google/api_client/auth/jwt_asserter.rb +0 -126
- data/lib/google/api_client/auth/pkcs12.rb +0 -41
- data/lib/google/api_client/batch.rb +0 -325
- data/lib/google/api_client/charset.rb +0 -33
- data/lib/google/api_client/discovery/api.rb +0 -300
- data/lib/google/api_client/discovery/media.rb +0 -77
- data/lib/google/api_client/discovery/method.rb +0 -363
- data/lib/google/api_client/discovery/resource.rb +0 -156
- data/lib/google/api_client/discovery/schema.rb +0 -119
- data/lib/google/api_client/environment.rb +0 -42
- data/lib/google/api_client/gzip.rb +0 -28
- data/lib/google/api_client/logging.rb +0 -32
- data/lib/google/api_client/media.rb +0 -259
- data/lib/google/api_client/railtie.rb +0 -18
- data/lib/google/api_client/request.rb +0 -350
- data/lib/google/api_client/result.rb +0 -255
- data/lib/google/api_client/service/batch.rb +0 -110
- data/lib/google/api_client/service/request.rb +0 -144
- data/lib/google/api_client/service/resource.rb +0 -40
- data/lib/google/api_client/service/result.rb +0 -162
- data/lib/google/api_client/service/simple_file_store.rb +0 -151
- data/lib/google/api_client/service/stub_generator.rb +0 -61
- data/lib/google/api_client/service.rb +0 -233
- data/lib/google/api_client.rb +0 -750
- data/spec/google/api_client/batch_spec.rb +0 -248
- data/spec/google/api_client/discovery_spec.rb +0 -662
- data/spec/google/api_client/gzip_spec.rb +0 -98
- data/spec/google/api_client/media_spec.rb +0 -178
- data/spec/google/api_client/result_spec.rb +0 -207
- data/spec/google/api_client/service_account_spec.rb +0 -169
- data/spec/google/api_client/service_spec.rb +0 -618
- data/spec/google/api_client/simple_file_store_spec.rb +0 -133
- data/spec/google/api_client_spec.rb +0 -352
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
# Copyright 2015 Google Inc.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
require 'google/apis/core/multipart'
|
|
16
|
+
require 'google/apis/core/http_command'
|
|
17
|
+
require 'google/apis/core/api_command'
|
|
18
|
+
require 'google/apis/errors'
|
|
19
|
+
require 'addressable/uri'
|
|
20
|
+
require 'mime-types'
|
|
21
|
+
|
|
22
|
+
module Google
|
|
23
|
+
module Apis
|
|
24
|
+
module Core
|
|
25
|
+
# Extension of Hurley's UploadIO to add length accessor
|
|
26
|
+
class UploadIO < Hurley::UploadIO
|
|
27
|
+
OCTET_STREAM_CONTENT_TYPE = 'application/octet-stream'
|
|
28
|
+
|
|
29
|
+
# Get the length of the stream
|
|
30
|
+
# @return [Fixnum]
|
|
31
|
+
def length
|
|
32
|
+
io.respond_to?(:length) ? io.length : File.size(local_path)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Create a new instance given a file path
|
|
36
|
+
# @param [String, File] file_name
|
|
37
|
+
# Path to file
|
|
38
|
+
# @param [String] content_type
|
|
39
|
+
# Optional content type. If nil, will attempt to auto-detect
|
|
40
|
+
# @return [Google::Apis::Core::UploadIO]
|
|
41
|
+
def self.from_file(file_name, content_type: nil)
|
|
42
|
+
if content_type.nil?
|
|
43
|
+
type = MIME::Types.of(file_name)
|
|
44
|
+
content_type = type.first.content_type unless type.nil? || type.empty?
|
|
45
|
+
end
|
|
46
|
+
new(file_name, content_type || OCTET_STREAM_CONTENT_TYPE)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Wraps an IO stream in UploadIO
|
|
50
|
+
# @param [#read] io
|
|
51
|
+
# IO to wrap
|
|
52
|
+
# @param [String] content_type
|
|
53
|
+
# Optional content type.
|
|
54
|
+
# @return [Google::Apis::Core::UploadIO]
|
|
55
|
+
def self.from_io(io, content_type: OCTET_STREAM_CONTENT_TYPE)
|
|
56
|
+
new(io, content_type)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Base upload command. Not intended to be used directly
|
|
61
|
+
# @private
|
|
62
|
+
class BaseUploadCommand < ApiCommand
|
|
63
|
+
UPLOAD_PROTOCOL_HEADER = 'X-Goog-Upload-Protocol'
|
|
64
|
+
UPLOAD_CONTENT_TYPE_HEADER = 'X-Goog-Upload-Header-Content-Type'
|
|
65
|
+
UPLOAD_CONTENT_LENGTH = 'X-Goog-Upload-Header-Content-Length'
|
|
66
|
+
|
|
67
|
+
# File name or IO containing the content to upload
|
|
68
|
+
# @return [String, File, #read]
|
|
69
|
+
attr_accessor :upload_source
|
|
70
|
+
|
|
71
|
+
# Content type of the upload material
|
|
72
|
+
# @return [String]
|
|
73
|
+
attr_accessor :upload_content_type
|
|
74
|
+
|
|
75
|
+
# Content, as UploadIO
|
|
76
|
+
# @return [Google::Apis::Core::UploadIO]
|
|
77
|
+
attr_accessor :upload_io
|
|
78
|
+
|
|
79
|
+
# Ensure the content is readable and wrapped in an {{Google::Apis::Core::UploadIO}} instance.
|
|
80
|
+
#
|
|
81
|
+
# @return [void]
|
|
82
|
+
# @raise [Google::Apis::ClientError] if upload source is invalid
|
|
83
|
+
def prepare!
|
|
84
|
+
super
|
|
85
|
+
if streamable?(upload_source)
|
|
86
|
+
self.upload_io = UploadIO.from_io(upload_source, content_type: upload_content_type)
|
|
87
|
+
@close_io_on_finish = false
|
|
88
|
+
elsif upload_source.is_a?(String)
|
|
89
|
+
self.upload_io = UploadIO.from_file(upload_source, content_type: upload_content_type)
|
|
90
|
+
@close_io_on_finish = true
|
|
91
|
+
else
|
|
92
|
+
fail Google::Apis::ClientError, 'Invalid upload source'
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# Close IO stream when command done. Only closes the stream if it was opened by the command.
|
|
97
|
+
def release!
|
|
98
|
+
upload_io.close if @close_io_on_finish
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
private
|
|
102
|
+
|
|
103
|
+
def streamable?(upload_source)
|
|
104
|
+
upload_source.is_a?(IO) || upload_source.is_a?(StringIO) || upload_source.is_a?(Tempfile)
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
# Implementation of the raw upload protocol
|
|
109
|
+
class RawUploadCommand < BaseUploadCommand
|
|
110
|
+
RAW_PROTOCOL = 'raw'
|
|
111
|
+
|
|
112
|
+
# Ensure the content is readable and wrapped in an {{Google::Apis::Core::UploadIO}} instance.
|
|
113
|
+
#
|
|
114
|
+
# @return [void]
|
|
115
|
+
# @raise [Google::Apis::ClientError] if upload source is invalid
|
|
116
|
+
def prepare!
|
|
117
|
+
super
|
|
118
|
+
self.body = upload_io
|
|
119
|
+
header[UPLOAD_PROTOCOL_HEADER] = RAW_PROTOCOL
|
|
120
|
+
header[UPLOAD_CONTENT_TYPE_HEADER] = upload_io.content_type
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
# Implementation of the multipart upload protocol
|
|
125
|
+
class MultipartUploadCommand < BaseUploadCommand
|
|
126
|
+
UPLOAD_BOUNDARY = 'RubyApiClientUpload'
|
|
127
|
+
MULTIPART_PROTOCOL = 'multipart'
|
|
128
|
+
MULTIPART_RELATED = 'multipart/related'
|
|
129
|
+
|
|
130
|
+
# Encode the multipart request
|
|
131
|
+
#
|
|
132
|
+
# @return [void]
|
|
133
|
+
# @raise [Google::Apis::ClientError] if upload source is invalid
|
|
134
|
+
def prepare!
|
|
135
|
+
super
|
|
136
|
+
@multipart = Multipart.new(boundary: UPLOAD_BOUNDARY, content_type: MULTIPART_RELATED)
|
|
137
|
+
@multipart.add_json(body)
|
|
138
|
+
@multipart.add_upload(upload_io)
|
|
139
|
+
self.body = @multipart.assemble
|
|
140
|
+
header[:content_type] = @multipart.content_type
|
|
141
|
+
header[UPLOAD_PROTOCOL_HEADER] = MULTIPART_PROTOCOL
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
# Implementation of the resumable upload protocol
|
|
146
|
+
class ResumableUploadCommand < BaseUploadCommand
|
|
147
|
+
UPLOAD_COMMAND_HEADER = 'X-Goog-Upload-Command'
|
|
148
|
+
UPLOAD_OFFSET_HEADER = 'X-Goog-Upload-Offset'
|
|
149
|
+
BYTES_RECEIVED_HEADER = 'X-Goog-Upload-Size-Received'
|
|
150
|
+
UPLOAD_URL_HEADER = 'X-Goog-Upload-URL'
|
|
151
|
+
UPLOAD_STATUS_HEADER = 'X-Goog-Upload-Status'
|
|
152
|
+
STATUS_ACTIVE = 'active'
|
|
153
|
+
STATUS_FINAL = 'final'
|
|
154
|
+
STATUS_CANCELLED = 'cancelled'
|
|
155
|
+
RESUMABLE = 'resumable'
|
|
156
|
+
START_COMMAND = 'start'
|
|
157
|
+
QUERY_COMMAND = 'query'
|
|
158
|
+
UPLOAD_COMMAND = 'upload, finalize'
|
|
159
|
+
|
|
160
|
+
# Reset upload to initial state.
|
|
161
|
+
#
|
|
162
|
+
# @return [void]
|
|
163
|
+
# @raise [Google::Apis::ClientError] if upload source is invalid
|
|
164
|
+
def prepare!
|
|
165
|
+
@state = :start
|
|
166
|
+
@upload_url = nil
|
|
167
|
+
@offset = 0
|
|
168
|
+
super
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
# Check the to see if the upload is complete or needs to be resumed.
|
|
172
|
+
#
|
|
173
|
+
# @param [Fixnum] status
|
|
174
|
+
# HTTP status code of response
|
|
175
|
+
# @param [Hurley::Header] header
|
|
176
|
+
# Response headers
|
|
177
|
+
# @param [String, #read] body
|
|
178
|
+
# Response body
|
|
179
|
+
# @return [Object]
|
|
180
|
+
# Response object
|
|
181
|
+
# @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
|
|
182
|
+
# @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
|
|
183
|
+
# @raise [Google::Apis::AuthorizationError] Authorization is required
|
|
184
|
+
def process_response(status, header, body)
|
|
185
|
+
@offset = Integer(header[BYTES_RECEIVED_HEADER]) if header.key?(BYTES_RECEIVED_HEADER)
|
|
186
|
+
@upload_url = header[UPLOAD_URL_HEADER] if header.key?(UPLOAD_URL_HEADER)
|
|
187
|
+
upload_status = header[UPLOAD_STATUS_HEADER]
|
|
188
|
+
logger.debug { sprintf('Upload status %s', upload_status) }
|
|
189
|
+
if upload_status == STATUS_ACTIVE
|
|
190
|
+
@state = :active
|
|
191
|
+
elsif upload_status == STATUS_FINAL
|
|
192
|
+
@state = :final
|
|
193
|
+
elsif upload_status == STATUS_CANCELLED
|
|
194
|
+
@state = :cancelled
|
|
195
|
+
fail Google::Apis::ClientError, body
|
|
196
|
+
end
|
|
197
|
+
super(status, header, body)
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
# Send the start command to initiate the upload
|
|
201
|
+
#
|
|
202
|
+
# @param [Hurley::Client] client
|
|
203
|
+
# HTTP client
|
|
204
|
+
# @return [Hurley::Response]
|
|
205
|
+
# @raise [Google::Apis::ServerError] Unable to send the request
|
|
206
|
+
def send_start_command(client)
|
|
207
|
+
logger.debug { sprintf('Sending upload start command to %s', url) }
|
|
208
|
+
client.send(method, url, body) do |req|
|
|
209
|
+
apply_request_options(req)
|
|
210
|
+
req.header[UPLOAD_PROTOCOL_HEADER] = RESUMABLE
|
|
211
|
+
req.header[UPLOAD_COMMAND_HEADER] = START_COMMAND
|
|
212
|
+
req.header[UPLOAD_CONTENT_LENGTH] = upload_io.length.to_s
|
|
213
|
+
req.header[UPLOAD_CONTENT_TYPE_HEADER] = upload_io.content_type
|
|
214
|
+
end
|
|
215
|
+
rescue => e
|
|
216
|
+
raise Google::Apis::ServerError, e.message
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
# Query for the status of an incomplete upload
|
|
220
|
+
#
|
|
221
|
+
# @param [Hurley::Client] client
|
|
222
|
+
# HTTP client
|
|
223
|
+
# @return [Hurley::Response]
|
|
224
|
+
# @raise [Google::Apis::ServerError] Unable to send the request
|
|
225
|
+
def send_query_command(client)
|
|
226
|
+
logger.debug { sprintf('Sending upload query command to %s', @upload_url) }
|
|
227
|
+
client.post(@upload_url, nil) do |req|
|
|
228
|
+
apply_request_options(req)
|
|
229
|
+
req.header[UPLOAD_COMMAND_HEADER] = QUERY_COMMAND
|
|
230
|
+
end
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
# Send the actual content
|
|
234
|
+
#
|
|
235
|
+
# @param [Hurley::Client] client
|
|
236
|
+
# HTTP client
|
|
237
|
+
# @return [Hurley::Response]
|
|
238
|
+
# @raise [Google::Apis::ServerError] Unable to send the request
|
|
239
|
+
def send_upload_command(client)
|
|
240
|
+
logger.debug { sprintf('Sending upload command to %s', @upload_url) }
|
|
241
|
+
content = upload_io
|
|
242
|
+
content.pos = @offset
|
|
243
|
+
client.post(@upload_url, content) do |req|
|
|
244
|
+
apply_request_options(req)
|
|
245
|
+
req.header[UPLOAD_COMMAND_HEADER] = UPLOAD_COMMAND
|
|
246
|
+
req.header[UPLOAD_OFFSET_HEADER] = @offset.to_s
|
|
247
|
+
end
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
# Execute the upload request once. This will typically perform two HTTP requests -- one to initiate or query
|
|
251
|
+
# for the status of the upload, the second to send the (remaining) content.
|
|
252
|
+
#
|
|
253
|
+
# @private
|
|
254
|
+
# @param [Hurley::Client] client
|
|
255
|
+
# HTTP client
|
|
256
|
+
# @yield [result, err] Result or error if block supplied
|
|
257
|
+
# @return [Object]
|
|
258
|
+
# @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
|
|
259
|
+
# @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
|
|
260
|
+
# @raise [Google::Apis::AuthorizationError] Authorization is required
|
|
261
|
+
def execute_once(client, &block)
|
|
262
|
+
case @state
|
|
263
|
+
when :start
|
|
264
|
+
response = send_start_command(client)
|
|
265
|
+
result = process_response(response.status_code, response.header, response.body)
|
|
266
|
+
when :active
|
|
267
|
+
response = send_query_command(client)
|
|
268
|
+
result = process_response(response.status_code, response.header, response.body)
|
|
269
|
+
when :cancelled, :final
|
|
270
|
+
error(@last_error, rethrow: true, &block)
|
|
271
|
+
end
|
|
272
|
+
if @state == :active
|
|
273
|
+
response = send_upload_command(client)
|
|
274
|
+
result = process_response(response.status_code, response.header, response.body)
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
success(result, &block) if @state == :final
|
|
278
|
+
rescue => e
|
|
279
|
+
# Some APIs like Youtube generate non-retriable 401 errors and mark
|
|
280
|
+
# the upload as finalized. Save the error just in case we get
|
|
281
|
+
# retried.
|
|
282
|
+
@last_error = e
|
|
283
|
+
error(e, rethrow: true, &block)
|
|
284
|
+
end
|
|
285
|
+
end
|
|
286
|
+
end
|
|
287
|
+
end
|
|
288
|
+
end
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright
|
|
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,54 +12,65 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
|
-
|
|
16
15
|
module Google
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
module Apis
|
|
17
|
+
# Base error, capable of wrapping another
|
|
18
|
+
class Error < StandardError
|
|
19
|
+
attr_reader :status_code
|
|
20
|
+
attr_reader :header
|
|
21
|
+
attr_reader :body
|
|
22
|
+
|
|
23
|
+
def initialize(err, status_code: nil, header: nil, body: nil)
|
|
24
|
+
@cause = nil
|
|
25
|
+
|
|
26
|
+
if err.respond_to?(:backtrace)
|
|
27
|
+
super(err.message)
|
|
28
|
+
@cause = err
|
|
29
|
+
else
|
|
30
|
+
super(err.to_s)
|
|
31
|
+
end
|
|
32
|
+
@status_code = status_code
|
|
33
|
+
@header = header.dup unless header.nil?
|
|
34
|
+
@body = body
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def backtrace
|
|
38
|
+
if @cause
|
|
39
|
+
@cause.backtrace
|
|
40
|
+
else
|
|
41
|
+
super
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
19
46
|
# An error which is raised when there is an unexpected response or other
|
|
20
47
|
# transport error that prevents an operation from succeeding.
|
|
21
|
-
class TransmissionError <
|
|
22
|
-
attr_reader :result
|
|
23
|
-
def initialize(message = nil, result = nil)
|
|
24
|
-
super(message)
|
|
25
|
-
@result = result
|
|
26
|
-
end
|
|
48
|
+
class TransmissionError < Error
|
|
27
49
|
end
|
|
28
50
|
|
|
29
|
-
##
|
|
30
51
|
# An exception that is raised if a redirect is required
|
|
31
52
|
#
|
|
32
|
-
class RedirectError <
|
|
53
|
+
class RedirectError < Error
|
|
33
54
|
end
|
|
34
55
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
# invalid parameter values.
|
|
38
|
-
class ValidationError < StandardError
|
|
56
|
+
# A 4xx class HTTP error occurred.
|
|
57
|
+
class ClientError < Error
|
|
39
58
|
end
|
|
40
59
|
|
|
41
|
-
##
|
|
42
60
|
# A 4xx class HTTP error occurred.
|
|
43
|
-
class
|
|
61
|
+
class RateLimitError < Error
|
|
44
62
|
end
|
|
45
63
|
|
|
46
|
-
##
|
|
47
64
|
# A 401 HTTP error occurred.
|
|
48
|
-
class AuthorizationError <
|
|
65
|
+
class AuthorizationError < Error
|
|
49
66
|
end
|
|
50
67
|
|
|
51
|
-
##
|
|
52
68
|
# A 5xx class HTTP error occurred.
|
|
53
|
-
class ServerError <
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
##
|
|
57
|
-
# An exception that is raised if an ID token could not be validated.
|
|
58
|
-
class InvalidIDTokenError < StandardError
|
|
69
|
+
class ServerError < Error
|
|
59
70
|
end
|
|
60
71
|
|
|
61
72
|
# Error class for problems in batch requests.
|
|
62
|
-
class BatchError <
|
|
73
|
+
class BatchError < Error
|
|
63
74
|
end
|
|
64
75
|
end
|
|
65
76
|
end
|
|
@@ -0,0 +1,295 @@
|
|
|
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 'logger'
|
|
16
|
+
require 'erb'
|
|
17
|
+
require 'yaml'
|
|
18
|
+
require 'multi_json'
|
|
19
|
+
require 'active_support/inflector'
|
|
20
|
+
require 'google/apis/core/logging'
|
|
21
|
+
require 'google/apis/generator/template'
|
|
22
|
+
require 'google/apis/generator/model'
|
|
23
|
+
require 'google/apis/generator/helpers'
|
|
24
|
+
require 'addressable/uri'
|
|
25
|
+
|
|
26
|
+
module Google
|
|
27
|
+
module Apis
|
|
28
|
+
# @private
|
|
29
|
+
class Generator
|
|
30
|
+
# Helper for picking names for methods, properties, types, etc. Performs various normaliations
|
|
31
|
+
# as well as allows for overriding individual names from a configuration file for cases
|
|
32
|
+
# where algorithmic approaches produce poor APIs.
|
|
33
|
+
class Names
|
|
34
|
+
include Google::Apis::Core::Logging
|
|
35
|
+
include NameHelpers
|
|
36
|
+
|
|
37
|
+
def initialize(file_path = nil)
|
|
38
|
+
if file_path
|
|
39
|
+
logger.info { sprintf('Loading API names from %s', file_path) }
|
|
40
|
+
@names = YAML.load(File.read(file_path)) || {}
|
|
41
|
+
else
|
|
42
|
+
@names = {}
|
|
43
|
+
end
|
|
44
|
+
@path = []
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def with_path(path)
|
|
48
|
+
@path.push(path)
|
|
49
|
+
begin
|
|
50
|
+
yield
|
|
51
|
+
ensure
|
|
52
|
+
@path.pop
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def infer_parameter_name
|
|
57
|
+
pick_name(normalize_param_name(@path.last))
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Determine the ruby method name to generate for a given method in discovery.
|
|
61
|
+
# @param [Google::Apis::DiscoveryV1::RestMethod] method
|
|
62
|
+
# Fragment of the discovery doc describing the method
|
|
63
|
+
def infer_method_name(method)
|
|
64
|
+
pick_name(infer_method_name_for_rpc(method) || infer_method_name_from_id(method))
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def infer_property_name
|
|
68
|
+
pick_name(normalize_property_name(@path.last))
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def pick_name(alt_name)
|
|
72
|
+
preferred_name = @names[key]
|
|
73
|
+
if preferred_name && preferred_name == alt_name
|
|
74
|
+
logger.warn { sprintf("Unnecessary name override '%s': %s", key, alt_name) }
|
|
75
|
+
elsif preferred_name.nil?
|
|
76
|
+
preferred_name = @names[key] = alt_name
|
|
77
|
+
end
|
|
78
|
+
preferred_name
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def []=(key, value)
|
|
82
|
+
@names[key] = value
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def dump
|
|
86
|
+
YAML.dump(@names)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def key
|
|
90
|
+
@path.reduce('') { |a, e| a + '/' + e }
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def option(opt_name)
|
|
94
|
+
@names[sprintf('%s?%s', key, opt_name)]
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
private
|
|
98
|
+
|
|
99
|
+
# For RPC style methods, pick a name based off the request objects.
|
|
100
|
+
# @param [Google::Apis::DiscoveryV1::RestMethod] method
|
|
101
|
+
# Fragment of the discovery doc describing the method
|
|
102
|
+
def infer_method_name_for_rpc(method)
|
|
103
|
+
return nil if method.request.nil?
|
|
104
|
+
parts = method.id.split('.')
|
|
105
|
+
parts.shift
|
|
106
|
+
verb = ActiveSupport::Inflector.underscore(parts.pop)
|
|
107
|
+
match = method.request._ref.match(/(.*)(?i:request)/)
|
|
108
|
+
return nil if match.nil?
|
|
109
|
+
name = ActiveSupport::Inflector.underscore(match[1])
|
|
110
|
+
return nil unless name == verb || name.start_with?(verb + '_')
|
|
111
|
+
if !parts.empty?
|
|
112
|
+
resource_name = ActiveSupport::Inflector.singularize(parts.pop)
|
|
113
|
+
resource_name = ActiveSupport::Inflector.underscore(resource_name)
|
|
114
|
+
if !name.include?(resource_name)
|
|
115
|
+
name = name.split('_').insert(1, resource_name).join('_')
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
name
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
# For REST style methods, build a method name from the verb/resource(s) in the method
|
|
122
|
+
# id. IDs are in the form <api>.<resource>.<verb>
|
|
123
|
+
# @param [Google::Apis::DiscoveryV1::RestMethod] method
|
|
124
|
+
# Fragment of the discovery doc describing the method
|
|
125
|
+
def infer_method_name_from_id(method)
|
|
126
|
+
parts = method.id.split('.')
|
|
127
|
+
parts.shift
|
|
128
|
+
verb = ActiveSupport::Inflector.underscore(parts.pop)
|
|
129
|
+
return verb if parts.empty?
|
|
130
|
+
resource_name = ActiveSupport::Inflector.underscore(parts.pop)
|
|
131
|
+
if pluralize_method?(verb)
|
|
132
|
+
resource_name = ActiveSupport::Inflector.pluralize(resource_name)
|
|
133
|
+
else
|
|
134
|
+
resource_name = ActiveSupport::Inflector.singularize(resource_name)
|
|
135
|
+
end
|
|
136
|
+
if parts.empty?
|
|
137
|
+
resource_path = resource_name
|
|
138
|
+
else
|
|
139
|
+
resource_path = parts.map do |p|
|
|
140
|
+
p = ActiveSupport::Inflector.singularize(p)
|
|
141
|
+
ActiveSupport::Inflector.underscore(p)
|
|
142
|
+
end.join('_') + '_' + resource_name
|
|
143
|
+
end
|
|
144
|
+
method_name = verb.split('_').insert(1, resource_path.split('_')).join('_')
|
|
145
|
+
method_name
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
# Modifies an API description to support ruby code generation. Primarily does:
|
|
150
|
+
# - Ensure all names follow appopriate ruby conventions
|
|
151
|
+
# - Maps types to ruby types, classes, and resolves $refs
|
|
152
|
+
# - Attempts to simplify names where possible to make APIs more sensible
|
|
153
|
+
class Annotator
|
|
154
|
+
include NameHelpers
|
|
155
|
+
include Google::Apis::Core::Logging
|
|
156
|
+
|
|
157
|
+
# Don't expose these in the API directly.
|
|
158
|
+
PARAMETER_BLACKLIST = %w(alt access_token bearer_token oauth_token pp prettyPrint
|
|
159
|
+
$.xgafv callback upload_protocol uploadType)
|
|
160
|
+
|
|
161
|
+
# Prepare the API for the templates.
|
|
162
|
+
# @param [Google::Apis::DiscoveryV1::RestDescription] description
|
|
163
|
+
# API Description
|
|
164
|
+
def self.process(description, api_names = nil)
|
|
165
|
+
Annotator.new(description, api_names).annotate_api
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
# @param [Google::Apis::DiscoveryV1::RestDescription] description
|
|
169
|
+
# API Description
|
|
170
|
+
# @param [Google::Api::Generator::Names] api_names
|
|
171
|
+
# Name helper instanace
|
|
172
|
+
def initialize(description, api_names = nil)
|
|
173
|
+
api_names = Names.new if api_names.nil?
|
|
174
|
+
@names = api_names
|
|
175
|
+
@rest_description = description
|
|
176
|
+
@registered_types = []
|
|
177
|
+
@deferred_types = []
|
|
178
|
+
@strip_prefixes = []
|
|
179
|
+
@all_methods = {}
|
|
180
|
+
@path = []
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
def annotate_api
|
|
184
|
+
@names.with_path(@rest_description.id) do
|
|
185
|
+
@strip_prefixes << @rest_description.name
|
|
186
|
+
if @rest_description.auth
|
|
187
|
+
@rest_description.auth.oauth2.scopes.each do |key, value|
|
|
188
|
+
value.constant = constantize_scope(key)
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
@rest_description.force_alt_json = @names.option('force_alt_json')
|
|
192
|
+
@rest_description.parameters.reject! { |k, _v| PARAMETER_BLACKLIST.include?(k) }
|
|
193
|
+
annotate_parameters(@rest_description.parameters)
|
|
194
|
+
annotate_resource(@rest_description.name, @rest_description)
|
|
195
|
+
@rest_description.schemas.each do |k, v|
|
|
196
|
+
annotate_type(k, v, @rest_description)
|
|
197
|
+
end unless @rest_description.schemas.nil?
|
|
198
|
+
end
|
|
199
|
+
resolve_type_references
|
|
200
|
+
resolve_variants
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
def annotate_type(name, type, parent)
|
|
204
|
+
@names.with_path(name) do
|
|
205
|
+
type.name = name
|
|
206
|
+
type.path = @names.key
|
|
207
|
+
type.generated_name = @names.infer_property_name
|
|
208
|
+
if type.type == 'object'
|
|
209
|
+
type.generated_class_name = ActiveSupport::Inflector.camelize(type.generated_name)
|
|
210
|
+
@registered_types << type
|
|
211
|
+
end
|
|
212
|
+
type.parent = parent
|
|
213
|
+
@deferred_types << type if type._ref
|
|
214
|
+
type.properties.each do |k, v|
|
|
215
|
+
annotate_type(k, v, type)
|
|
216
|
+
end unless type.properties.nil?
|
|
217
|
+
if type.additional_properties
|
|
218
|
+
type.type = 'hash'
|
|
219
|
+
annotate_type(ActiveSupport::Inflector.singularize(type.generated_name), type.additional_properties,
|
|
220
|
+
parent)
|
|
221
|
+
end
|
|
222
|
+
annotate_type(ActiveSupport::Inflector.singularize(type.generated_name), type.items, parent) if type.items
|
|
223
|
+
end
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
def annotate_resource(name, resource, parent_resource = nil)
|
|
227
|
+
@strip_prefixes << name
|
|
228
|
+
resource.parent = parent_resource unless parent_resource.nil?
|
|
229
|
+
resource.api_methods.each do |_k, v|
|
|
230
|
+
annotate_method(v, resource)
|
|
231
|
+
end unless resource.api_methods.nil?
|
|
232
|
+
|
|
233
|
+
resource.resources.each do |k, v|
|
|
234
|
+
annotate_resource(k, v, resource)
|
|
235
|
+
end unless resource.resources.nil?
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
def annotate_method(method, parent_resource = nil)
|
|
239
|
+
@names.with_path(method.id) do
|
|
240
|
+
method.parent = parent_resource
|
|
241
|
+
method.generated_name = @names.infer_method_name(method)
|
|
242
|
+
check_duplicate_method(method)
|
|
243
|
+
annotate_parameters(method.parameters)
|
|
244
|
+
end
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
def annotate_parameters(parameters)
|
|
248
|
+
parameters.each do |key, value|
|
|
249
|
+
@names.with_path(key) do
|
|
250
|
+
value.name = key
|
|
251
|
+
value.generated_name = @names.infer_parameter_name
|
|
252
|
+
@deferred_types << value if value._ref
|
|
253
|
+
end
|
|
254
|
+
end unless parameters.nil?
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
def resolve_type_references
|
|
258
|
+
@deferred_types.each do |type|
|
|
259
|
+
if type._ref
|
|
260
|
+
ref = @rest_description.schemas[type._ref]
|
|
261
|
+
ivars = ref.instance_variables - [:@name, :@generated_name]
|
|
262
|
+
(ivars).each do |var|
|
|
263
|
+
type.instance_variable_set(var, ref.instance_variable_get(var))
|
|
264
|
+
end
|
|
265
|
+
end
|
|
266
|
+
end
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
def resolve_variants
|
|
270
|
+
@deferred_types.each do |type|
|
|
271
|
+
if type.variant
|
|
272
|
+
type.variant.map.each do |v|
|
|
273
|
+
ref = @rest_description.schemas[v._ref]
|
|
274
|
+
ref.base_ref = type
|
|
275
|
+
ref.discriminant = type.variant.discriminant
|
|
276
|
+
ref.discriminant_value = v.type_value
|
|
277
|
+
end
|
|
278
|
+
end
|
|
279
|
+
end
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
def check_duplicate_method(m)
|
|
283
|
+
if @all_methods.include?(m.generated_name)
|
|
284
|
+
logger.error do
|
|
285
|
+
sprintf('Duplicate method %s generated, path %s',
|
|
286
|
+
m.generated_name, @names.key)
|
|
287
|
+
end
|
|
288
|
+
fail 'Duplicate name generated'
|
|
289
|
+
end
|
|
290
|
+
@all_methods[m.generated_name] = m
|
|
291
|
+
end
|
|
292
|
+
end
|
|
293
|
+
end
|
|
294
|
+
end
|
|
295
|
+
end
|