google-api-client 0.8.7 → 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 +40 -4
- data/CONTRIBUTING.md +31 -0
- data/Gemfile +32 -2
- 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 +1 -0
- data/lib/google/api_client/auth/storage.rb +4 -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 -175
- 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 -326
- data/lib/google/api_client/charset.rb +0 -33
- data/lib/google/api_client/discovery/api.rb +0 -310
- 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 -117
- 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 -708
- 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,187 @@
|
|
|
1
|
+
# Copyright 2015 Google Inc.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
require 'hurley'
|
|
16
|
+
|
|
17
|
+
module Google
|
|
18
|
+
module Apis
|
|
19
|
+
module Core
|
|
20
|
+
# Part of a multipart request for holding JSON data
|
|
21
|
+
#
|
|
22
|
+
# @private
|
|
23
|
+
class JsonPart
|
|
24
|
+
include Hurley::Multipart::Part
|
|
25
|
+
|
|
26
|
+
# @return [Fixnum]
|
|
27
|
+
# Length of part
|
|
28
|
+
attr_reader :length
|
|
29
|
+
|
|
30
|
+
# @param [String] boundary
|
|
31
|
+
# Multipart boundary
|
|
32
|
+
# @param [String] value
|
|
33
|
+
# JSON content
|
|
34
|
+
def initialize(boundary, value, header = {})
|
|
35
|
+
@part = build_part(boundary, value)
|
|
36
|
+
@length = @part.bytesize
|
|
37
|
+
@io = StringIO.new(@part)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
private
|
|
41
|
+
|
|
42
|
+
# Format the part
|
|
43
|
+
#
|
|
44
|
+
# @param [String] boundary
|
|
45
|
+
# Multipart boundary
|
|
46
|
+
# @param [String] value
|
|
47
|
+
# JSON content
|
|
48
|
+
# @return [String]
|
|
49
|
+
def build_part(boundary, value)
|
|
50
|
+
part = ''
|
|
51
|
+
part << "--#{boundary}\r\n"
|
|
52
|
+
part << "Content-Type: application/json\r\n"
|
|
53
|
+
part << "\r\n"
|
|
54
|
+
part << "#{value}\r\n"
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# Part of a multipart request for holding arbitrary content. Modified
|
|
59
|
+
# from Hurley::Multipart::FilePart to remove Content-Disposition
|
|
60
|
+
#
|
|
61
|
+
# @private
|
|
62
|
+
class FilePart
|
|
63
|
+
include Hurley::Multipart::Part
|
|
64
|
+
|
|
65
|
+
# @return [Fixnum]
|
|
66
|
+
# Length of part
|
|
67
|
+
attr_reader :length
|
|
68
|
+
|
|
69
|
+
# @param [String] boundary
|
|
70
|
+
# Multipart boundary
|
|
71
|
+
# @param [Google::Apis::Core::UploadIO] io
|
|
72
|
+
# IO stream
|
|
73
|
+
# @param [Hash] header
|
|
74
|
+
# Additional headers
|
|
75
|
+
def initialize(boundary, io, header = {})
|
|
76
|
+
file_length = io.respond_to?(:length) ? io.length : File.size(io.local_path)
|
|
77
|
+
|
|
78
|
+
@head = build_head(boundary, io.content_type, file_length,
|
|
79
|
+
io.respond_to?(:opts) ? io.opts.merge(header) : header)
|
|
80
|
+
|
|
81
|
+
@length = @head.bytesize + file_length + FOOT.length
|
|
82
|
+
@io = Hurley::CompositeReadIO.new(@length, StringIO.new(@head), io, StringIO.new(FOOT))
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
private
|
|
86
|
+
|
|
87
|
+
# Construct the header for the part
|
|
88
|
+
#
|
|
89
|
+
# @param [String] boundary
|
|
90
|
+
# Multipart boundary
|
|
91
|
+
# @param [String] type
|
|
92
|
+
# Content type for the part
|
|
93
|
+
# @param [Fixnum] content_len
|
|
94
|
+
# Length of the part
|
|
95
|
+
# @param [Hash] header
|
|
96
|
+
# Headers for the part
|
|
97
|
+
def build_head(boundary, type, content_len, header)
|
|
98
|
+
content_id = ''
|
|
99
|
+
if header[:content_id]
|
|
100
|
+
content_id = sprintf(CID_FORMAT, header[:content_id])
|
|
101
|
+
end
|
|
102
|
+
sprintf(HEAD_FORMAT,
|
|
103
|
+
boundary,
|
|
104
|
+
content_len.to_i,
|
|
105
|
+
content_id,
|
|
106
|
+
header[:content_type] || type,
|
|
107
|
+
header[:content_transfer_encoding] || DEFAULT_TR_ENCODING)
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
DEFAULT_TR_ENCODING = 'binary'.freeze
|
|
111
|
+
FOOT = "\r\n".freeze
|
|
112
|
+
CID_FORMAT = "Content-ID: %s\r\n"
|
|
113
|
+
HEAD_FORMAT = <<-END
|
|
114
|
+
--%s\r
|
|
115
|
+
Content-Length: %d\r
|
|
116
|
+
%sContent-Type: %s\r
|
|
117
|
+
Content-Transfer-Encoding: %s\r
|
|
118
|
+
\r
|
|
119
|
+
END
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
# Helper for building multipart requests
|
|
123
|
+
class Multipart
|
|
124
|
+
MULTIPART_RELATED = 'multipart/related'
|
|
125
|
+
DEFAULT_BOUNDARY = 'RubyApiClientMultiPart'
|
|
126
|
+
|
|
127
|
+
# @return [String]
|
|
128
|
+
# Content type header
|
|
129
|
+
attr_reader :content_type
|
|
130
|
+
|
|
131
|
+
# @param [String] content_type
|
|
132
|
+
# Content type for the multipart request
|
|
133
|
+
# @param [String] boundary
|
|
134
|
+
# Part delimiter
|
|
135
|
+
|
|
136
|
+
def initialize(content_type: MULTIPART_RELATED, boundary: nil)
|
|
137
|
+
@parts = []
|
|
138
|
+
@boundary = boundary || DEFAULT_BOUNDARY
|
|
139
|
+
@content_type = "#{content_type}; boundary=#{boundary}"
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
# Append JSON data part
|
|
143
|
+
#
|
|
144
|
+
# @param [String] body
|
|
145
|
+
# JSON text
|
|
146
|
+
# @param [String] content_id
|
|
147
|
+
# Optional unique ID of this part
|
|
148
|
+
# @return [self]
|
|
149
|
+
def add_json(body, content_id: nil)
|
|
150
|
+
header = { :content_id => content_id }
|
|
151
|
+
@parts << Google::Apis::Core::JsonPart.new(@boundary, body, header)
|
|
152
|
+
self
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
# Append arbitrary data as a part
|
|
156
|
+
#
|
|
157
|
+
# @param [Google::Apis::Core::UploadIO] upload_io
|
|
158
|
+
# IO stream
|
|
159
|
+
# @param [String] content_id
|
|
160
|
+
# Optional unique ID of this part
|
|
161
|
+
# @return [self]
|
|
162
|
+
def add_upload(upload_io, content_id: nil)
|
|
163
|
+
header = { :content_id => content_id }
|
|
164
|
+
@parts << Google::Apis::Core::FilePart.new(@boundary,
|
|
165
|
+
upload_io,
|
|
166
|
+
header)
|
|
167
|
+
self
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
# Assemble the multipart requests
|
|
171
|
+
#
|
|
172
|
+
# @return [IO]
|
|
173
|
+
# IO stream
|
|
174
|
+
def assemble
|
|
175
|
+
@parts << Hurley::Multipart::EpiloguePart.new(@boundary)
|
|
176
|
+
ios = []
|
|
177
|
+
len = 0
|
|
178
|
+
@parts.each do |part|
|
|
179
|
+
len += part.length
|
|
180
|
+
ios << part.to_io
|
|
181
|
+
end
|
|
182
|
+
Hurley::CompositeReadIO.new(len, *ios)
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
end
|
|
@@ -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
|