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
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
require 'faraday'
|
|
2
|
-
require 'zlib'
|
|
3
|
-
|
|
4
|
-
module Google
|
|
5
|
-
class APIClient
|
|
6
|
-
class Gzip < Faraday::Response::Middleware
|
|
7
|
-
include Google::APIClient::Logging
|
|
8
|
-
|
|
9
|
-
def on_complete(env)
|
|
10
|
-
encoding = env[:response_headers]['content-encoding'].to_s.downcase
|
|
11
|
-
case encoding
|
|
12
|
-
when 'gzip'
|
|
13
|
-
logger.debug { "Decompressing gzip encoded response (#{env[:body].length} bytes)" }
|
|
14
|
-
env[:body] = Zlib::GzipReader.new(StringIO.new(env[:body])).read
|
|
15
|
-
env[:response_headers].delete('content-encoding')
|
|
16
|
-
logger.debug { "Decompressed (#{env[:body].length} bytes)" }
|
|
17
|
-
when 'deflate'
|
|
18
|
-
logger.debug{ "Decompressing deflate encoded response (#{env[:body].length} bytes)" }
|
|
19
|
-
env[:body] = Zlib::Inflate.inflate(env[:body])
|
|
20
|
-
env[:response_headers].delete('content-encoding')
|
|
21
|
-
logger.debug { "Decompressed (#{env[:body].length} bytes)" }
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
Faraday::Response.register_middleware :gzip => Google::APIClient::Gzip
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
require 'logger'
|
|
2
|
-
|
|
3
|
-
module Google
|
|
4
|
-
class APIClient
|
|
5
|
-
|
|
6
|
-
class << self
|
|
7
|
-
##
|
|
8
|
-
# Logger for the API client
|
|
9
|
-
#
|
|
10
|
-
# @return [Logger] logger instance.
|
|
11
|
-
attr_accessor :logger
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
self.logger = Logger.new(STDOUT)
|
|
15
|
-
self.logger.level = Logger::WARN
|
|
16
|
-
|
|
17
|
-
##
|
|
18
|
-
# Module to make accessing the logger simpler
|
|
19
|
-
module Logging
|
|
20
|
-
##
|
|
21
|
-
# Logger for the API client
|
|
22
|
-
#
|
|
23
|
-
# @return [Logger] logger instance.
|
|
24
|
-
def logger
|
|
25
|
-
Google::APIClient.logger
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
end
|
|
@@ -1,259 +0,0 @@
|
|
|
1
|
-
# Copyright 2010 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
|
-
require 'google/api_client/reference'
|
|
15
|
-
|
|
16
|
-
module Google
|
|
17
|
-
class APIClient
|
|
18
|
-
##
|
|
19
|
-
# Uploadable media support. Holds an IO stream & content type.
|
|
20
|
-
#
|
|
21
|
-
# @see Faraday::UploadIO
|
|
22
|
-
# @example
|
|
23
|
-
# media = Google::APIClient::UploadIO.new('mymovie.m4v', 'video/mp4')
|
|
24
|
-
class UploadIO < Faraday::UploadIO
|
|
25
|
-
|
|
26
|
-
# @return [Fixnum] Size of chunks to upload. Default is nil, meaning upload the entire file in a single request
|
|
27
|
-
attr_accessor :chunk_size
|
|
28
|
-
|
|
29
|
-
##
|
|
30
|
-
# Get the length of the stream
|
|
31
|
-
#
|
|
32
|
-
# @return [Fixnum]
|
|
33
|
-
# Length of stream, in bytes
|
|
34
|
-
def length
|
|
35
|
-
io.respond_to?(:length) ? io.length : File.size(local_path)
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
##
|
|
40
|
-
# Wraps an input stream and limits data to a given range
|
|
41
|
-
#
|
|
42
|
-
# @example
|
|
43
|
-
# chunk = Google::APIClient::RangedIO.new(io, 0, 1000)
|
|
44
|
-
class RangedIO
|
|
45
|
-
##
|
|
46
|
-
# Bind an input stream to a specific range.
|
|
47
|
-
#
|
|
48
|
-
# @param [IO] io
|
|
49
|
-
# Source input stream
|
|
50
|
-
# @param [Fixnum] offset
|
|
51
|
-
# Starting offset of the range
|
|
52
|
-
# @param [Fixnum] length
|
|
53
|
-
# Length of range
|
|
54
|
-
def initialize(io, offset, length)
|
|
55
|
-
@io = io
|
|
56
|
-
@offset = offset
|
|
57
|
-
@length = length
|
|
58
|
-
self.rewind
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
##
|
|
62
|
-
# @see IO#read
|
|
63
|
-
def read(amount = nil, buf = nil)
|
|
64
|
-
buffer = buf || ''
|
|
65
|
-
if amount.nil?
|
|
66
|
-
size = @length - @pos
|
|
67
|
-
done = ''
|
|
68
|
-
elsif amount == 0
|
|
69
|
-
size = 0
|
|
70
|
-
done = ''
|
|
71
|
-
else
|
|
72
|
-
size = [@length - @pos, amount].min
|
|
73
|
-
done = nil
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
if size > 0
|
|
77
|
-
result = @io.read(size)
|
|
78
|
-
result.force_encoding("BINARY") if result.respond_to?(:force_encoding)
|
|
79
|
-
buffer << result if result
|
|
80
|
-
@pos = @pos + size
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
if buffer.length > 0
|
|
84
|
-
buffer
|
|
85
|
-
else
|
|
86
|
-
done
|
|
87
|
-
end
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
##
|
|
91
|
-
# @see IO#rewind
|
|
92
|
-
def rewind
|
|
93
|
-
self.pos = 0
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
##
|
|
97
|
-
# @see IO#pos
|
|
98
|
-
def pos
|
|
99
|
-
@pos
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
##
|
|
103
|
-
# @see IO#pos=
|
|
104
|
-
def pos=(pos)
|
|
105
|
-
@pos = pos
|
|
106
|
-
@io.pos = @offset + pos
|
|
107
|
-
end
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
##
|
|
111
|
-
# Resumable uploader.
|
|
112
|
-
#
|
|
113
|
-
class ResumableUpload < Request
|
|
114
|
-
# @return [Fixnum] Max bytes to send in a single request
|
|
115
|
-
attr_accessor :chunk_size
|
|
116
|
-
|
|
117
|
-
##
|
|
118
|
-
# Creates a new uploader.
|
|
119
|
-
#
|
|
120
|
-
# @param [Hash] options
|
|
121
|
-
# Request options
|
|
122
|
-
def initialize(options={})
|
|
123
|
-
super options
|
|
124
|
-
self.uri = options[:uri]
|
|
125
|
-
self.http_method = :put
|
|
126
|
-
@offset = options[:offset] || 0
|
|
127
|
-
@complete = false
|
|
128
|
-
@expired = false
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
##
|
|
132
|
-
# Sends all remaining chunks to the server
|
|
133
|
-
#
|
|
134
|
-
# @deprecated Pass the instance to {Google::APIClient#execute} instead
|
|
135
|
-
#
|
|
136
|
-
# @param [Google::APIClient] api_client
|
|
137
|
-
# API Client instance to use for sending
|
|
138
|
-
def send_all(api_client)
|
|
139
|
-
result = nil
|
|
140
|
-
until complete?
|
|
141
|
-
result = send_chunk(api_client)
|
|
142
|
-
break unless result.status == 308
|
|
143
|
-
end
|
|
144
|
-
return result
|
|
145
|
-
end
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
##
|
|
149
|
-
# Sends the next chunk to the server
|
|
150
|
-
#
|
|
151
|
-
# @deprecated Pass the instance to {Google::APIClient#execute} instead
|
|
152
|
-
#
|
|
153
|
-
# @param [Google::APIClient] api_client
|
|
154
|
-
# API Client instance to use for sending
|
|
155
|
-
def send_chunk(api_client)
|
|
156
|
-
return api_client.execute(self)
|
|
157
|
-
end
|
|
158
|
-
|
|
159
|
-
##
|
|
160
|
-
# Check if upload is complete
|
|
161
|
-
#
|
|
162
|
-
# @return [TrueClass, FalseClass]
|
|
163
|
-
# Whether or not the upload complete successfully
|
|
164
|
-
def complete?
|
|
165
|
-
return @complete
|
|
166
|
-
end
|
|
167
|
-
|
|
168
|
-
##
|
|
169
|
-
# Check if the upload URL expired (upload not completed in alotted time.)
|
|
170
|
-
# Expired uploads must be restarted from the beginning
|
|
171
|
-
#
|
|
172
|
-
# @return [TrueClass, FalseClass]
|
|
173
|
-
# Whether or not the upload has expired and can not be resumed
|
|
174
|
-
def expired?
|
|
175
|
-
return @expired
|
|
176
|
-
end
|
|
177
|
-
|
|
178
|
-
##
|
|
179
|
-
# Check if upload is resumable. That is, neither complete nor expired
|
|
180
|
-
#
|
|
181
|
-
# @return [TrueClass, FalseClass] True if upload can be resumed
|
|
182
|
-
def resumable?
|
|
183
|
-
return !(self.complete? or self.expired?)
|
|
184
|
-
end
|
|
185
|
-
|
|
186
|
-
##
|
|
187
|
-
# Convert to an HTTP request. Returns components in order of method, URI,
|
|
188
|
-
# request headers, and body
|
|
189
|
-
#
|
|
190
|
-
# @api private
|
|
191
|
-
#
|
|
192
|
-
# @return [Array<(Symbol, Addressable::URI, Hash, [#read,#to_str])>]
|
|
193
|
-
def to_http_request
|
|
194
|
-
if @complete
|
|
195
|
-
raise Google::APIClient::ClientError, "Upload already complete"
|
|
196
|
-
elsif @offset.nil?
|
|
197
|
-
self.headers.update({
|
|
198
|
-
'Content-Length' => "0",
|
|
199
|
-
'Content-Range' => "bytes */#{media.length}" })
|
|
200
|
-
else
|
|
201
|
-
start_offset = @offset
|
|
202
|
-
remaining = self.media.length - start_offset
|
|
203
|
-
chunk_size = self.media.chunk_size || self.chunk_size || self.media.length
|
|
204
|
-
content_length = [remaining, chunk_size].min
|
|
205
|
-
chunk = RangedIO.new(self.media.io, start_offset, content_length)
|
|
206
|
-
end_offset = start_offset + content_length - 1
|
|
207
|
-
self.headers.update({
|
|
208
|
-
'Content-Length' => "#{content_length}",
|
|
209
|
-
'Content-Type' => self.media.content_type,
|
|
210
|
-
'Content-Range' => "bytes #{start_offset}-#{end_offset}/#{media.length}" })
|
|
211
|
-
self.body = chunk
|
|
212
|
-
end
|
|
213
|
-
super
|
|
214
|
-
end
|
|
215
|
-
|
|
216
|
-
##
|
|
217
|
-
# Check the result from the server, updating the offset and/or location
|
|
218
|
-
# if available.
|
|
219
|
-
#
|
|
220
|
-
# @api private
|
|
221
|
-
#
|
|
222
|
-
# @param [Faraday::Response] response
|
|
223
|
-
# HTTP response
|
|
224
|
-
#
|
|
225
|
-
# @return [Google::APIClient::Result]
|
|
226
|
-
# Processed API response
|
|
227
|
-
def process_http_response(response)
|
|
228
|
-
case response.status
|
|
229
|
-
when 200...299
|
|
230
|
-
@complete = true
|
|
231
|
-
when 308
|
|
232
|
-
range = response.headers['range']
|
|
233
|
-
if range
|
|
234
|
-
@offset = range.scan(/\d+/).collect{|x| Integer(x)}.last + 1
|
|
235
|
-
end
|
|
236
|
-
if response.headers['location']
|
|
237
|
-
self.uri = response.headers['location']
|
|
238
|
-
end
|
|
239
|
-
when 400...499
|
|
240
|
-
@expired = true
|
|
241
|
-
when 500...599
|
|
242
|
-
# Invalidate the offset to mark it needs to be queried on the
|
|
243
|
-
# next request
|
|
244
|
-
@offset = nil
|
|
245
|
-
end
|
|
246
|
-
return Google::APIClient::Result.new(self, response)
|
|
247
|
-
end
|
|
248
|
-
|
|
249
|
-
##
|
|
250
|
-
# Hashified verison of the API request
|
|
251
|
-
#
|
|
252
|
-
# @return [Hash]
|
|
253
|
-
def to_hash
|
|
254
|
-
super.merge(:offset => @offset)
|
|
255
|
-
end
|
|
256
|
-
|
|
257
|
-
end
|
|
258
|
-
end
|
|
259
|
-
end
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
require 'rails/railtie'
|
|
2
|
-
require 'google/api_client/logging'
|
|
3
|
-
|
|
4
|
-
module Google
|
|
5
|
-
class APIClient
|
|
6
|
-
|
|
7
|
-
##
|
|
8
|
-
# Optional support class for Rails. Currently replaces the built-in logger
|
|
9
|
-
# with Rails' application log.
|
|
10
|
-
#
|
|
11
|
-
class Railtie < Rails::Railtie
|
|
12
|
-
initializer 'google-api-client' do |app|
|
|
13
|
-
logger = app.config.logger || Rails.logger
|
|
14
|
-
Google::APIClient.logger = logger unless logger.nil?
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|
|
@@ -1,350 +0,0 @@
|
|
|
1
|
-
# Copyright 2010 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 'faraday'
|
|
16
|
-
require 'faraday/request/multipart'
|
|
17
|
-
require 'compat/multi_json'
|
|
18
|
-
require 'addressable/uri'
|
|
19
|
-
require 'stringio'
|
|
20
|
-
require 'google/api_client/discovery'
|
|
21
|
-
require 'google/api_client/logging'
|
|
22
|
-
|
|
23
|
-
module Google
|
|
24
|
-
class APIClient
|
|
25
|
-
|
|
26
|
-
##
|
|
27
|
-
# Represents an API request.
|
|
28
|
-
class Request
|
|
29
|
-
include Google::APIClient::Logging
|
|
30
|
-
|
|
31
|
-
MULTIPART_BOUNDARY = "-----------RubyApiMultipartPost".freeze
|
|
32
|
-
|
|
33
|
-
# @return [Hash] Request parameters
|
|
34
|
-
attr_reader :parameters
|
|
35
|
-
# @return [Hash] Additional HTTP headers
|
|
36
|
-
attr_reader :headers
|
|
37
|
-
# @return [Google::APIClient::Method] API method to invoke
|
|
38
|
-
attr_reader :api_method
|
|
39
|
-
# @return [Google::APIClient::UploadIO] File to upload
|
|
40
|
-
attr_accessor :media
|
|
41
|
-
# @return [#generated_authenticated_request] User credentials
|
|
42
|
-
attr_accessor :authorization
|
|
43
|
-
# @return [TrueClass,FalseClass] True if request should include credentials
|
|
44
|
-
attr_accessor :authenticated
|
|
45
|
-
# @return [#read, #to_str] Request body
|
|
46
|
-
attr_accessor :body
|
|
47
|
-
|
|
48
|
-
##
|
|
49
|
-
# Build a request
|
|
50
|
-
#
|
|
51
|
-
# @param [Hash] options
|
|
52
|
-
# @option options [Hash, Array] :parameters
|
|
53
|
-
# Request parameters for the API method.
|
|
54
|
-
# @option options [Google::APIClient::Method] :api_method
|
|
55
|
-
# API method to invoke. Either :api_method or :uri must be specified
|
|
56
|
-
# @option options [TrueClass, FalseClass] :authenticated
|
|
57
|
-
# True if request should include credentials. Implicitly true if
|
|
58
|
-
# unspecified and :authorization present
|
|
59
|
-
# @option options [#generate_signed_request] :authorization
|
|
60
|
-
# OAuth credentials
|
|
61
|
-
# @option options [Google::APIClient::UploadIO] :media
|
|
62
|
-
# File to upload, if media upload request
|
|
63
|
-
# @option options [#to_json, #to_hash] :body_object
|
|
64
|
-
# Main body of the API request. Typically hash or object that can
|
|
65
|
-
# be serialized to JSON
|
|
66
|
-
# @option options [#read, #to_str] :body
|
|
67
|
-
# Raw body to send in POST/PUT requests
|
|
68
|
-
# @option options [String, Addressable::URI] :uri
|
|
69
|
-
# URI to request. Either :api_method or :uri must be specified
|
|
70
|
-
# @option options [String, Symbol] :http_method
|
|
71
|
-
# HTTP method when requesting a URI
|
|
72
|
-
def initialize(options={})
|
|
73
|
-
@parameters = Faraday::Utils::ParamsHash.new
|
|
74
|
-
@headers = Faraday::Utils::Headers.new
|
|
75
|
-
|
|
76
|
-
self.parameters.merge!(options[:parameters]) unless options[:parameters].nil?
|
|
77
|
-
self.headers.merge!(options[:headers]) unless options[:headers].nil?
|
|
78
|
-
self.api_method = options[:api_method]
|
|
79
|
-
self.authenticated = options[:authenticated]
|
|
80
|
-
self.authorization = options[:authorization]
|
|
81
|
-
|
|
82
|
-
# These parameters are handled differently because they're not
|
|
83
|
-
# parameters to the API method, but rather to the API system.
|
|
84
|
-
self.parameters['key'] ||= options[:key] if options[:key]
|
|
85
|
-
self.parameters['userIp'] ||= options[:user_ip] if options[:user_ip]
|
|
86
|
-
|
|
87
|
-
if options[:media]
|
|
88
|
-
self.initialize_media_upload(options)
|
|
89
|
-
elsif options[:body]
|
|
90
|
-
self.body = options[:body]
|
|
91
|
-
elsif options[:body_object]
|
|
92
|
-
self.headers['Content-Type'] ||= 'application/json'
|
|
93
|
-
self.body = serialize_body(options[:body_object])
|
|
94
|
-
else
|
|
95
|
-
self.body = ''
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
unless self.api_method
|
|
99
|
-
self.http_method = options[:http_method] || 'GET'
|
|
100
|
-
self.uri = options[:uri]
|
|
101
|
-
end
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
# @!attribute [r] upload_type
|
|
105
|
-
# @return [String] protocol used for upload
|
|
106
|
-
def upload_type
|
|
107
|
-
return self.parameters['uploadType'] || self.parameters['upload_type']
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
# @!attribute http_method
|
|
111
|
-
# @return [Symbol] HTTP method if invoking a URI
|
|
112
|
-
def http_method
|
|
113
|
-
return @http_method ||= self.api_method.http_method.to_s.downcase.to_sym
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
def http_method=(new_http_method)
|
|
117
|
-
if new_http_method.kind_of?(Symbol)
|
|
118
|
-
@http_method = new_http_method.to_s.downcase.to_sym
|
|
119
|
-
elsif new_http_method.respond_to?(:to_str)
|
|
120
|
-
@http_method = new_http_method.to_s.downcase.to_sym
|
|
121
|
-
else
|
|
122
|
-
raise TypeError,
|
|
123
|
-
"Expected String or Symbol, got #{new_http_method.class}."
|
|
124
|
-
end
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
def api_method=(new_api_method)
|
|
128
|
-
if new_api_method.nil? || new_api_method.kind_of?(Google::APIClient::Method)
|
|
129
|
-
@api_method = new_api_method
|
|
130
|
-
else
|
|
131
|
-
raise TypeError,
|
|
132
|
-
"Expected Google::APIClient::Method, got #{new_api_method.class}."
|
|
133
|
-
end
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
# @!attribute uri
|
|
137
|
-
# @return [Addressable::URI] URI to send request
|
|
138
|
-
def uri
|
|
139
|
-
return @uri ||= self.api_method.generate_uri(self.parameters)
|
|
140
|
-
end
|
|
141
|
-
|
|
142
|
-
def uri=(new_uri)
|
|
143
|
-
@uri = Addressable::URI.parse(new_uri)
|
|
144
|
-
@parameters.update(@uri.query_values) unless @uri.query_values.nil?
|
|
145
|
-
end
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
# Transmits the request with the given connection
|
|
149
|
-
#
|
|
150
|
-
# @api private
|
|
151
|
-
#
|
|
152
|
-
# @param [Faraday::Connection] connection
|
|
153
|
-
# the connection to transmit with
|
|
154
|
-
# @param [TrueValue,FalseValue] is_retry
|
|
155
|
-
# True if request has been previous sent
|
|
156
|
-
#
|
|
157
|
-
# @return [Google::APIClient::Result]
|
|
158
|
-
# result of API request
|
|
159
|
-
def send(connection, is_retry = false)
|
|
160
|
-
self.body.rewind if is_retry && self.body.respond_to?(:rewind)
|
|
161
|
-
env = self.to_env(connection)
|
|
162
|
-
logger.debug { "#{self.class} Sending API request #{env[:method]} #{env[:url].to_s} #{env[:request_headers]}" }
|
|
163
|
-
http_response = connection.app.call(env)
|
|
164
|
-
result = self.process_http_response(http_response)
|
|
165
|
-
|
|
166
|
-
logger.debug { "#{self.class} Result: #{result.status} #{result.headers}" }
|
|
167
|
-
|
|
168
|
-
# Resumamble slightly different than other upload protocols in that it requires at least
|
|
169
|
-
# 2 requests.
|
|
170
|
-
if result.status == 200 && self.upload_type == 'resumable' && self.media
|
|
171
|
-
upload = result.resumable_upload
|
|
172
|
-
unless upload.complete?
|
|
173
|
-
logger.debug { "#{self.class} Sending upload body" }
|
|
174
|
-
result = upload.send(connection)
|
|
175
|
-
end
|
|
176
|
-
end
|
|
177
|
-
return result
|
|
178
|
-
end
|
|
179
|
-
|
|
180
|
-
# Convert to an HTTP request. Returns components in order of method, URI,
|
|
181
|
-
# request headers, and body
|
|
182
|
-
#
|
|
183
|
-
# @api private
|
|
184
|
-
#
|
|
185
|
-
# @return [Array<(Symbol, Addressable::URI, Hash, [#read,#to_str])>]
|
|
186
|
-
def to_http_request
|
|
187
|
-
request = (
|
|
188
|
-
if self.api_method
|
|
189
|
-
self.api_method.generate_request(self.parameters, self.body, self.headers)
|
|
190
|
-
elsif self.uri
|
|
191
|
-
unless self.parameters.empty?
|
|
192
|
-
self.uri.query = Addressable::URI.form_encode(self.parameters)
|
|
193
|
-
end
|
|
194
|
-
[self.http_method, self.uri.to_s, self.headers, self.body]
|
|
195
|
-
end)
|
|
196
|
-
return request
|
|
197
|
-
end
|
|
198
|
-
|
|
199
|
-
##
|
|
200
|
-
# Hashified verison of the API request
|
|
201
|
-
#
|
|
202
|
-
# @return [Hash]
|
|
203
|
-
def to_hash
|
|
204
|
-
options = {}
|
|
205
|
-
if self.api_method
|
|
206
|
-
options[:api_method] = self.api_method
|
|
207
|
-
options[:parameters] = self.parameters
|
|
208
|
-
else
|
|
209
|
-
options[:http_method] = self.http_method
|
|
210
|
-
options[:uri] = self.uri
|
|
211
|
-
end
|
|
212
|
-
options[:headers] = self.headers
|
|
213
|
-
options[:body] = self.body
|
|
214
|
-
options[:media] = self.media
|
|
215
|
-
unless self.authorization.nil?
|
|
216
|
-
options[:authorization] = self.authorization
|
|
217
|
-
end
|
|
218
|
-
return options
|
|
219
|
-
end
|
|
220
|
-
|
|
221
|
-
##
|
|
222
|
-
# Prepares the request for execution, building a hash of parts
|
|
223
|
-
# suitable for sending to Faraday::Connection.
|
|
224
|
-
#
|
|
225
|
-
# @api private
|
|
226
|
-
#
|
|
227
|
-
# @param [Faraday::Connection] connection
|
|
228
|
-
# Connection for building the request
|
|
229
|
-
#
|
|
230
|
-
# @return [Hash]
|
|
231
|
-
# Encoded request
|
|
232
|
-
def to_env(connection)
|
|
233
|
-
method, uri, headers, body = self.to_http_request
|
|
234
|
-
http_request = connection.build_request(method) do |req|
|
|
235
|
-
req.url(uri.to_s)
|
|
236
|
-
req.headers.update(headers)
|
|
237
|
-
req.body = body
|
|
238
|
-
end
|
|
239
|
-
|
|
240
|
-
if self.authorization.respond_to?(:generate_authenticated_request)
|
|
241
|
-
http_request = self.authorization.generate_authenticated_request(
|
|
242
|
-
:request => http_request,
|
|
243
|
-
:connection => connection
|
|
244
|
-
)
|
|
245
|
-
end
|
|
246
|
-
|
|
247
|
-
request_env = http_request.to_env(connection)
|
|
248
|
-
end
|
|
249
|
-
|
|
250
|
-
##
|
|
251
|
-
# Convert HTTP response to an API Result
|
|
252
|
-
#
|
|
253
|
-
# @api private
|
|
254
|
-
#
|
|
255
|
-
# @param [Faraday::Response] response
|
|
256
|
-
# HTTP response
|
|
257
|
-
#
|
|
258
|
-
# @return [Google::APIClient::Result]
|
|
259
|
-
# Processed API response
|
|
260
|
-
def process_http_response(response)
|
|
261
|
-
Result.new(self, response)
|
|
262
|
-
end
|
|
263
|
-
|
|
264
|
-
protected
|
|
265
|
-
|
|
266
|
-
##
|
|
267
|
-
# Adjust headers & body for media uploads
|
|
268
|
-
#
|
|
269
|
-
# @api private
|
|
270
|
-
#
|
|
271
|
-
# @param [Hash] options
|
|
272
|
-
# @option options [Hash, Array] :parameters
|
|
273
|
-
# Request parameters for the API method.
|
|
274
|
-
# @option options [Google::APIClient::UploadIO] :media
|
|
275
|
-
# File to upload, if media upload request
|
|
276
|
-
# @option options [#to_json, #to_hash] :body_object
|
|
277
|
-
# Main body of the API request. Typically hash or object that can
|
|
278
|
-
# be serialized to JSON
|
|
279
|
-
# @option options [#read, #to_str] :body
|
|
280
|
-
# Raw body to send in POST/PUT requests
|
|
281
|
-
def initialize_media_upload(options)
|
|
282
|
-
self.media = options[:media]
|
|
283
|
-
case self.upload_type
|
|
284
|
-
when "media"
|
|
285
|
-
if options[:body] || options[:body_object]
|
|
286
|
-
raise ArgumentError, "Can not specify body & body object for simple uploads"
|
|
287
|
-
end
|
|
288
|
-
self.headers['Content-Type'] ||= self.media.content_type
|
|
289
|
-
self.headers['Content-Length'] ||= self.media.length.to_s
|
|
290
|
-
self.body = self.media
|
|
291
|
-
when "multipart"
|
|
292
|
-
unless options[:body_object]
|
|
293
|
-
raise ArgumentError, "Multipart requested but no body object"
|
|
294
|
-
end
|
|
295
|
-
metadata = StringIO.new(serialize_body(options[:body_object]))
|
|
296
|
-
build_multipart([Faraday::UploadIO.new(metadata, 'application/json', 'file.json'), self.media])
|
|
297
|
-
when "resumable"
|
|
298
|
-
file_length = self.media.length
|
|
299
|
-
self.headers['X-Upload-Content-Type'] = self.media.content_type
|
|
300
|
-
self.headers['X-Upload-Content-Length'] = file_length.to_s
|
|
301
|
-
if options[:body_object]
|
|
302
|
-
self.headers['Content-Type'] ||= 'application/json'
|
|
303
|
-
self.body = serialize_body(options[:body_object])
|
|
304
|
-
else
|
|
305
|
-
self.body = ''
|
|
306
|
-
end
|
|
307
|
-
end
|
|
308
|
-
end
|
|
309
|
-
|
|
310
|
-
##
|
|
311
|
-
# Assemble a multipart message from a set of parts
|
|
312
|
-
#
|
|
313
|
-
# @api private
|
|
314
|
-
#
|
|
315
|
-
# @param [Array<[#read,#to_str]>] parts
|
|
316
|
-
# Array of parts to encode.
|
|
317
|
-
# @param [String] mime_type
|
|
318
|
-
# MIME type of the message
|
|
319
|
-
# @param [String] boundary
|
|
320
|
-
# Boundary for separating each part of the message
|
|
321
|
-
def build_multipart(parts, mime_type = 'multipart/related', boundary = MULTIPART_BOUNDARY)
|
|
322
|
-
env = Faraday::Env.new
|
|
323
|
-
env.request = Faraday::RequestOptions.new
|
|
324
|
-
env.request.boundary = boundary
|
|
325
|
-
env.request_headers = {'Content-Type' => "#{mime_type};boundary=#{boundary}"}
|
|
326
|
-
multipart = Faraday::Request::Multipart.new
|
|
327
|
-
self.body = multipart.create_multipart(env, parts.map {|part| [nil, part]})
|
|
328
|
-
self.headers.update(env[:request_headers])
|
|
329
|
-
end
|
|
330
|
-
|
|
331
|
-
##
|
|
332
|
-
# Serialize body object to JSON
|
|
333
|
-
#
|
|
334
|
-
# @api private
|
|
335
|
-
#
|
|
336
|
-
# @param [#to_json,#to_hash] body
|
|
337
|
-
# object to serialize
|
|
338
|
-
#
|
|
339
|
-
# @return [String]
|
|
340
|
-
# JSON
|
|
341
|
-
def serialize_body(body)
|
|
342
|
-
return body.to_json if body.respond_to?(:to_json)
|
|
343
|
-
return MultiJson.dump(body.to_hash) if body.respond_to?(:to_hash)
|
|
344
|
-
raise TypeError, 'Could not convert body object to JSON.' +
|
|
345
|
-
'Must respond to :to_json or :to_hash.'
|
|
346
|
-
end
|
|
347
|
-
|
|
348
|
-
end
|
|
349
|
-
end
|
|
350
|
-
end
|