google-api-client 0.8.6 → 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 +41 -2
- 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.rb +35 -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/adexchangeseller_v2_0.rb +38 -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/admin_datatransfer_v1.rb +37 -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_directory_v1.rb +113 -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_reports_v1.rb +38 -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/adsense_v1_4.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/adsensehost_v4_1.rb +35 -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/analytics_v3.rb +49 -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/androidenterprise_v1.rb +35 -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/androidpublisher_v2.rb +34 -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/appengine_v1beta4.rb +35 -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/appsactivity_v1.rb +46 -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/appstate_v1.rb +34 -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/autoscaler_v1beta2.rb +38 -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/bigquery_v2.rb +52 -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/blogger_v3.rb +37 -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/books_v1.rb +34 -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/calendar_v3.rb +37 -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/{lib/google/api_client/service_account.rb → generated/google/apis/civicinfo_v2.rb} +18 -8
- 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/generated/google/apis/classroom_v1.rb +49 -0
- 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_v1beta1.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/cloudbilling_v1.rb +35 -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/clouddebugger_v2.rb +41 -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/cloudmonitoring_v2beta2.rb +37 -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/cloudresourcemanager_v1beta1.rb +38 -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/cloudtrace_v1.rb +35 -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/clouduseraccounts_beta.rb +43 -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/compute_beta.rb +49 -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_v1.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/container_v1.rb +35 -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_v1beta1.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/content_v2.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/coordinate_v1.rb +37 -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/{lib/google/api_client/auth/compute_service_account.rb → generated/google/apis/customsearch_v1.rb} +13 -10
- 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/generated/google/apis/datastore_v1beta2.rb +40 -0
- 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/deploymentmanager_v2.rb +44 -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_v2beta2.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/dfareporting_v2_1.rb +37 -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/discovery_v1.rb +32 -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/dns_v1.rb +44 -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/doubleclickbidmanager_v1.rb +31 -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/doubleclicksearch_v2.rb +35 -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/drive_v2.rb +58 -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_v3.rb +55 -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/fitness_v1.rb +49 -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/fusiontables_v2.rb +37 -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/games_configuration_v1configuration.rb +34 -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_management_v1management.rb +37 -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_v1.rb +40 -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/gan_v1beta1.rb +31 -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/genomics_v1.rb +49 -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_v1beta2.rb +46 -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/gmail_v1.rb +52 -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/groupsmigration_v1.rb +34 -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/groupssettings_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/identitytoolkit_v3.rb +31 -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/{spec/google/api_client/request_spec.rb → generated/google/apis/kgsearch_v1.rb} +16 -13
- 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/generated/google/apis/licensing_v1.rb +34 -0
- 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/logging_v1beta3.rb +47 -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/manager_v1beta2.rb +53 -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/mapsengine_v1.rb +38 -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/mirror_v1.rb +37 -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/oauth2_v2.rb +43 -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/pagespeedonline_v2.rb +32 -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/partners_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/plus_domains_v1.rb +61 -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_v1.rb +43 -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/prediction_v1_6.rb +44 -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/proximitybeacon_v1beta1.rb +31 -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/pubsub_v1.rb +37 -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_v1beta2.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/qpx_express_v1.rb +31 -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/replicapool_v1beta2.rb +44 -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/replicapoolupdater_v1beta1.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/reseller_v1.rb +37 -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/resourceviews_v1beta2.rb +50 -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/script_v1.rb +61 -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/site_verification_v1.rb +37 -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/sqladmin_v1beta4.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/storage_v1.rb +46 -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/storagetransfer_v1.rb +35 -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/tagmanager_v1.rb +52 -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/taskqueue_v1beta2.rb +37 -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/tasks_v1.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/translate_v2.rb +31 -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/urlshortener_v1.rb +34 -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/webmasters_v3.rb +37 -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/youtube_analytics_v1.rb +46 -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_v3.rb +49 -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/youtubereporting_v1.rb +38 -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/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.rb +48 -0
- 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.rb +70 -0
- 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/options.rb +85 -0
- data/lib/google/apis/version.rb +39 -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.rb +131 -44
- data/spec/spec_helper/load_path_spec.rb +33 -0
- data/third_party/hurley_patches.rb +103 -0
- metadata +533 -170
- data/lib/compat/multi_json.rb +0 -19
- data/lib/google/api_client.rb +0 -750
- 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.rb +0 -233
- 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/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
data/google-api-client.gemspec
CHANGED
|
@@ -1,43 +1,31 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
|
+
require 'google/apis/version'
|
|
3
5
|
|
|
4
|
-
Gem::Specification.new do |
|
|
5
|
-
|
|
6
|
-
|
|
6
|
+
Gem::Specification.new do |spec|
|
|
7
|
+
spec.name = 'google-api-client'
|
|
8
|
+
spec.version = Google::Apis::VERSION
|
|
9
|
+
spec.authors = ['Steven Bazyl', 'Tim Emiola', 'Sergio Gomes', 'Bob Aman']
|
|
10
|
+
spec.email = ['sbazyl@google.com']
|
|
11
|
+
spec.summary = %q{Client for accessing Google APIs}
|
|
12
|
+
spec.homepage = 'https://github.com/google/google-api-ruby-client'
|
|
13
|
+
spec.license = 'Apache 2.0'
|
|
7
14
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
s.description = "The Google API Ruby Client makes it trivial to discover and access supported APIs."
|
|
13
|
-
s.email = "sbazyl@google.com"
|
|
14
|
-
s.extra_rdoc_files = ["README.md"]
|
|
15
|
-
s.files = %w(google-api-client.gemspec Rakefile LICENSE CHANGELOG.md README.md Gemfile)
|
|
16
|
-
s.files += Dir.glob("lib/**/*.rb")
|
|
17
|
-
s.files += Dir.glob("lib/cacerts.pem")
|
|
18
|
-
s.files += Dir.glob("spec/**/*.{rb,opts}")
|
|
19
|
-
s.files += Dir.glob("vendor/**/*.rb")
|
|
20
|
-
s.files += Dir.glob("tasks/**/*")
|
|
21
|
-
s.files += Dir.glob("website/**/*")
|
|
22
|
-
s.homepage = "https://github.com/google/google-api-ruby-client/"
|
|
23
|
-
s.rdoc_options = ["--main", "README.md"]
|
|
24
|
-
s.summary = "The Google API Ruby Client makes it trivial to discover and access Google's REST APIs."
|
|
15
|
+
spec.files = `git ls-files -z`.split("\x0")
|
|
16
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
|
17
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
|
18
|
+
spec.require_paths = ['lib', 'generated', 'third_party']
|
|
25
19
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
s.add_development_dependency 'rake', '~> 10.0'
|
|
38
|
-
s.add_development_dependency 'yard', '~> 0.8'
|
|
39
|
-
s.add_development_dependency 'rspec', '~> 3.1'
|
|
40
|
-
s.add_development_dependency 'kramdown', '~> 1.5'
|
|
41
|
-
s.add_development_dependency 'simplecov', '~> 0.9.2'
|
|
42
|
-
s.add_development_dependency 'coveralls', '~> 0.7.11'
|
|
20
|
+
spec.add_runtime_dependency 'representable', '~> 2.3.0'
|
|
21
|
+
spec.add_runtime_dependency 'multi_json', '~> 1.11'
|
|
22
|
+
spec.add_runtime_dependency 'retriable', '~> 2.0'
|
|
23
|
+
spec.add_runtime_dependency 'activesupport', '>= 3.2'
|
|
24
|
+
spec.add_runtime_dependency 'addressable', '~> 2.3'
|
|
25
|
+
spec.add_runtime_dependency 'mime-types', '>= 1.6'
|
|
26
|
+
spec.add_runtime_dependency 'hurley', '~> 0.1'
|
|
27
|
+
spec.add_runtime_dependency 'googleauth', '~> 0.5'
|
|
28
|
+
spec.add_runtime_dependency 'thor', '~> 0.19'
|
|
29
|
+
spec.add_runtime_dependency 'httpclient', '~> 2.7'
|
|
30
|
+
spec.add_runtime_dependency 'memoist', '~> 0.11'
|
|
43
31
|
end
|
|
@@ -23,14 +23,17 @@ module Google
|
|
|
23
23
|
#
|
|
24
24
|
# @example
|
|
25
25
|
#
|
|
26
|
-
# client = Google::APIClient.new
|
|
27
26
|
# flow = Google::APIClient::InstalledAppFlow.new(
|
|
28
27
|
# :client_id => '691380668085.apps.googleusercontent.com',
|
|
29
28
|
# :client_secret => '...',
|
|
30
29
|
# :scope => 'https://www.googleapis.com/auth/drive'
|
|
31
30
|
# )
|
|
32
|
-
#
|
|
31
|
+
# authorization = flow.authorize
|
|
32
|
+
# Drive = Google::Apis::DriveV2
|
|
33
|
+
# drive = Drive::DriveService.new
|
|
34
|
+
# drive.authorization = authorization
|
|
33
35
|
#
|
|
36
|
+
# @deprecated Use google-auth-library-ruby instead
|
|
34
37
|
class InstalledAppFlow
|
|
35
38
|
|
|
36
39
|
RESPONSE_BODY = <<-HTML
|
|
@@ -83,7 +86,7 @@ module Google
|
|
|
83
86
|
#
|
|
84
87
|
# @return [Signet::OAuth2::Client]
|
|
85
88
|
# Authorization instance, nil if user cancelled.
|
|
86
|
-
def authorize(storage=nil)
|
|
89
|
+
def authorize(storage=nil, options={})
|
|
87
90
|
auth = @authorization
|
|
88
91
|
|
|
89
92
|
server = WEBrick::HTTPServer.new(
|
|
@@ -105,7 +108,7 @@ module Google
|
|
|
105
108
|
server.stop
|
|
106
109
|
end
|
|
107
110
|
|
|
108
|
-
Launchy.open(auth.authorization_uri.to_s)
|
|
111
|
+
Launchy.open(auth.authorization_uri(options).to_s)
|
|
109
112
|
server.start
|
|
110
113
|
ensure
|
|
111
114
|
server.shutdown
|
|
@@ -123,4 +126,3 @@ module Google
|
|
|
123
126
|
|
|
124
127
|
end
|
|
125
128
|
end
|
|
126
|
-
|
|
@@ -18,6 +18,7 @@ module Google
|
|
|
18
18
|
# Helper for loading keys from the PKCS12 files downloaded when
|
|
19
19
|
# setting up service accounts at the APIs Console.
|
|
20
20
|
#
|
|
21
|
+
# @deprecated Use google-auth-library-ruby instead
|
|
21
22
|
module KeyUtils
|
|
22
23
|
##
|
|
23
24
|
# Loads a key from PKCS12 file, assuming a single private key
|
|
@@ -21,6 +21,7 @@ module Google
|
|
|
21
21
|
# JSON serialized file. Meant to resemble the serialized format
|
|
22
22
|
# http://google-api-python-client.googlecode.com/hg/docs/epy/oauth2client.file.Storage-class.html
|
|
23
23
|
#
|
|
24
|
+
# @deprecated Use google-auth-library-ruby instead
|
|
24
25
|
class Storage
|
|
25
26
|
|
|
26
27
|
AUTHORIZATION_URI = 'https://accounts.google.com/o/oauth2/auth'
|
|
@@ -35,7 +36,8 @@ module Google
|
|
|
35
36
|
##
|
|
36
37
|
# Initializes the Storage object.
|
|
37
38
|
#
|
|
38
|
-
# @
|
|
39
|
+
# @param [Object] store
|
|
40
|
+
# Storage object
|
|
39
41
|
def initialize(store)
|
|
40
42
|
@store= store
|
|
41
43
|
@authorization = nil
|
|
@@ -44,7 +46,7 @@ module Google
|
|
|
44
46
|
##
|
|
45
47
|
# Write the credentials to the specified store.
|
|
46
48
|
#
|
|
47
|
-
# @
|
|
49
|
+
# @param [Signet::OAuth2::Client] authorization
|
|
48
50
|
# Optional authorization instance. If not provided, the authorization
|
|
49
51
|
# already associated with this instance will be written.
|
|
50
52
|
def write_credentials(authorization=nil)
|
|
@@ -21,6 +21,7 @@ module Google
|
|
|
21
21
|
# JSON serialized file. Meant to resemble the serialized format
|
|
22
22
|
# http://google-api-python-client.googlecode.com/hg/docs/epy/oauth2client.file.Storage-class.html
|
|
23
23
|
#
|
|
24
|
+
# @deprecated Use google-auth-library-ruby instead
|
|
24
25
|
class FileStore
|
|
25
26
|
|
|
26
27
|
attr_accessor :path
|
|
@@ -45,9 +46,7 @@ module Google
|
|
|
45
46
|
##
|
|
46
47
|
# Write the credentials to the specified file.
|
|
47
48
|
#
|
|
48
|
-
# @param [
|
|
49
|
-
# Optional authorization instance. If not provided, the authorization
|
|
50
|
-
# already associated with this instance will be written.
|
|
49
|
+
# @param [Hash] credentials_hash
|
|
51
50
|
def write_credentials(credentials_hash)
|
|
52
51
|
open(self.path, 'w+') do |f|
|
|
53
52
|
f.write(credentials_hash.to_json)
|
|
@@ -16,6 +16,7 @@ require 'json'
|
|
|
16
16
|
|
|
17
17
|
module Google
|
|
18
18
|
class APIClient
|
|
19
|
+
# @deprecated Use google-auth-library-ruby instead
|
|
19
20
|
class RedisStore
|
|
20
21
|
|
|
21
22
|
DEFAULT_REDIS_CREDENTIALS_KEY = "google_api_credentials"
|
|
@@ -25,7 +26,10 @@ module Google
|
|
|
25
26
|
##
|
|
26
27
|
# Initializes the RedisStore object.
|
|
27
28
|
#
|
|
28
|
-
# @
|
|
29
|
+
# @param [Object] redis
|
|
30
|
+
# Redis instance
|
|
31
|
+
# @param [Object] key
|
|
32
|
+
# Optional key to store credentials under. Defaults to 'google_api_credentials'
|
|
29
33
|
def initialize(redis, key = nil)
|
|
30
34
|
@redis= redis
|
|
31
35
|
@redis_credentials_key = key
|
|
@@ -33,6 +37,7 @@ module Google
|
|
|
33
37
|
|
|
34
38
|
##
|
|
35
39
|
# Attempt to read in credentials from redis.
|
|
40
|
+
# @return [Hash]
|
|
36
41
|
def load_credentials
|
|
37
42
|
credentials = redis.get redis_credentials_key
|
|
38
43
|
JSON.parse(credentials) if credentials
|
|
@@ -45,7 +50,7 @@ module Google
|
|
|
45
50
|
##
|
|
46
51
|
# Write the credentials to redis.
|
|
47
52
|
#
|
|
48
|
-
# @
|
|
53
|
+
# @param [Hash] credentials_hash
|
|
49
54
|
def write_credentials(credentials_hash)
|
|
50
55
|
redis.set(redis_credentials_key, credentials_hash.to_json)
|
|
51
56
|
end
|
|
@@ -23,7 +23,7 @@ module Google
|
|
|
23
23
|
# inspired by the Google API Python client.
|
|
24
24
|
#
|
|
25
25
|
# @see https://developers.google.com/api-client-library/python/guide/aaa_client_secrets
|
|
26
|
-
#
|
|
26
|
+
# @deprecated Use google-auth-library-ruby instead
|
|
27
27
|
# @example
|
|
28
28
|
# {
|
|
29
29
|
# "web": {
|
|
@@ -46,7 +46,6 @@ module Google
|
|
|
46
46
|
# }
|
|
47
47
|
# }
|
|
48
48
|
class ClientSecrets
|
|
49
|
-
|
|
50
49
|
##
|
|
51
50
|
# Reads client configuration from a file
|
|
52
51
|
#
|
|
@@ -77,7 +76,7 @@ module Google
|
|
|
77
76
|
end
|
|
78
77
|
|
|
79
78
|
##
|
|
80
|
-
#
|
|
79
|
+
# Initialize OAuth client settings.
|
|
81
80
|
#
|
|
82
81
|
# @param [Hash] options
|
|
83
82
|
# Parsed client secrets files
|
|
@@ -122,7 +121,7 @@ module Google
|
|
|
122
121
|
def to_json
|
|
123
122
|
return MultiJson.dump(to_hash)
|
|
124
123
|
end
|
|
125
|
-
|
|
124
|
+
|
|
126
125
|
def to_hash
|
|
127
126
|
{
|
|
128
127
|
self.flow => ({
|
|
@@ -147,7 +146,7 @@ module Google
|
|
|
147
146
|
end
|
|
148
147
|
}
|
|
149
148
|
end
|
|
150
|
-
|
|
149
|
+
|
|
151
150
|
def to_authorization
|
|
152
151
|
gem 'signet', '>= 0.4.0'
|
|
153
152
|
require 'signet/oauth_2/client'
|
data/lib/google/apis.rb
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
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/version'
|
|
16
|
+
require 'logger'
|
|
17
|
+
|
|
18
|
+
module Google
|
|
19
|
+
module Apis
|
|
20
|
+
ROOT = File.expand_path('..', File.dirname(__dir__))
|
|
21
|
+
|
|
22
|
+
# @!attribute [rw] logger
|
|
23
|
+
# @return [Logger] The logger.
|
|
24
|
+
def self.logger
|
|
25
|
+
@logger ||= rails_logger || default_logger
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
class << self
|
|
29
|
+
attr_writer :logger
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
|
|
34
|
+
# Create and configure a logger
|
|
35
|
+
# @return [Logger]
|
|
36
|
+
def self.default_logger
|
|
37
|
+
logger = Logger.new($stdout)
|
|
38
|
+
logger.level = Logger::WARN
|
|
39
|
+
logger
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Check to see if client is being used in a Rails environment and ge the logger if present
|
|
43
|
+
# @return [Logger]
|
|
44
|
+
def self.rails_logger
|
|
45
|
+
::Rails.logger if defined?(::Rails) && ::Rails.respond_to?(:logger) && ::Rails.logger
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,135 @@
|
|
|
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 'active_support/inflector'
|
|
16
|
+
require 'addressable/uri'
|
|
17
|
+
require 'addressable/template'
|
|
18
|
+
require 'google/apis/core/http_command'
|
|
19
|
+
require 'google/apis/errors'
|
|
20
|
+
require 'multi_json'
|
|
21
|
+
require 'retriable'
|
|
22
|
+
|
|
23
|
+
module Google
|
|
24
|
+
module Apis
|
|
25
|
+
module Core
|
|
26
|
+
# Command for executing most basic API request with JSON requests/responses
|
|
27
|
+
class ApiCommand < HttpCommand
|
|
28
|
+
JSON_CONTENT_TYPE = 'application/json'
|
|
29
|
+
FIELDS_PARAM = 'fields'
|
|
30
|
+
RATE_LIMIT_ERRORS = %w(rateLimitExceeded userRateLimitExceeded)
|
|
31
|
+
|
|
32
|
+
# JSON serializer for request objects
|
|
33
|
+
# @return [Google::Apis::Core::JsonRepresentation]
|
|
34
|
+
attr_accessor :request_representation
|
|
35
|
+
|
|
36
|
+
# Request body to serialize
|
|
37
|
+
# @return [Object]
|
|
38
|
+
attr_accessor :request_object
|
|
39
|
+
|
|
40
|
+
# JSON serializer for response objects
|
|
41
|
+
# @return [Google::Apis::Core::JsonRepresentation]
|
|
42
|
+
attr_accessor :response_representation
|
|
43
|
+
|
|
44
|
+
# Class to instantiate when de-serializing responses
|
|
45
|
+
# @return [Object]
|
|
46
|
+
attr_accessor :response_class
|
|
47
|
+
|
|
48
|
+
# Serialize the request body
|
|
49
|
+
#
|
|
50
|
+
# @return [void]
|
|
51
|
+
def prepare!
|
|
52
|
+
query[FIELDS_PARAM] = normalize_fields_param(query[FIELDS_PARAM]) if query.key?(FIELDS_PARAM)
|
|
53
|
+
if request_representation && request_object
|
|
54
|
+
header[:content_type] ||= JSON_CONTENT_TYPE
|
|
55
|
+
self.body = request_representation.new(request_object).to_json(skip_undefined: true)
|
|
56
|
+
end
|
|
57
|
+
super
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Deserialize the response body if present
|
|
61
|
+
#
|
|
62
|
+
# @param [String] content_type
|
|
63
|
+
# Content type of body
|
|
64
|
+
# @param [String, #read] body
|
|
65
|
+
# Response body
|
|
66
|
+
# @return [Object]
|
|
67
|
+
# Response object
|
|
68
|
+
# noinspection RubyUnusedLocalVariable
|
|
69
|
+
def decode_response_body(content_type, body)
|
|
70
|
+
return super unless response_representation
|
|
71
|
+
return super if content_type.nil?
|
|
72
|
+
return nil unless content_type.start_with?(JSON_CONTENT_TYPE)
|
|
73
|
+
instance = response_class.new
|
|
74
|
+
response_representation.new(instance).from_json(body, unwrap: response_class)
|
|
75
|
+
instance
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# Check the response and raise error if needed
|
|
79
|
+
#
|
|
80
|
+
# @param [Fixnum] status
|
|
81
|
+
# HTTP status code of response
|
|
82
|
+
# @param [Hurley::Header] header
|
|
83
|
+
# HTTP response headers
|
|
84
|
+
# @param [String] body
|
|
85
|
+
# HTTP response body
|
|
86
|
+
# @param [String] message
|
|
87
|
+
# Error message text
|
|
88
|
+
# @return [void]
|
|
89
|
+
# @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
|
|
90
|
+
# @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
|
|
91
|
+
# @raise [Google::Apis::AuthorizationError] Authorization is required
|
|
92
|
+
def check_status(status, header = nil, body = nil, message = nil)
|
|
93
|
+
case status
|
|
94
|
+
when 400, 402...500
|
|
95
|
+
error = parse_error(body)
|
|
96
|
+
if error
|
|
97
|
+
message = sprintf('%s: %s', error['reason'], error['message'])
|
|
98
|
+
raise Google::Apis::RateLimitError.new(message,
|
|
99
|
+
status_code: status,
|
|
100
|
+
header: header,
|
|
101
|
+
body: body) if RATE_LIMIT_ERRORS.include?(error['reason'])
|
|
102
|
+
end
|
|
103
|
+
super(status, header, body, message)
|
|
104
|
+
else
|
|
105
|
+
super(status, header, body, message)
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
private
|
|
110
|
+
|
|
111
|
+
# Attempt to parse a JSON error message, returning the first found error
|
|
112
|
+
# @param [String] body
|
|
113
|
+
# HTTP response body
|
|
114
|
+
# @return [Hash]
|
|
115
|
+
def parse_error(body)
|
|
116
|
+
hash = MultiJson.load(body)
|
|
117
|
+
hash['error']['errors'].first
|
|
118
|
+
rescue
|
|
119
|
+
nil
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
# Convert field names from ruby conventions to original names in JSON
|
|
123
|
+
#
|
|
124
|
+
# @param [String] fields
|
|
125
|
+
# Value of 'fields' param
|
|
126
|
+
# @return [String]
|
|
127
|
+
# Updated header value
|
|
128
|
+
def normalize_fields_param(fields)
|
|
129
|
+
# TODO: Generate map of parameter names during code gen. Small possibility that camelization fails
|
|
130
|
+
fields.gsub(/:/, '').gsub(/[\w_]+/) { |str| ActiveSupport::Inflector.camelize(str, false) }
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
end
|
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
# Copyright 2015 Google Inc.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
require 'addressable/uri'
|
|
16
|
+
require 'addressable/template'
|
|
17
|
+
require 'google/apis/version'
|
|
18
|
+
require 'google/apis/core/api_command'
|
|
19
|
+
require 'google/apis/core/batch'
|
|
20
|
+
require 'google/apis/core/upload'
|
|
21
|
+
require 'google/apis/core/download'
|
|
22
|
+
require 'google/apis/core/http_client_adapter'
|
|
23
|
+
require 'google/apis/options'
|
|
24
|
+
require 'googleauth'
|
|
25
|
+
require 'hurley'
|
|
26
|
+
require 'hurley/addressable'
|
|
27
|
+
|
|
28
|
+
module Google
|
|
29
|
+
module Apis
|
|
30
|
+
module Core
|
|
31
|
+
# Base service for all APIs. Not to be used directly.
|
|
32
|
+
#
|
|
33
|
+
class BaseService
|
|
34
|
+
# Root URL (host/port) for the API
|
|
35
|
+
# @return [Addressable::URI]
|
|
36
|
+
attr_accessor :root_url
|
|
37
|
+
|
|
38
|
+
# Additional path prefix for all API methods
|
|
39
|
+
# @return [Addressable::URI]
|
|
40
|
+
attr_accessor :base_path
|
|
41
|
+
|
|
42
|
+
# Alternate path prefix for media uploads
|
|
43
|
+
# @return [Addressable::URI]
|
|
44
|
+
attr_accessor :upload_path
|
|
45
|
+
|
|
46
|
+
# Alternate path prefix for all batch methods
|
|
47
|
+
# @return [Addressable::URI]
|
|
48
|
+
attr_accessor :batch_path
|
|
49
|
+
|
|
50
|
+
# HTTP client
|
|
51
|
+
# @return [Hurley::Client]
|
|
52
|
+
attr_accessor :client
|
|
53
|
+
|
|
54
|
+
# General settings
|
|
55
|
+
# @return [Google::Apis::ClientOptions]
|
|
56
|
+
attr_accessor :client_options
|
|
57
|
+
|
|
58
|
+
# Default options for all requests
|
|
59
|
+
# @return [Google::Apis::RequestOptions]
|
|
60
|
+
attr_accessor :request_options
|
|
61
|
+
|
|
62
|
+
# @param [String,Addressable::URI] root_url
|
|
63
|
+
# Root URL for the API
|
|
64
|
+
# @param [String,Addressable::URI] base_path
|
|
65
|
+
# Additional path prefix for all API methods
|
|
66
|
+
# @api private
|
|
67
|
+
def initialize(root_url, base_path)
|
|
68
|
+
self.root_url = root_url
|
|
69
|
+
self.base_path = base_path
|
|
70
|
+
self.upload_path = "upload/#{base_path}"
|
|
71
|
+
self.batch_path = 'batch'
|
|
72
|
+
self.client_options = Google::Apis::ClientOptions.default.dup
|
|
73
|
+
self.request_options = Google::Apis::RequestOptions.default.dup
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# @!attribute [rw] authorization
|
|
77
|
+
# @return [Signet::OAuth2::Client]
|
|
78
|
+
# OAuth2 credentials
|
|
79
|
+
def authorization=(authorization)
|
|
80
|
+
request_options.authorization = authorization
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def authorization
|
|
84
|
+
request_options.authorization
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# TODO: with(options) method
|
|
88
|
+
|
|
89
|
+
# Perform a batch request. Calls made within the block are sent in a single network
|
|
90
|
+
# request to the server.
|
|
91
|
+
#
|
|
92
|
+
# @example
|
|
93
|
+
# service.batch do |service|
|
|
94
|
+
# service.get_item(id1) do |res, err|
|
|
95
|
+
# # process response for 1st call
|
|
96
|
+
# end
|
|
97
|
+
# # ...
|
|
98
|
+
# service.get_item(idN) do |res, err|
|
|
99
|
+
# # process response for Nth call
|
|
100
|
+
# end
|
|
101
|
+
# end
|
|
102
|
+
#
|
|
103
|
+
# @param [Hash, Google::Apis::RequestOptions] options
|
|
104
|
+
# Request-specific options
|
|
105
|
+
# @yield [self]
|
|
106
|
+
# @return [void]
|
|
107
|
+
def batch(options = nil)
|
|
108
|
+
batch_command = BatchCommand.new(:post, Addressable::URI.parse(root_url + batch_path))
|
|
109
|
+
batch_command.options = request_options.merge(options)
|
|
110
|
+
apply_command_defaults(batch_command)
|
|
111
|
+
begin
|
|
112
|
+
Thread.current[:google_api_batch] = batch_command
|
|
113
|
+
yield self
|
|
114
|
+
ensure
|
|
115
|
+
Thread.current[:google_api_batch] = nil
|
|
116
|
+
end
|
|
117
|
+
batch_command.execute(client)
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# Perform a batch upload request. Calls made within the block are sent in a single network
|
|
121
|
+
# request to the server. Batch uploads are useful for uploading multiple small files. For larger
|
|
122
|
+
# files, use single requests which use a resumable upload protocol.
|
|
123
|
+
#
|
|
124
|
+
# @example
|
|
125
|
+
# service.batch do |service|
|
|
126
|
+
# service.insert_item(upload_source: 'file1.txt') do |res, err|
|
|
127
|
+
# # process response for 1st call
|
|
128
|
+
# end
|
|
129
|
+
# # ...
|
|
130
|
+
# service.insert_item(upload_source: 'fileN.txt') do |res, err|
|
|
131
|
+
# # process response for Nth call
|
|
132
|
+
# end
|
|
133
|
+
# end
|
|
134
|
+
#
|
|
135
|
+
# @param [Hash, Google::Apis::RequestOptions] options
|
|
136
|
+
# Request-specific options
|
|
137
|
+
# @yield [self]
|
|
138
|
+
# @return [void]
|
|
139
|
+
def batch_upload(options = nil)
|
|
140
|
+
batch_command = BatchUploadCommand.new(:put, Addressable::URI.parse(root_url + upload_path))
|
|
141
|
+
batch_command.options = request_options.merge(options)
|
|
142
|
+
apply_command_defaults(batch_command)
|
|
143
|
+
begin
|
|
144
|
+
Thread.current[:google_api_batch] = batch_command
|
|
145
|
+
yield self
|
|
146
|
+
ensure
|
|
147
|
+
Thread.current[:google_api_batch] = nil
|
|
148
|
+
end
|
|
149
|
+
batch_command.execute(client)
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
# Get the current HTTP client
|
|
153
|
+
# @return [Hurley::Client]
|
|
154
|
+
def client
|
|
155
|
+
@client ||= new_client
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
# Simple escape hatch for making API requests directly to a given
|
|
160
|
+
# URL. This is not intended to be used as a generic HTTP client
|
|
161
|
+
# and should be used only in cases where no service method exists
|
|
162
|
+
# (e.g. fetching an export link for a Google Drive file.)
|
|
163
|
+
#
|
|
164
|
+
# @param [Symbol] method
|
|
165
|
+
# HTTP method as symbol (e.g. :get, :post, :put, ...)
|
|
166
|
+
# @param [String] url
|
|
167
|
+
# URL to call
|
|
168
|
+
# @param [Hash<String,String>] params
|
|
169
|
+
# Optional hash of query parameters
|
|
170
|
+
# @param [#read] body
|
|
171
|
+
# Optional body for POST/PUT
|
|
172
|
+
# @param [IO, String] download_dest
|
|
173
|
+
# IO stream or filename to receive content download
|
|
174
|
+
# @param [Google::Apis::RequestOptions] options
|
|
175
|
+
# Request-specific options
|
|
176
|
+
#
|
|
177
|
+
# @yield [result, err] Result & error if block supplied
|
|
178
|
+
# @yieldparam result [String] HTTP response body
|
|
179
|
+
# @yieldparam err [StandardError] error object if request failed
|
|
180
|
+
#
|
|
181
|
+
# @return [String] HTTP response body
|
|
182
|
+
def http(method, url, params: nil, body: nil, download_dest: nil, options: nil, &block)
|
|
183
|
+
if download_dest
|
|
184
|
+
command = DownloadCommand.new(method, url, body: body)
|
|
185
|
+
else
|
|
186
|
+
command = HttpCommand.new(method, url, body: body)
|
|
187
|
+
end
|
|
188
|
+
command.options = request_options.merge(options)
|
|
189
|
+
apply_command_defaults(command)
|
|
190
|
+
command.query.merge(Hash(params))
|
|
191
|
+
execute_or_queue_command(command, &block)
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
protected
|
|
195
|
+
|
|
196
|
+
# Create a new upload command.
|
|
197
|
+
#
|
|
198
|
+
# @param [symbol] method
|
|
199
|
+
# HTTP method for uploading (typically :put or :post)
|
|
200
|
+
# @param [String] path
|
|
201
|
+
# Additional path to upload endpoint, appended to API base path
|
|
202
|
+
# @param [Hash, Google::Apis::RequestOptions] options
|
|
203
|
+
# Request-specific options
|
|
204
|
+
# @return [Google::Apis::Core::UploadCommand]
|
|
205
|
+
def make_upload_command(method, path, options)
|
|
206
|
+
template = Addressable::Template.new(root_url + upload_path + path)
|
|
207
|
+
if batch?
|
|
208
|
+
command = MultipartUploadCommand.new(method, template)
|
|
209
|
+
else
|
|
210
|
+
command = ResumableUploadCommand.new(method, template)
|
|
211
|
+
end
|
|
212
|
+
command.options = request_options.merge(options)
|
|
213
|
+
apply_command_defaults(command)
|
|
214
|
+
command
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
# Create a new download command.
|
|
218
|
+
#
|
|
219
|
+
# @param [symbol] method
|
|
220
|
+
# HTTP method for uploading (typically :get)
|
|
221
|
+
# @param [String] path
|
|
222
|
+
# Additional path to download endpoint, appended to API base path
|
|
223
|
+
# @param [Hash, Google::Apis::RequestOptions] options
|
|
224
|
+
# Request-specific options
|
|
225
|
+
# @return [Google::Apis::Core::DownloadCommand]
|
|
226
|
+
def make_download_command(method, path, options)
|
|
227
|
+
template = Addressable::Template.new(root_url + base_path + path)
|
|
228
|
+
command = DownloadCommand.new(method, template)
|
|
229
|
+
command.options = request_options.merge(options)
|
|
230
|
+
command.query['alt'] = 'media'
|
|
231
|
+
apply_command_defaults(command)
|
|
232
|
+
command
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
# Create a new command.
|
|
236
|
+
#
|
|
237
|
+
# @param [symbol] method
|
|
238
|
+
# HTTP method (:get, :post, :delete, etc...)
|
|
239
|
+
# @param [String] path
|
|
240
|
+
# Additional path, appended to API base path
|
|
241
|
+
# @param [Hash, Google::Apis::RequestOptions] options
|
|
242
|
+
# Request-specific options
|
|
243
|
+
# @return [Google::Apis::Core::DownloadCommand]
|
|
244
|
+
def make_simple_command(method, path, options)
|
|
245
|
+
template = Addressable::Template.new(root_url + base_path + path)
|
|
246
|
+
command = ApiCommand.new(method, template)
|
|
247
|
+
command.options = request_options.merge(options)
|
|
248
|
+
apply_command_defaults(command)
|
|
249
|
+
command
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
# Execute the request. If a batch is in progress, the request is added to the batch instead.
|
|
253
|
+
#
|
|
254
|
+
# @param [Google::Apis::Core::HttpCommand] command
|
|
255
|
+
# Command to execute
|
|
256
|
+
# @return [Object] response object if command executed and no callback supplied
|
|
257
|
+
# @yield [result, err] Result & error if block supplied
|
|
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_or_queue_command(command, &callback)
|
|
262
|
+
batch_command = current_batch
|
|
263
|
+
if batch_command
|
|
264
|
+
batch_command.add(command, &callback)
|
|
265
|
+
nil
|
|
266
|
+
else
|
|
267
|
+
command.execute(client, &callback)
|
|
268
|
+
end
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
# Update commands with service-specific options. To be implemented by subclasses
|
|
272
|
+
# @param [Google::Apis::Core::HttpCommand] _command
|
|
273
|
+
def apply_command_defaults(_command)
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
private
|
|
277
|
+
|
|
278
|
+
# Get the current batch context
|
|
279
|
+
#
|
|
280
|
+
# @return [Google:Apis::Core::BatchRequest]
|
|
281
|
+
def current_batch
|
|
282
|
+
Thread.current[:google_api_batch]
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
# Check if a batch is in progress
|
|
286
|
+
# @return [Boolean]
|
|
287
|
+
def batch?
|
|
288
|
+
!current_batch.nil?
|
|
289
|
+
end
|
|
290
|
+
|
|
291
|
+
# Create a new HTTP client
|
|
292
|
+
# @return [Hurley::Client]
|
|
293
|
+
def new_client
|
|
294
|
+
client = Hurley::Client.new
|
|
295
|
+
client.connection = Google::Apis::Core::HttpClientAdapter.new unless client_options.use_net_http
|
|
296
|
+
client.request_options.timeout = request_options.timeout_sec
|
|
297
|
+
client.request_options.open_timeout = request_options.open_timeout_sec
|
|
298
|
+
client.request_options.proxy = client_options.proxy_url
|
|
299
|
+
client.request_options.query_class = Hurley::Query::Flat
|
|
300
|
+
client.ssl_options.ca_file = File.join(Google::Apis::ROOT, 'lib', 'cacerts.pem')
|
|
301
|
+
client.header[:user_agent] = user_agent
|
|
302
|
+
client
|
|
303
|
+
end
|
|
304
|
+
|
|
305
|
+
# Build the user agent header
|
|
306
|
+
# @return [String]
|
|
307
|
+
def user_agent
|
|
308
|
+
sprintf('%s/%s google-api-ruby-client/%s %s (gzip)',
|
|
309
|
+
client_options.application_name,
|
|
310
|
+
client_options.application_version,
|
|
311
|
+
Google::Apis::VERSION,
|
|
312
|
+
Google::Apis::OS_VERSION)
|
|
313
|
+
end
|
|
314
|
+
end
|
|
315
|
+
end
|
|
316
|
+
end
|
|
317
|
+
end
|