google-api-client 0.8.7 → 0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +20 -0
- data/.rspec +2 -0
- data/.rubocop.yml +7 -0
- data/.rubocop_todo.yml +63 -0
- data/.travis.yml +22 -0
- data/.yardopts +12 -0
- data/CHANGELOG.md +40 -4
- data/CONTRIBUTING.md +31 -0
- data/Gemfile +32 -2
- data/MIGRATING.md +171 -0
- data/README.md +181 -148
- data/Rakefile +1 -40
- data/api_names.yaml +1036 -0
- data/api_names_out.yaml +26053 -0
- data/bin/generate-api +95 -0
- data/generated/google/apis/adexchangebuyer_v1_3/classes.rb +1335 -0
- data/generated/google/apis/adexchangebuyer_v1_3/representations.rb +446 -0
- data/generated/google/apis/adexchangebuyer_v1_3/service.rb +872 -0
- data/generated/google/apis/adexchangebuyer_v1_3.rb +35 -0
- data/generated/google/apis/adexchangeseller_v2_0/classes.rb +792 -0
- data/generated/google/apis/adexchangeseller_v2_0/representations.rb +309 -0
- data/generated/google/apis/adexchangeseller_v2_0/service.rb +668 -0
- data/generated/google/apis/adexchangeseller_v2_0.rb +38 -0
- data/generated/google/apis/admin_datatransfer_v1/classes.rb +267 -0
- data/generated/google/apis/admin_datatransfer_v1/representations.rb +118 -0
- data/generated/google/apis/admin_datatransfer_v1/service.rb +262 -0
- data/generated/google/apis/admin_datatransfer_v1.rb +37 -0
- data/generated/google/apis/admin_directory_v1/classes.rb +3141 -0
- data/generated/google/apis/admin_directory_v1/representations.rb +1029 -0
- data/generated/google/apis/admin_directory_v1/service.rb +3818 -0
- data/generated/google/apis/admin_directory_v1.rb +113 -0
- data/generated/google/apis/admin_reports_v1/classes.rb +582 -0
- data/generated/google/apis/admin_reports_v1/representations.rb +231 -0
- data/generated/google/apis/admin_reports_v1/service.rb +336 -0
- data/generated/google/apis/admin_reports_v1.rb +38 -0
- data/generated/google/apis/adsense_v1_4/classes.rb +1285 -0
- data/generated/google/apis/adsense_v1_4/representations.rb +494 -0
- data/generated/google/apis/adsense_v1_4/service.rb +1714 -0
- data/generated/google/apis/adsense_v1_4.rb +38 -0
- data/generated/google/apis/adsensehost_v4_1/classes.rb +834 -0
- data/generated/google/apis/adsensehost_v4_1/representations.rb +327 -0
- data/generated/google/apis/adsensehost_v4_1/service.rb +1164 -0
- data/generated/google/apis/adsensehost_v4_1.rb +35 -0
- data/generated/google/apis/analytics_v3/classes.rb +5118 -0
- data/generated/google/apis/analytics_v3/representations.rb +1662 -0
- data/generated/google/apis/analytics_v3/service.rb +3568 -0
- data/generated/google/apis/analytics_v3.rb +49 -0
- data/generated/google/apis/androidenterprise_v1/classes.rb +1443 -0
- data/generated/google/apis/androidenterprise_v1/representations.rb +538 -0
- data/generated/google/apis/androidenterprise_v1/service.rb +2602 -0
- data/generated/google/apis/androidenterprise_v1.rb +35 -0
- data/generated/google/apis/androidpublisher_v2/classes.rb +1411 -0
- data/generated/google/apis/androidpublisher_v2/representations.rb +646 -0
- data/generated/google/apis/androidpublisher_v2/service.rb +2338 -0
- data/generated/google/apis/androidpublisher_v2.rb +34 -0
- data/generated/google/apis/appengine_v1beta4/classes.rb +1532 -0
- data/generated/google/apis/appengine_v1beta4/representations.rb +526 -0
- data/generated/google/apis/appengine_v1beta4/service.rb +476 -0
- data/generated/google/apis/appengine_v1beta4.rb +35 -0
- data/generated/google/apis/appsactivity_v1/classes.rb +392 -0
- data/generated/google/apis/appsactivity_v1/representations.rb +184 -0
- data/generated/google/apis/appsactivity_v1/service.rb +128 -0
- data/generated/google/apis/appsactivity_v1.rb +46 -0
- data/generated/google/apis/appstate_v1/classes.rb +154 -0
- data/generated/google/apis/appstate_v1/representations.rb +79 -0
- data/generated/google/apis/appstate_v1/service.rb +260 -0
- data/generated/google/apis/appstate_v1.rb +34 -0
- data/generated/google/apis/autoscaler_v1beta2/classes.rb +747 -0
- data/generated/google/apis/autoscaler_v1beta2/representations.rb +281 -0
- data/generated/google/apis/autoscaler_v1beta2/service.rb +478 -0
- data/generated/google/apis/autoscaler_v1beta2.rb +38 -0
- data/generated/google/apis/bigquery_v2/classes.rb +2471 -0
- data/generated/google/apis/bigquery_v2/representations.rb +816 -0
- data/generated/google/apis/bigquery_v2/service.rb +982 -0
- data/generated/google/apis/bigquery_v2.rb +52 -0
- data/generated/google/apis/blogger_v3/classes.rb +1354 -0
- data/generated/google/apis/blogger_v3/representations.rb +562 -0
- data/generated/google/apis/blogger_v3/service.rb +1587 -0
- data/generated/google/apis/blogger_v3.rb +37 -0
- data/generated/google/apis/books_v1/classes.rb +3956 -0
- data/generated/google/apis/books_v1/representations.rb +1538 -0
- data/generated/google/apis/books_v1/service.rb +2290 -0
- data/generated/google/apis/books_v1.rb +34 -0
- data/generated/google/apis/calendar_v3/classes.rb +1742 -0
- data/generated/google/apis/calendar_v3/representations.rb +567 -0
- data/generated/google/apis/calendar_v3/service.rb +1968 -0
- data/generated/google/apis/calendar_v3.rb +37 -0
- data/generated/google/apis/civicinfo_v2/classes.rb +1127 -0
- data/generated/google/apis/civicinfo_v2/representations.rb +383 -0
- data/generated/google/apis/civicinfo_v2/service.rb +279 -0
- data/{lib/google/api_client/service_account.rb → generated/google/apis/civicinfo_v2.rb} +18 -8
- data/generated/google/apis/classroom_v1/classes.rb +512 -0
- data/generated/google/apis/classroom_v1/representations.rb +217 -0
- data/generated/google/apis/classroom_v1/service.rb +970 -0
- data/generated/google/apis/classroom_v1.rb +49 -0
- data/generated/google/apis/classroom_v1beta1/classes.rb +447 -0
- data/generated/google/apis/classroom_v1beta1/representations.rb +190 -0
- data/generated/google/apis/classroom_v1beta1/service.rb +791 -0
- data/generated/google/apis/classroom_v1beta1.rb +49 -0
- data/generated/google/apis/cloudbilling_v1/classes.rb +169 -0
- data/generated/google/apis/cloudbilling_v1/representations.rb +79 -0
- data/generated/google/apis/cloudbilling_v1/service.rb +258 -0
- data/generated/google/apis/cloudbilling_v1.rb +35 -0
- data/generated/google/apis/clouddebugger_v2/classes.rb +1004 -0
- data/generated/google/apis/clouddebugger_v2/representations.rb +410 -0
- data/generated/google/apis/clouddebugger_v2/service.rb +370 -0
- data/generated/google/apis/clouddebugger_v2.rb +41 -0
- data/generated/google/apis/cloudmonitoring_v2beta2/classes.rb +679 -0
- data/generated/google/apis/cloudmonitoring_v2beta2/representations.rb +311 -0
- data/generated/google/apis/cloudmonitoring_v2beta2/service.rb +452 -0
- data/generated/google/apis/cloudmonitoring_v2beta2.rb +37 -0
- data/generated/google/apis/cloudresourcemanager_v1beta1/classes.rb +437 -0
- data/generated/google/apis/cloudresourcemanager_v1beta1/representations.rb +188 -0
- data/generated/google/apis/cloudresourcemanager_v1beta1/service.rb +623 -0
- data/generated/google/apis/cloudresourcemanager_v1beta1.rb +38 -0
- data/generated/google/apis/cloudtrace_v1/classes.rb +188 -0
- data/generated/google/apis/cloudtrace_v1/representations.rb +92 -0
- data/generated/google/apis/cloudtrace_v1/service.rb +190 -0
- data/generated/google/apis/cloudtrace_v1.rb +35 -0
- data/generated/google/apis/clouduseraccounts_beta/classes.rb +823 -0
- data/generated/google/apis/clouduseraccounts_beta/representations.rb +313 -0
- data/generated/google/apis/clouduseraccounts_beta/service.rb +854 -0
- data/generated/google/apis/clouduseraccounts_beta.rb +43 -0
- data/generated/google/apis/compute_beta/classes.rb +9128 -0
- data/generated/google/apis/compute_beta/representations.rb +3048 -0
- data/generated/google/apis/compute_beta/service.rb +10154 -0
- data/generated/google/apis/compute_beta.rb +49 -0
- data/generated/google/apis/compute_v1/classes.rb +8681 -0
- data/generated/google/apis/compute_v1/representations.rb +2895 -0
- data/generated/google/apis/compute_v1/service.rb +9252 -0
- data/generated/google/apis/compute_v1.rb +49 -0
- data/generated/google/apis/container_v1/classes.rb +463 -0
- data/generated/google/apis/container_v1/representations.rb +175 -0
- data/generated/google/apis/container_v1/service.rb +367 -0
- data/generated/google/apis/container_v1.rb +35 -0
- data/generated/google/apis/container_v1beta1/classes.rb +466 -0
- data/generated/google/apis/container_v1beta1/representations.rb +177 -0
- data/generated/google/apis/container_v1beta1/service.rb +394 -0
- data/generated/google/apis/container_v1beta1.rb +35 -0
- data/generated/google/apis/content_v2/classes.rb +5986 -0
- data/generated/google/apis/content_v2/representations.rb +2288 -0
- data/generated/google/apis/content_v2/service.rb +2338 -0
- data/generated/google/apis/content_v2.rb +35 -0
- data/generated/google/apis/coordinate_v1/classes.rb +669 -0
- data/generated/google/apis/coordinate_v1/representations.rb +285 -0
- data/generated/google/apis/coordinate_v1/service.rb +678 -0
- data/generated/google/apis/coordinate_v1.rb +37 -0
- data/generated/google/apis/customsearch_v1/classes.rb +771 -0
- data/generated/google/apis/customsearch_v1/representations.rb +276 -0
- data/generated/google/apis/customsearch_v1/service.rb +207 -0
- data/{lib/google/api_client/auth/compute_service_account.rb → generated/google/apis/customsearch_v1.rb} +13 -10
- data/generated/google/apis/datastore_v1beta2/classes.rb +1186 -0
- data/generated/google/apis/datastore_v1beta2/representations.rb +526 -0
- data/generated/google/apis/datastore_v1beta2/service.rb +294 -0
- data/generated/google/apis/datastore_v1beta2.rb +40 -0
- data/generated/google/apis/deploymentmanager_v2/classes.rb +1091 -0
- data/generated/google/apis/deploymentmanager_v2/representations.rb +422 -0
- data/generated/google/apis/deploymentmanager_v2/service.rb +857 -0
- data/generated/google/apis/deploymentmanager_v2.rb +44 -0
- data/generated/google/apis/deploymentmanager_v2beta2/classes.rb +843 -0
- data/generated/google/apis/deploymentmanager_v2beta2/representations.rb +306 -0
- data/generated/google/apis/deploymentmanager_v2beta2/service.rb +689 -0
- data/generated/google/apis/deploymentmanager_v2beta2.rb +44 -0
- data/generated/google/apis/dfareporting_v2_1/classes.rb +10770 -0
- data/generated/google/apis/dfareporting_v2_1/representations.rb +3438 -0
- data/generated/google/apis/dfareporting_v2_1/service.rb +8585 -0
- data/generated/google/apis/dfareporting_v2_1.rb +37 -0
- data/generated/google/apis/discovery_v1/classes.rb +961 -0
- data/generated/google/apis/discovery_v1/representations.rb +357 -0
- data/generated/google/apis/discovery_v1/service.rb +142 -0
- data/generated/google/apis/discovery_v1.rb +32 -0
- data/generated/google/apis/dns_v1/classes.rb +406 -0
- data/generated/google/apis/dns_v1/representations.rb +151 -0
- data/generated/google/apis/dns_v1/service.rb +454 -0
- data/generated/google/apis/dns_v1.rb +44 -0
- data/generated/google/apis/doubleclickbidmanager_v1/classes.rb +716 -0
- data/generated/google/apis/doubleclickbidmanager_v1/representations.rb +298 -0
- data/generated/google/apis/doubleclickbidmanager_v1/service.rb +341 -0
- data/generated/google/apis/doubleclickbidmanager_v1.rb +31 -0
- data/generated/google/apis/doubleclicksearch_v2/classes.rb +956 -0
- data/generated/google/apis/doubleclicksearch_v2/representations.rb +316 -0
- data/generated/google/apis/doubleclicksearch_v2/service.rb +480 -0
- data/generated/google/apis/doubleclicksearch_v2.rb +35 -0
- data/generated/google/apis/drive_v2/classes.rb +2562 -0
- data/generated/google/apis/drive_v2/representations.rb +795 -0
- data/generated/google/apis/drive_v2/service.rb +2696 -0
- data/generated/google/apis/drive_v2.rb +58 -0
- data/generated/google/apis/drive_v3/classes.rb +1534 -0
- data/generated/google/apis/drive_v3/representations.rb +497 -0
- data/generated/google/apis/drive_v3/service.rb +1541 -0
- data/generated/google/apis/drive_v3.rb +55 -0
- data/generated/google/apis/fitness_v1/classes.rb +885 -0
- data/generated/google/apis/fitness_v1/representations.rb +320 -0
- data/generated/google/apis/fitness_v1/service.rb +675 -0
- data/generated/google/apis/fitness_v1.rb +49 -0
- data/generated/google/apis/fusiontables_v2/classes.rb +1048 -0
- data/generated/google/apis/fusiontables_v2/representations.rb +409 -0
- data/generated/google/apis/fusiontables_v2/service.rb +1463 -0
- data/generated/google/apis/fusiontables_v2.rb +37 -0
- data/generated/google/apis/games_configuration_v1configuration/classes.rb +506 -0
- data/generated/google/apis/games_configuration_v1configuration/representations.rb +206 -0
- data/generated/google/apis/games_configuration_v1configuration/service.rb +565 -0
- data/generated/google/apis/games_configuration_v1configuration.rb +34 -0
- data/generated/google/apis/games_management_v1management/classes.rb +524 -0
- data/generated/google/apis/games_management_v1management/representations.rb +231 -0
- data/generated/google/apis/games_management_v1management/service.rb +994 -0
- data/generated/google/apis/games_management_v1management.rb +37 -0
- data/generated/google/apis/games_v1/classes.rb +4617 -0
- data/generated/google/apis/games_v1/representations.rb +1584 -0
- data/generated/google/apis/games_v1/service.rb +2290 -0
- data/generated/google/apis/games_v1.rb +40 -0
- data/generated/google/apis/gan_v1beta1/classes.rb +1428 -0
- data/generated/google/apis/gan_v1beta1/representations.rb +428 -0
- data/generated/google/apis/gan_v1beta1/service.rb +682 -0
- data/generated/google/apis/gan_v1beta1.rb +31 -0
- data/generated/google/apis/genomics_v1/classes.rb +2609 -0
- data/generated/google/apis/genomics_v1/representations.rb +909 -0
- data/generated/google/apis/genomics_v1/service.rb +1676 -0
- data/generated/google/apis/genomics_v1.rb +49 -0
- data/generated/google/apis/genomics_v1beta2/classes.rb +3288 -0
- data/generated/google/apis/genomics_v1beta2/representations.rb +1194 -0
- data/generated/google/apis/genomics_v1beta2/service.rb +2392 -0
- data/generated/google/apis/genomics_v1beta2.rb +46 -0
- data/generated/google/apis/gmail_v1/classes.rb +794 -0
- data/generated/google/apis/gmail_v1/representations.rb +339 -0
- data/generated/google/apis/gmail_v1/service.rb +1470 -0
- data/generated/google/apis/gmail_v1.rb +52 -0
- data/generated/google/apis/groupsmigration_v1/classes.rb +51 -0
- data/generated/google/apis/groupsmigration_v1/representations.rb +38 -0
- data/generated/google/apis/groupsmigration_v1/service.rb +110 -0
- data/generated/google/apis/groupsmigration_v1.rb +34 -0
- data/generated/google/apis/groupssettings_v1/classes.rb +221 -0
- data/generated/google/apis/groupssettings_v1/representations.rb +64 -0
- data/generated/google/apis/groupssettings_v1/service.rb +179 -0
- data/generated/google/apis/groupssettings_v1.rb +34 -0
- data/generated/google/apis/identitytoolkit_v3/classes.rb +1466 -0
- data/generated/google/apis/identitytoolkit_v3/representations.rb +509 -0
- data/generated/google/apis/identitytoolkit_v3/service.rb +581 -0
- data/generated/google/apis/identitytoolkit_v3.rb +31 -0
- data/generated/google/apis/kgsearch_v1/classes.rb +59 -0
- data/generated/google/apis/kgsearch_v1/representations.rb +39 -0
- data/generated/google/apis/kgsearch_v1/service.rb +111 -0
- data/{spec/google/api_client/request_spec.rb → generated/google/apis/kgsearch_v1.rb} +16 -13
- data/generated/google/apis/licensing_v1/classes.rb +132 -0
- data/generated/google/apis/licensing_v1/representations.rb +68 -0
- data/generated/google/apis/licensing_v1/service.rb +369 -0
- data/generated/google/apis/licensing_v1.rb +34 -0
- data/generated/google/apis/logging_v1beta3/classes.rb +1079 -0
- data/generated/google/apis/logging_v1beta3/representations.rb +366 -0
- data/generated/google/apis/logging_v1beta3/service.rb +1001 -0
- data/generated/google/apis/logging_v1beta3.rb +47 -0
- data/generated/google/apis/manager_v1beta2/classes.rb +1287 -0
- data/generated/google/apis/manager_v1beta2/representations.rb +536 -0
- data/generated/google/apis/manager_v1beta2/service.rb +372 -0
- data/generated/google/apis/manager_v1beta2.rb +53 -0
- data/generated/google/apis/mapsengine_v1/classes.rb +2873 -0
- data/generated/google/apis/mapsengine_v1/representations.rb +1235 -0
- data/generated/google/apis/mapsengine_v1/service.rb +3388 -0
- data/generated/google/apis/mapsengine_v1.rb +38 -0
- data/generated/google/apis/mirror_v1/classes.rb +1072 -0
- data/generated/google/apis/mirror_v1/representations.rb +350 -0
- data/generated/google/apis/mirror_v1/service.rb +977 -0
- data/generated/google/apis/mirror_v1.rb +37 -0
- data/generated/google/apis/oauth2_v2/classes.rb +245 -0
- data/generated/google/apis/oauth2_v2/representations.rb +94 -0
- data/generated/google/apis/oauth2_v2/service.rb +199 -0
- data/generated/google/apis/oauth2_v2.rb +43 -0
- data/generated/google/apis/pagespeedonline_v2/classes.rb +614 -0
- data/generated/google/apis/pagespeedonline_v2/representations.rb +244 -0
- data/generated/google/apis/pagespeedonline_v2/service.rb +119 -0
- data/generated/google/apis/pagespeedonline_v2.rb +32 -0
- data/generated/google/apis/partners_v2/classes.rb +942 -0
- data/generated/google/apis/partners_v2/representations.rb +402 -0
- data/generated/google/apis/partners_v2/service.rb +400 -0
- data/generated/google/apis/partners_v2.rb +32 -0
- data/generated/google/apis/plus_domains_v1/classes.rb +2609 -0
- data/generated/google/apis/plus_domains_v1/representations.rb +987 -0
- data/generated/google/apis/plus_domains_v1/service.rb +904 -0
- data/generated/google/apis/plus_domains_v1.rb +61 -0
- data/generated/google/apis/plus_v1/classes.rb +2094 -0
- data/generated/google/apis/plus_v1/representations.rb +805 -0
- data/generated/google/apis/plus_v1/service.rb +470 -0
- data/generated/google/apis/plus_v1.rb +43 -0
- data/generated/google/apis/prediction_v1_6/classes.rb +751 -0
- data/generated/google/apis/prediction_v1_6/representations.rb +327 -0
- data/generated/google/apis/prediction_v1_6/service.rb +380 -0
- data/generated/google/apis/prediction_v1_6.rb +44 -0
- data/generated/google/apis/proximitybeacon_v1beta1/classes.rb +639 -0
- data/generated/google/apis/proximitybeacon_v1beta1/representations.rb +274 -0
- data/generated/google/apis/proximitybeacon_v1beta1/service.rb +591 -0
- data/generated/google/apis/proximitybeacon_v1beta1.rb +31 -0
- data/generated/google/apis/pubsub_v1/classes.rb +614 -0
- data/generated/google/apis/pubsub_v1/representations.rb +281 -0
- data/generated/google/apis/pubsub_v1/service.rb +774 -0
- data/generated/google/apis/pubsub_v1.rb +37 -0
- data/generated/google/apis/pubsub_v1beta2/classes.rb +620 -0
- data/generated/google/apis/pubsub_v1beta2/representations.rb +282 -0
- data/generated/google/apis/pubsub_v1beta2/service.rb +774 -0
- data/generated/google/apis/pubsub_v1beta2.rb +37 -0
- data/generated/google/apis/qpx_express_v1/classes.rb +1268 -0
- data/generated/google/apis/qpx_express_v1/representations.rb +424 -0
- data/generated/google/apis/qpx_express_v1/service.rb +100 -0
- data/generated/google/apis/qpx_express_v1.rb +31 -0
- data/generated/google/apis/replicapool_v1beta2/classes.rb +631 -0
- data/generated/google/apis/replicapool_v1beta2/representations.rb +236 -0
- data/generated/google/apis/replicapool_v1beta2/service.rb +608 -0
- data/generated/google/apis/replicapool_v1beta2.rb +44 -0
- data/generated/google/apis/replicapoolupdater_v1beta1/classes.rb +733 -0
- data/generated/google/apis/replicapoolupdater_v1beta1/representations.rb +264 -0
- data/generated/google/apis/replicapoolupdater_v1beta1/service.rb +508 -0
- data/generated/google/apis/replicapoolupdater_v1beta1.rb +44 -0
- data/generated/google/apis/reseller_v1/classes.rb +520 -0
- data/generated/google/apis/reseller_v1/representations.rb +200 -0
- data/generated/google/apis/reseller_v1/service.rb +623 -0
- data/generated/google/apis/reseller_v1.rb +37 -0
- data/generated/google/apis/resourceviews_v1beta2/classes.rb +660 -0
- data/generated/google/apis/resourceviews_v1beta2/representations.rb +269 -0
- data/generated/google/apis/resourceviews_v1beta2/service.rb +563 -0
- data/generated/google/apis/resourceviews_v1beta2.rb +50 -0
- data/generated/google/apis/script_v1/classes.rb +259 -0
- data/generated/google/apis/script_v1/representations.rb +106 -0
- data/generated/google/apis/script_v1/service.rb +98 -0
- data/generated/google/apis/script_v1.rb +61 -0
- data/generated/google/apis/site_verification_v1/classes.rb +185 -0
- data/generated/google/apis/site_verification_v1/representations.rb +101 -0
- data/generated/google/apis/site_verification_v1/service.rb +315 -0
- data/generated/google/apis/site_verification_v1.rb +37 -0
- data/generated/google/apis/sqladmin_v1beta4/classes.rb +2001 -0
- data/generated/google/apis/sqladmin_v1beta4/representations.rb +758 -0
- data/generated/google/apis/sqladmin_v1beta4/service.rb +1625 -0
- data/generated/google/apis/sqladmin_v1beta4.rb +37 -0
- data/generated/google/apis/storage_v1/classes.rb +1222 -0
- data/generated/google/apis/storage_v1/representations.rb +445 -0
- data/generated/google/apis/storage_v1/service.rb +1903 -0
- data/generated/google/apis/storage_v1.rb +46 -0
- data/generated/google/apis/storagetransfer_v1/classes.rb +1046 -0
- data/generated/google/apis/storagetransfer_v1/representations.rb +370 -0
- data/generated/google/apis/storagetransfer_v1/service.rb +473 -0
- data/generated/google/apis/storagetransfer_v1.rb +35 -0
- data/generated/google/apis/tagmanager_v1/classes.rb +1384 -0
- data/generated/google/apis/tagmanager_v1/representations.rb +515 -0
- data/generated/google/apis/tagmanager_v1/service.rb +1817 -0
- data/generated/google/apis/tagmanager_v1.rb +52 -0
- data/generated/google/apis/taskqueue_v1beta2/classes.rb +254 -0
- data/generated/google/apis/taskqueue_v1beta2/representations.rb +114 -0
- data/generated/google/apis/taskqueue_v1beta2/service.rb +408 -0
- data/generated/google/apis/taskqueue_v1beta2.rb +37 -0
- data/generated/google/apis/tasks_v1/classes.rb +296 -0
- data/generated/google/apis/tasks_v1/representations.rb +115 -0
- data/generated/google/apis/tasks_v1/service.rb +643 -0
- data/generated/google/apis/tasks_v1.rb +37 -0
- data/generated/google/apis/translate_v2/classes.rb +168 -0
- data/generated/google/apis/translate_v2/representations.rb +109 -0
- data/generated/google/apis/translate_v2/service.rb +182 -0
- data/generated/google/apis/translate_v2.rb +31 -0
- data/generated/google/apis/urlshortener_v1/classes.rb +246 -0
- data/generated/google/apis/urlshortener_v1/representations.rb +111 -0
- data/generated/google/apis/urlshortener_v1/service.rb +176 -0
- data/generated/google/apis/urlshortener_v1.rb +34 -0
- data/generated/google/apis/webmasters_v3/classes.rb +563 -0
- data/generated/google/apis/webmasters_v3/representations.rb +250 -0
- data/generated/google/apis/webmasters_v3/service.rb +573 -0
- data/generated/google/apis/webmasters_v3.rb +37 -0
- data/generated/google/apis/youtube_analytics_v1/classes.rb +546 -0
- data/generated/google/apis/youtube_analytics_v1/representations.rb +243 -0
- data/generated/google/apis/youtube_analytics_v1/service.rb +562 -0
- data/generated/google/apis/youtube_analytics_v1.rb +46 -0
- data/generated/google/apis/youtube_v3/classes.rb +8136 -0
- data/generated/google/apis/youtube_v3/representations.rb +2838 -0
- data/generated/google/apis/youtube_v3/service.rb +4403 -0
- data/generated/google/apis/youtube_v3.rb +49 -0
- data/generated/google/apis/youtubereporting_v1/classes.rb +258 -0
- data/generated/google/apis/youtubereporting_v1/representations.rb +128 -0
- data/generated/google/apis/youtubereporting_v1/service.rb +364 -0
- data/generated/google/apis/youtubereporting_v1.rb +38 -0
- data/google-api-client.gemspec +27 -39
- data/lib/google/api_client/auth/installed_app.rb +7 -5
- data/lib/google/api_client/auth/key_utils.rb +1 -0
- data/lib/google/api_client/auth/storage.rb +4 -2
- data/lib/google/api_client/auth/storages/file_store.rb +2 -3
- data/lib/google/api_client/auth/storages/redis_store.rb +7 -2
- data/lib/google/api_client/client_secrets.rb +4 -5
- data/lib/google/apis/core/api_command.rb +135 -0
- data/lib/google/apis/core/base_service.rb +317 -0
- data/lib/google/apis/core/batch.rb +239 -0
- data/lib/google/apis/core/download.rb +94 -0
- data/lib/google/apis/core/hashable.rb +44 -0
- data/lib/google/apis/core/http_client_adapter.rb +82 -0
- data/lib/google/apis/core/http_command.rb +312 -0
- data/lib/google/apis/core/json_representation.rb +127 -0
- data/lib/google/{api_client/version.rb → apis/core/logging.rb} +12 -8
- data/lib/google/apis/core/multipart.rb +187 -0
- data/lib/google/apis/core/upload.rb +288 -0
- data/lib/google/{api_client → apis}/errors.rb +39 -28
- data/lib/google/apis/generator/annotator.rb +295 -0
- data/lib/google/apis/generator/helpers.rb +74 -0
- data/lib/google/apis/generator/model.rb +143 -0
- data/lib/google/apis/generator/template.rb +124 -0
- data/lib/google/apis/generator/templates/_class.tmpl +40 -0
- data/lib/google/apis/generator/templates/_method.tmpl +92 -0
- data/lib/google/apis/generator/templates/_representation.tmpl +51 -0
- data/lib/google/apis/generator/templates/_representation_stub.tmpl +15 -0
- data/lib/google/apis/generator/templates/_representation_type.tmpl +10 -0
- data/lib/google/{api_client/reference.rb → apis/generator/templates/classes.rb.tmpl} +11 -9
- data/lib/google/apis/generator/templates/module.rb.tmpl +40 -0
- data/lib/google/apis/generator/templates/representations.rb.tmpl +32 -0
- data/lib/google/apis/generator/templates/service.rb.tmpl +60 -0
- data/lib/google/apis/generator.rb +70 -0
- data/lib/google/apis/options.rb +85 -0
- data/lib/google/apis/version.rb +39 -0
- data/lib/google/apis.rb +48 -0
- data/rakelib/metrics.rake +22 -0
- data/rakelib/rubocop.rake +10 -0
- data/rakelib/spec.rake +11 -0
- data/rakelib/yard.rake +11 -0
- data/samples/Gemfile +7 -0
- data/samples/README.md +51 -0
- data/samples/google-api-samples +32 -0
- data/samples/lib/base_cli.rb +94 -0
- data/samples/lib/samples/analytics.rb +62 -0
- data/samples/lib/samples/calendar.rb +83 -0
- data/samples/lib/samples/drive.rb +82 -0
- data/samples/lib/samples/gmail.rb +50 -0
- data/samples/lib/samples/pubsub.rb +114 -0
- data/samples/lib/samples/translate.rb +44 -0
- data/samples/lib/samples/you_tube.rb +44 -0
- data/script/generate +95 -0
- data/script/package +8 -0
- data/script/release +15 -0
- data/spec/fixtures/files/api_names.yaml +3 -0
- data/spec/fixtures/files/auth_stored_credentials.json +8 -0
- data/spec/fixtures/files/child/.gitignore +0 -0
- data/spec/fixtures/files/client_secrets.json +1 -0
- data/spec/fixtures/files/invalid.json +1 -0
- data/spec/fixtures/files/test.blah +1 -0
- data/spec/fixtures/files/test.txt +1 -0
- data/spec/fixtures/files/test_api.json +440 -0
- data/spec/google/api_client/auth/storage_spec.rb +1 -3
- data/spec/google/api_client/auth/storages/file_store_spec.rb +1 -2
- data/spec/google/api_client/auth/storages/redis_store_spec.rb +1 -3
- data/spec/google/api_client/client_secrets_spec.rb +38 -1
- data/spec/google/apis/core/api_command_spec.rb +209 -0
- data/spec/google/apis/core/batch_spec.rb +142 -0
- data/spec/google/apis/core/download_spec.rb +103 -0
- data/spec/google/apis/core/hashable_spec.rb +60 -0
- data/spec/google/apis/core/http_command_spec.rb +284 -0
- data/spec/google/apis/core/json_representation_spec.rb +192 -0
- data/spec/google/apis/core/service_spec.rb +247 -0
- data/spec/google/apis/core/upload_spec.rb +300 -0
- data/{lib/google/api_client/discovery.rb → spec/google/apis/generated_spec.rb} +13 -5
- data/spec/google/apis/generator/generator_spec.rb +272 -0
- data/spec/google/apis/logging_spec.rb +45 -0
- data/spec/google/apis/options_spec.rb +40 -0
- data/spec/integration_tests/adsense_spec.rb +29 -0
- data/spec/integration_tests/drive_spec.rb +35 -0
- data/spec/integration_tests/pubsub_spec.rb +48 -0
- data/spec/integration_tests/url_shortener_spec.rb +45 -0
- data/spec/spec_helper/load_path_spec.rb +33 -0
- data/spec/spec_helper.rb +131 -44
- data/third_party/hurley_patches.rb +103 -0
- metadata +533 -175
- data/lib/compat/multi_json.rb +0 -19
- data/lib/google/api_client/auth/file_storage.rb +0 -59
- data/lib/google/api_client/auth/jwt_asserter.rb +0 -126
- data/lib/google/api_client/auth/pkcs12.rb +0 -41
- data/lib/google/api_client/batch.rb +0 -326
- data/lib/google/api_client/charset.rb +0 -33
- data/lib/google/api_client/discovery/api.rb +0 -310
- data/lib/google/api_client/discovery/media.rb +0 -77
- data/lib/google/api_client/discovery/method.rb +0 -363
- data/lib/google/api_client/discovery/resource.rb +0 -156
- data/lib/google/api_client/discovery/schema.rb +0 -117
- data/lib/google/api_client/environment.rb +0 -42
- data/lib/google/api_client/gzip.rb +0 -28
- data/lib/google/api_client/logging.rb +0 -32
- data/lib/google/api_client/media.rb +0 -259
- data/lib/google/api_client/railtie.rb +0 -18
- data/lib/google/api_client/request.rb +0 -350
- data/lib/google/api_client/result.rb +0 -255
- data/lib/google/api_client/service/batch.rb +0 -110
- data/lib/google/api_client/service/request.rb +0 -144
- data/lib/google/api_client/service/resource.rb +0 -40
- data/lib/google/api_client/service/result.rb +0 -162
- data/lib/google/api_client/service/simple_file_store.rb +0 -151
- data/lib/google/api_client/service/stub_generator.rb +0 -61
- data/lib/google/api_client/service.rb +0 -233
- data/lib/google/api_client.rb +0 -750
- data/spec/google/api_client/batch_spec.rb +0 -248
- data/spec/google/api_client/discovery_spec.rb +0 -708
- data/spec/google/api_client/gzip_spec.rb +0 -98
- data/spec/google/api_client/media_spec.rb +0 -178
- data/spec/google/api_client/result_spec.rb +0 -207
- data/spec/google/api_client/service_account_spec.rb +0 -169
- data/spec/google/api_client/service_spec.rb +0 -618
- data/spec/google/api_client/simple_file_store_spec.rb +0 -133
- data/spec/google/api_client_spec.rb +0 -352
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
# Copyright 2015 Google Inc.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
require 'logger'
|
|
16
|
+
require 'erb'
|
|
17
|
+
require 'yaml'
|
|
18
|
+
require 'multi_json'
|
|
19
|
+
require 'active_support/inflector'
|
|
20
|
+
require 'google/apis/core/logging'
|
|
21
|
+
require 'google/apis/generator/template'
|
|
22
|
+
require 'google/apis/generator/model'
|
|
23
|
+
require 'google/apis/generator/helpers'
|
|
24
|
+
require 'addressable/uri'
|
|
25
|
+
|
|
26
|
+
module Google
|
|
27
|
+
module Apis
|
|
28
|
+
# @private
|
|
29
|
+
class Generator
|
|
30
|
+
# Helper for picking names for methods, properties, types, etc. Performs various normaliations
|
|
31
|
+
# as well as allows for overriding individual names from a configuration file for cases
|
|
32
|
+
# where algorithmic approaches produce poor APIs.
|
|
33
|
+
class Names
|
|
34
|
+
include Google::Apis::Core::Logging
|
|
35
|
+
include NameHelpers
|
|
36
|
+
|
|
37
|
+
def initialize(file_path = nil)
|
|
38
|
+
if file_path
|
|
39
|
+
logger.info { sprintf('Loading API names from %s', file_path) }
|
|
40
|
+
@names = YAML.load(File.read(file_path)) || {}
|
|
41
|
+
else
|
|
42
|
+
@names = {}
|
|
43
|
+
end
|
|
44
|
+
@path = []
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def with_path(path)
|
|
48
|
+
@path.push(path)
|
|
49
|
+
begin
|
|
50
|
+
yield
|
|
51
|
+
ensure
|
|
52
|
+
@path.pop
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def infer_parameter_name
|
|
57
|
+
pick_name(normalize_param_name(@path.last))
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Determine the ruby method name to generate for a given method in discovery.
|
|
61
|
+
# @param [Google::Apis::DiscoveryV1::RestMethod] method
|
|
62
|
+
# Fragment of the discovery doc describing the method
|
|
63
|
+
def infer_method_name(method)
|
|
64
|
+
pick_name(infer_method_name_for_rpc(method) || infer_method_name_from_id(method))
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def infer_property_name
|
|
68
|
+
pick_name(normalize_property_name(@path.last))
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def pick_name(alt_name)
|
|
72
|
+
preferred_name = @names[key]
|
|
73
|
+
if preferred_name && preferred_name == alt_name
|
|
74
|
+
logger.warn { sprintf("Unnecessary name override '%s': %s", key, alt_name) }
|
|
75
|
+
elsif preferred_name.nil?
|
|
76
|
+
preferred_name = @names[key] = alt_name
|
|
77
|
+
end
|
|
78
|
+
preferred_name
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def []=(key, value)
|
|
82
|
+
@names[key] = value
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def dump
|
|
86
|
+
YAML.dump(@names)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def key
|
|
90
|
+
@path.reduce('') { |a, e| a + '/' + e }
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def option(opt_name)
|
|
94
|
+
@names[sprintf('%s?%s', key, opt_name)]
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
private
|
|
98
|
+
|
|
99
|
+
# For RPC style methods, pick a name based off the request objects.
|
|
100
|
+
# @param [Google::Apis::DiscoveryV1::RestMethod] method
|
|
101
|
+
# Fragment of the discovery doc describing the method
|
|
102
|
+
def infer_method_name_for_rpc(method)
|
|
103
|
+
return nil if method.request.nil?
|
|
104
|
+
parts = method.id.split('.')
|
|
105
|
+
parts.shift
|
|
106
|
+
verb = ActiveSupport::Inflector.underscore(parts.pop)
|
|
107
|
+
match = method.request._ref.match(/(.*)(?i:request)/)
|
|
108
|
+
return nil if match.nil?
|
|
109
|
+
name = ActiveSupport::Inflector.underscore(match[1])
|
|
110
|
+
return nil unless name == verb || name.start_with?(verb + '_')
|
|
111
|
+
if !parts.empty?
|
|
112
|
+
resource_name = ActiveSupport::Inflector.singularize(parts.pop)
|
|
113
|
+
resource_name = ActiveSupport::Inflector.underscore(resource_name)
|
|
114
|
+
if !name.include?(resource_name)
|
|
115
|
+
name = name.split('_').insert(1, resource_name).join('_')
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
name
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
# For REST style methods, build a method name from the verb/resource(s) in the method
|
|
122
|
+
# id. IDs are in the form <api>.<resource>.<verb>
|
|
123
|
+
# @param [Google::Apis::DiscoveryV1::RestMethod] method
|
|
124
|
+
# Fragment of the discovery doc describing the method
|
|
125
|
+
def infer_method_name_from_id(method)
|
|
126
|
+
parts = method.id.split('.')
|
|
127
|
+
parts.shift
|
|
128
|
+
verb = ActiveSupport::Inflector.underscore(parts.pop)
|
|
129
|
+
return verb if parts.empty?
|
|
130
|
+
resource_name = ActiveSupport::Inflector.underscore(parts.pop)
|
|
131
|
+
if pluralize_method?(verb)
|
|
132
|
+
resource_name = ActiveSupport::Inflector.pluralize(resource_name)
|
|
133
|
+
else
|
|
134
|
+
resource_name = ActiveSupport::Inflector.singularize(resource_name)
|
|
135
|
+
end
|
|
136
|
+
if parts.empty?
|
|
137
|
+
resource_path = resource_name
|
|
138
|
+
else
|
|
139
|
+
resource_path = parts.map do |p|
|
|
140
|
+
p = ActiveSupport::Inflector.singularize(p)
|
|
141
|
+
ActiveSupport::Inflector.underscore(p)
|
|
142
|
+
end.join('_') + '_' + resource_name
|
|
143
|
+
end
|
|
144
|
+
method_name = verb.split('_').insert(1, resource_path.split('_')).join('_')
|
|
145
|
+
method_name
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
# Modifies an API description to support ruby code generation. Primarily does:
|
|
150
|
+
# - Ensure all names follow appopriate ruby conventions
|
|
151
|
+
# - Maps types to ruby types, classes, and resolves $refs
|
|
152
|
+
# - Attempts to simplify names where possible to make APIs more sensible
|
|
153
|
+
class Annotator
|
|
154
|
+
include NameHelpers
|
|
155
|
+
include Google::Apis::Core::Logging
|
|
156
|
+
|
|
157
|
+
# Don't expose these in the API directly.
|
|
158
|
+
PARAMETER_BLACKLIST = %w(alt access_token bearer_token oauth_token pp prettyPrint
|
|
159
|
+
$.xgafv callback upload_protocol uploadType)
|
|
160
|
+
|
|
161
|
+
# Prepare the API for the templates.
|
|
162
|
+
# @param [Google::Apis::DiscoveryV1::RestDescription] description
|
|
163
|
+
# API Description
|
|
164
|
+
def self.process(description, api_names = nil)
|
|
165
|
+
Annotator.new(description, api_names).annotate_api
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
# @param [Google::Apis::DiscoveryV1::RestDescription] description
|
|
169
|
+
# API Description
|
|
170
|
+
# @param [Google::Api::Generator::Names] api_names
|
|
171
|
+
# Name helper instanace
|
|
172
|
+
def initialize(description, api_names = nil)
|
|
173
|
+
api_names = Names.new if api_names.nil?
|
|
174
|
+
@names = api_names
|
|
175
|
+
@rest_description = description
|
|
176
|
+
@registered_types = []
|
|
177
|
+
@deferred_types = []
|
|
178
|
+
@strip_prefixes = []
|
|
179
|
+
@all_methods = {}
|
|
180
|
+
@path = []
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
def annotate_api
|
|
184
|
+
@names.with_path(@rest_description.id) do
|
|
185
|
+
@strip_prefixes << @rest_description.name
|
|
186
|
+
if @rest_description.auth
|
|
187
|
+
@rest_description.auth.oauth2.scopes.each do |key, value|
|
|
188
|
+
value.constant = constantize_scope(key)
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
@rest_description.force_alt_json = @names.option('force_alt_json')
|
|
192
|
+
@rest_description.parameters.reject! { |k, _v| PARAMETER_BLACKLIST.include?(k) }
|
|
193
|
+
annotate_parameters(@rest_description.parameters)
|
|
194
|
+
annotate_resource(@rest_description.name, @rest_description)
|
|
195
|
+
@rest_description.schemas.each do |k, v|
|
|
196
|
+
annotate_type(k, v, @rest_description)
|
|
197
|
+
end unless @rest_description.schemas.nil?
|
|
198
|
+
end
|
|
199
|
+
resolve_type_references
|
|
200
|
+
resolve_variants
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
def annotate_type(name, type, parent)
|
|
204
|
+
@names.with_path(name) do
|
|
205
|
+
type.name = name
|
|
206
|
+
type.path = @names.key
|
|
207
|
+
type.generated_name = @names.infer_property_name
|
|
208
|
+
if type.type == 'object'
|
|
209
|
+
type.generated_class_name = ActiveSupport::Inflector.camelize(type.generated_name)
|
|
210
|
+
@registered_types << type
|
|
211
|
+
end
|
|
212
|
+
type.parent = parent
|
|
213
|
+
@deferred_types << type if type._ref
|
|
214
|
+
type.properties.each do |k, v|
|
|
215
|
+
annotate_type(k, v, type)
|
|
216
|
+
end unless type.properties.nil?
|
|
217
|
+
if type.additional_properties
|
|
218
|
+
type.type = 'hash'
|
|
219
|
+
annotate_type(ActiveSupport::Inflector.singularize(type.generated_name), type.additional_properties,
|
|
220
|
+
parent)
|
|
221
|
+
end
|
|
222
|
+
annotate_type(ActiveSupport::Inflector.singularize(type.generated_name), type.items, parent) if type.items
|
|
223
|
+
end
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
def annotate_resource(name, resource, parent_resource = nil)
|
|
227
|
+
@strip_prefixes << name
|
|
228
|
+
resource.parent = parent_resource unless parent_resource.nil?
|
|
229
|
+
resource.api_methods.each do |_k, v|
|
|
230
|
+
annotate_method(v, resource)
|
|
231
|
+
end unless resource.api_methods.nil?
|
|
232
|
+
|
|
233
|
+
resource.resources.each do |k, v|
|
|
234
|
+
annotate_resource(k, v, resource)
|
|
235
|
+
end unless resource.resources.nil?
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
def annotate_method(method, parent_resource = nil)
|
|
239
|
+
@names.with_path(method.id) do
|
|
240
|
+
method.parent = parent_resource
|
|
241
|
+
method.generated_name = @names.infer_method_name(method)
|
|
242
|
+
check_duplicate_method(method)
|
|
243
|
+
annotate_parameters(method.parameters)
|
|
244
|
+
end
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
def annotate_parameters(parameters)
|
|
248
|
+
parameters.each do |key, value|
|
|
249
|
+
@names.with_path(key) do
|
|
250
|
+
value.name = key
|
|
251
|
+
value.generated_name = @names.infer_parameter_name
|
|
252
|
+
@deferred_types << value if value._ref
|
|
253
|
+
end
|
|
254
|
+
end unless parameters.nil?
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
def resolve_type_references
|
|
258
|
+
@deferred_types.each do |type|
|
|
259
|
+
if type._ref
|
|
260
|
+
ref = @rest_description.schemas[type._ref]
|
|
261
|
+
ivars = ref.instance_variables - [:@name, :@generated_name]
|
|
262
|
+
(ivars).each do |var|
|
|
263
|
+
type.instance_variable_set(var, ref.instance_variable_get(var))
|
|
264
|
+
end
|
|
265
|
+
end
|
|
266
|
+
end
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
def resolve_variants
|
|
270
|
+
@deferred_types.each do |type|
|
|
271
|
+
if type.variant
|
|
272
|
+
type.variant.map.each do |v|
|
|
273
|
+
ref = @rest_description.schemas[v._ref]
|
|
274
|
+
ref.base_ref = type
|
|
275
|
+
ref.discriminant = type.variant.discriminant
|
|
276
|
+
ref.discriminant_value = v.type_value
|
|
277
|
+
end
|
|
278
|
+
end
|
|
279
|
+
end
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
def check_duplicate_method(m)
|
|
283
|
+
if @all_methods.include?(m.generated_name)
|
|
284
|
+
logger.error do
|
|
285
|
+
sprintf('Duplicate method %s generated, path %s',
|
|
286
|
+
m.generated_name, @names.key)
|
|
287
|
+
end
|
|
288
|
+
fail 'Duplicate name generated'
|
|
289
|
+
end
|
|
290
|
+
@all_methods[m.generated_name] = m
|
|
291
|
+
end
|
|
292
|
+
end
|
|
293
|
+
end
|
|
294
|
+
end
|
|
295
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
module Google
|
|
2
|
+
module Apis
|
|
3
|
+
# @private
|
|
4
|
+
class Generator
|
|
5
|
+
# Methods for validating & normalizing symbols
|
|
6
|
+
module NameHelpers
|
|
7
|
+
KEYWORDS = %w(__ENCODING__ def in self __LINE__ defined? module super __FILE__ do next then BEGIN
|
|
8
|
+
else nil true END elsif not undef alias end or unless and ensure redo until begin
|
|
9
|
+
false rescue when break for retry while case if return yield class command)
|
|
10
|
+
PLURAL_METHODS = %w(list search)
|
|
11
|
+
|
|
12
|
+
# Check to see if the method name should be plauralized
|
|
13
|
+
# @return [Boolean]
|
|
14
|
+
def pluralize_method?(method_name)
|
|
15
|
+
PLURAL_METHODS.include?(method_name)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Check to see if the method is either a keyword or built-in method on object
|
|
19
|
+
# @return [Boolean]
|
|
20
|
+
def reserved?(name)
|
|
21
|
+
keyword?(name) || object_method?(name)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Check to see if the name is a ruby keyword
|
|
25
|
+
# @return [Boolean]
|
|
26
|
+
def keyword?(name)
|
|
27
|
+
KEYWORDS.include?(name)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Check to see if the method already exists on ruby objects
|
|
31
|
+
# @return [Boolean]
|
|
32
|
+
def object_method?(name)
|
|
33
|
+
Object.new.respond_to?(name)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Convert a parameter name to ruby conventions
|
|
37
|
+
# @param [String] name
|
|
38
|
+
# @return [String] updated param name
|
|
39
|
+
def normalize_param_name(name)
|
|
40
|
+
name = ActiveSupport::Inflector.underscore(name.gsub(/\W/, '_'))
|
|
41
|
+
if reserved?(name)
|
|
42
|
+
logger.warn { sprintf('Found reserved keyword \'%1$s\'', name) }
|
|
43
|
+
name += '_'
|
|
44
|
+
logger.warn { sprintf('Changed to \'%1$s\'', name) }
|
|
45
|
+
end
|
|
46
|
+
name
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Convert a property name to ruby conventions
|
|
50
|
+
# @param [String] name
|
|
51
|
+
# @return [String]
|
|
52
|
+
def normalize_property_name(name)
|
|
53
|
+
name = ActiveSupport::Inflector.underscore(name.gsub(/\W/, '_'))
|
|
54
|
+
if object_method?(name)
|
|
55
|
+
logger.warn { sprintf('Found reserved property \'%1$s\'', name) }
|
|
56
|
+
name += '_prop'
|
|
57
|
+
logger.warn { sprintf('Changed to \'%1$s\'', name) }
|
|
58
|
+
end
|
|
59
|
+
name
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Converts a scope string into a ruby constant
|
|
63
|
+
# @param [String] url
|
|
64
|
+
# Url to convert
|
|
65
|
+
# @return [String]
|
|
66
|
+
def constantize_scope(url)
|
|
67
|
+
scope = Addressable::URI.parse(url).path[1..-1].upcase.gsub(/\W/, '_')
|
|
68
|
+
scope = 'AUTH_SCOPE' if scope.nil? || scope.empty?
|
|
69
|
+
scope
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
@@ -0,0 +1,143 @@
|
|
|
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 'google/apis/discovery_v1'
|
|
17
|
+
|
|
18
|
+
# Extend the discovery API classes with additional data needed to make
|
|
19
|
+
# code generation produce better results
|
|
20
|
+
module Google
|
|
21
|
+
module Apis
|
|
22
|
+
module DiscoveryV1
|
|
23
|
+
TYPE_MAP = {
|
|
24
|
+
'string' => 'String',
|
|
25
|
+
'boolean' => 'Boolean',
|
|
26
|
+
'number' => 'Float',
|
|
27
|
+
'integer' => 'Fixnum',
|
|
28
|
+
'any' => 'Object'
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
class JsonSchema
|
|
32
|
+
attr_accessor :name
|
|
33
|
+
attr_accessor :generated_name
|
|
34
|
+
attr_accessor :generated_class_name
|
|
35
|
+
attr_accessor :base_ref
|
|
36
|
+
attr_accessor :parent
|
|
37
|
+
attr_accessor :discriminant
|
|
38
|
+
attr_accessor :discriminant_value
|
|
39
|
+
attr_accessor :path
|
|
40
|
+
|
|
41
|
+
def properties
|
|
42
|
+
@properties ||= {}
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def qualified_name
|
|
46
|
+
parent.qualified_name + '::' + generated_class_name
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def generated_type
|
|
50
|
+
case type
|
|
51
|
+
when 'string', 'boolean', 'number', 'integer', 'any'
|
|
52
|
+
return 'DateTime' if format == 'date-time'
|
|
53
|
+
return 'Date' if format == 'date'
|
|
54
|
+
return TYPE_MAP[type]
|
|
55
|
+
when 'array'
|
|
56
|
+
return sprintf('Array<%s>', items.generated_type)
|
|
57
|
+
when 'hash'
|
|
58
|
+
return sprintf('Hash<String,%s>', additional_properties.generated_type)
|
|
59
|
+
when 'object'
|
|
60
|
+
return qualified_name
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
class RestMethod
|
|
66
|
+
attr_accessor :generated_name
|
|
67
|
+
attr_accessor :parent
|
|
68
|
+
|
|
69
|
+
def path_parameters
|
|
70
|
+
return [] if parameter_order.nil? || parameters.nil?
|
|
71
|
+
parameter_order.map { |name| parameters[name] }.select { |param| param.location == 'path' }
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def query_parameters
|
|
75
|
+
return [] if parameters.nil?
|
|
76
|
+
parameters.values.select { |param| param.location == 'query' }
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def required_parameters
|
|
80
|
+
return [] if parameter_order.nil? || parameters.nil?
|
|
81
|
+
parameter_order.map { |name| parameters[name] }.select { |param| param.location == 'path' || param.required }
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def optional_query_parameters
|
|
85
|
+
query_parameters.select { |param| param.required != true }
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
class RestResource
|
|
91
|
+
attr_accessor :parent
|
|
92
|
+
|
|
93
|
+
def all_methods
|
|
94
|
+
m = []
|
|
95
|
+
m << api_methods.values unless api_methods.nil?
|
|
96
|
+
m << resources.map { |_k, r| r.all_methods } unless resources.nil?
|
|
97
|
+
m.flatten
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
class RestDescription
|
|
102
|
+
attr_accessor :force_alt_json
|
|
103
|
+
alias_method :force_alt_json?, :force_alt_json
|
|
104
|
+
|
|
105
|
+
def version
|
|
106
|
+
ActiveSupport::Inflector.camelize(@version.gsub(/\W/, '-')).gsub(/-/, '_')
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def name
|
|
110
|
+
ActiveSupport::Inflector.camelize(@name)
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def module_name
|
|
114
|
+
name + version
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def qualified_name
|
|
118
|
+
sprintf('Google::Apis::%s', module_name)
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def service_name
|
|
122
|
+
class_name = (canonical_name || name).gsub(/\W/, '')
|
|
123
|
+
ActiveSupport::Inflector.camelize(sprintf('%sService', class_name))
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def all_methods
|
|
127
|
+
m = []
|
|
128
|
+
m << api_methods.values unless api_methods.nil?
|
|
129
|
+
m << resources.map { |_k, r| r.all_methods } unless resources.nil?
|
|
130
|
+
m.flatten
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
class Auth
|
|
134
|
+
class Oauth2
|
|
135
|
+
class Scope
|
|
136
|
+
attr_accessor :constant
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
end
|
|
@@ -0,0 +1,124 @@
|
|
|
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 'erb'
|
|
17
|
+
require 'ostruct'
|
|
18
|
+
|
|
19
|
+
module Google
|
|
20
|
+
module Apis
|
|
21
|
+
# @private
|
|
22
|
+
class Generator
|
|
23
|
+
# Directory containing ERB templates
|
|
24
|
+
TEMPLATE_DIR = File.expand_path('../templates', __FILE__)
|
|
25
|
+
|
|
26
|
+
# Helpers used in ERB templates
|
|
27
|
+
module TemplateHelpers
|
|
28
|
+
# Get the include path for a ruby module/class
|
|
29
|
+
#
|
|
30
|
+
# @param [String] module_name
|
|
31
|
+
# Fully qualified module/class name
|
|
32
|
+
# @return [String]
|
|
33
|
+
# Path to file
|
|
34
|
+
def to_path(module_name)
|
|
35
|
+
ActiveSupport::Inflector.underscore(module_name)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Render a block comment
|
|
39
|
+
#
|
|
40
|
+
# @param [String] str
|
|
41
|
+
# Comment string
|
|
42
|
+
# @param [Fixnum] spaces_before
|
|
43
|
+
# Number of spaces to indent the comment hash
|
|
44
|
+
# @param [Fixnum] spaces_after
|
|
45
|
+
# Number of spaces to indent after the comment hash for subsequent lines
|
|
46
|
+
# @return [String] formatted comment
|
|
47
|
+
def block_comment(str, spaces_before = 0, spaces_after = 0)
|
|
48
|
+
return '' if str.nil?
|
|
49
|
+
pre = ' ' * spaces_before
|
|
50
|
+
post = ' ' * spaces_after
|
|
51
|
+
lines = str.gsub(/([{}])/, '`').scan(/.{1,78}(?:\W|$)/).map(&:strip)
|
|
52
|
+
lines.join("\n" + pre + '#' + post)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Indent a block of text
|
|
56
|
+
#
|
|
57
|
+
# @param [String] str
|
|
58
|
+
# Content to indent
|
|
59
|
+
# @param [Fixnum] spaces
|
|
60
|
+
# Number of spaces to indent
|
|
61
|
+
# @return [String] formatted content
|
|
62
|
+
def indent(str, spaces)
|
|
63
|
+
pre = ' ' * spaces
|
|
64
|
+
str = pre + str.split(/\n/).join("\n" + pre) + "\n"
|
|
65
|
+
return str unless str.strip.empty?
|
|
66
|
+
nil
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# Include a partial inside a template.
|
|
70
|
+
#
|
|
71
|
+
# @private
|
|
72
|
+
# @param [String] partial
|
|
73
|
+
# Name of the template
|
|
74
|
+
# @param [Hash] context
|
|
75
|
+
# Context used to render
|
|
76
|
+
# @return [String] rendered content
|
|
77
|
+
def include(partial, context)
|
|
78
|
+
template = Template.new(sprintf('_%s.tmpl', partial))
|
|
79
|
+
template.render(context)
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# Holds local vars/helpers for template rendering
|
|
84
|
+
class Context < OpenStruct
|
|
85
|
+
include TemplateHelpers
|
|
86
|
+
|
|
87
|
+
# Get the context for ERB evaluation
|
|
88
|
+
# @return [Binding]
|
|
89
|
+
def to_binding
|
|
90
|
+
binding
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# ERB template for the code generator
|
|
95
|
+
class Template
|
|
96
|
+
# Loads a template from the template dir. Automatically
|
|
97
|
+
# appends the .tmpl suffix
|
|
98
|
+
#
|
|
99
|
+
# @param [String] template_name
|
|
100
|
+
# Name of the template file
|
|
101
|
+
def self.load(template_name)
|
|
102
|
+
Template.new(sprintf('%s.tmpl', template_name))
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# @param [String] template_name
|
|
106
|
+
# Name of the template file
|
|
107
|
+
def initialize(template_name)
|
|
108
|
+
file = File.join(TEMPLATE_DIR, template_name)
|
|
109
|
+
@erb = ERB.new(File.read(file), nil, '-')
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
# Render the template
|
|
113
|
+
#
|
|
114
|
+
# @param [Hash] context
|
|
115
|
+
# Variables to set when rendering the template
|
|
116
|
+
# @return [String] rendered template
|
|
117
|
+
def render(context)
|
|
118
|
+
ctx = Context.new(context)
|
|
119
|
+
@erb.result(ctx.to_binding)
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
<% if cls.type == 'object' -%>
|
|
2
|
+
|
|
3
|
+
# <%= block_comment(cls.description, 0, 1) %>
|
|
4
|
+
class <%= cls.generated_class_name %><% if cls.base_ref %> < <%= cls.base_ref.generated_type %><% end %>
|
|
5
|
+
include Google::Apis::Core::Hashable
|
|
6
|
+
<% for property in cls.properties.values -%>
|
|
7
|
+
|
|
8
|
+
# <%= block_comment(property.description, 2, 1) %>
|
|
9
|
+
# Corresponds to the JSON property `<%= property.name %>`
|
|
10
|
+
# @return [<%= property.generated_type %>]
|
|
11
|
+
attr_accessor :<%= property.generated_name %>
|
|
12
|
+
<% if property.type == 'boolean' -%>
|
|
13
|
+
alias_method :<%= property.generated_name %>?, :<%= property.generated_name %>
|
|
14
|
+
<% end -%>
|
|
15
|
+
<% end -%>
|
|
16
|
+
|
|
17
|
+
def initialize(**args)
|
|
18
|
+
<% if cls.discriminant -%>
|
|
19
|
+
@<%= cls.properties[cls.discriminant].generated_name %> = '<%= cls.discriminant_value %>'
|
|
20
|
+
<% end -%>
|
|
21
|
+
update!(**args)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Update properties of this object
|
|
25
|
+
def update!(**args)
|
|
26
|
+
<% for property in cls.properties.values -%>
|
|
27
|
+
@<%= property.generated_name %> = args[:<%= property.generated_name %>] unless args[:<%= property.generated_name %>].nil?
|
|
28
|
+
<% end -%>
|
|
29
|
+
end
|
|
30
|
+
<% for child_class in cls.properties.values -%>
|
|
31
|
+
<% if child_class._ref.nil? -%>
|
|
32
|
+
<%= indent(include('class', :cls => child_class, :api => api), 2) -%>
|
|
33
|
+
<% end -%>
|
|
34
|
+
<% end -%>
|
|
35
|
+
end
|
|
36
|
+
<% elsif cls.items && cls.items._ref.nil? -%>
|
|
37
|
+
<%= include('class', :cls => cls.items, :api => api) -%>
|
|
38
|
+
<% elsif cls.additional_properties && cls.additional_properties._ref.nil? -%>
|
|
39
|
+
<%= include('class', :cls => cls.additional_properties, :api => api) -%>
|
|
40
|
+
<% end -%>
|