aws-sdk-euca 1.8.5
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.
- data/.yardopts +5 -0
- data/LICENSE.txt +12 -0
- data/README.rdoc +189 -0
- data/ca-bundle.crt +3895 -0
- data/lib/aws-sdk-euca.rb +79 -0
- data/lib/aws-sdk.rb +79 -0
- data/lib/aws.rb +14 -0
- data/lib/aws/api_config/AutoScaling-2011-01-01.yml +825 -0
- data/lib/aws/api_config/CloudFormation-2010-05-15.yml +322 -0
- data/lib/aws/api_config/CloudFront-2012-05-05.yml +2102 -0
- data/lib/aws/api_config/CloudSearch-2011-02-01.yml +681 -0
- data/lib/aws/api_config/CloudWatch-2010-08-01.yml +433 -0
- data/lib/aws/api_config/DataPipeline-2012-10-29.yml +422 -0
- data/lib/aws/api_config/DynamoDB-2011-12-05.yml +1160 -0
- data/lib/aws/api_config/EC2-2013-02-01.yml +4368 -0
- data/lib/aws/api_config/ELB-2012-06-01.yml +597 -0
- data/lib/aws/api_config/EMR-2009-03-31.yml +370 -0
- data/lib/aws/api_config/ElastiCache-2012-03-09.yml +777 -0
- data/lib/aws/api_config/ElastiCache-2012-11-15.yml +979 -0
- data/lib/aws/api_config/ElasticBeanstalk-2010-12-01.yml +823 -0
- data/lib/aws/api_config/ElasticTranscoder-2012-09-25.yml +1036 -0
- data/lib/aws/api_config/Glacier-2012-06-01.yml +618 -0
- data/lib/aws/api_config/IAM-2010-05-08.yml +1222 -0
- data/lib/aws/api_config/ImportExport-2010-06-01.yml +109 -0
- data/lib/aws/api_config/OpsWorks-2013-02-18.yml +1463 -0
- data/lib/aws/api_config/RDS-2012-09-17.yml +1861 -0
- data/lib/aws/api_config/RDS-2013-02-12.yml +2377 -0
- data/lib/aws/api_config/Redshift-2012-12-01.yml +1149 -0
- data/lib/aws/api_config/Route53-2012-02-29.yml +380 -0
- data/lib/aws/api_config/Route53-2012-12-12.yml +547 -0
- data/lib/aws/api_config/SNS-2010-03-31.yml +249 -0
- data/lib/aws/api_config/SQS-2012-11-05.yml +317 -0
- data/lib/aws/api_config/STS-2011-06-15.yml +81 -0
- data/lib/aws/api_config/SimpleDB-2009-04-15.yml +306 -0
- data/lib/aws/api_config/SimpleEmailService-2010-12-01.yml +346 -0
- data/lib/aws/api_config/SimpleWorkflow-2012-01-25.yml +2358 -0
- data/lib/aws/api_config/StorageGateway-2012-06-30.yml +748 -0
- data/lib/aws/auto_scaling.rb +164 -0
- data/lib/aws/auto_scaling/activity.rb +102 -0
- data/lib/aws/auto_scaling/activity_collection.rb +82 -0
- data/lib/aws/auto_scaling/client.rb +521 -0
- data/lib/aws/auto_scaling/config.rb +18 -0
- data/lib/aws/auto_scaling/errors.rb +22 -0
- data/lib/aws/auto_scaling/group.rb +420 -0
- data/lib/aws/auto_scaling/group_collection.rb +96 -0
- data/lib/aws/auto_scaling/group_options.rb +146 -0
- data/lib/aws/auto_scaling/instance.rb +192 -0
- data/lib/aws/auto_scaling/instance_collection.rb +63 -0
- data/lib/aws/auto_scaling/launch_configuration.rb +158 -0
- data/lib/aws/auto_scaling/launch_configuration_collection.rb +154 -0
- data/lib/aws/auto_scaling/notification_configuration.rb +89 -0
- data/lib/aws/auto_scaling/notification_configuration_collection.rb +184 -0
- data/lib/aws/auto_scaling/request.rb +29 -0
- data/lib/aws/auto_scaling/scaling_policy.rb +142 -0
- data/lib/aws/auto_scaling/scaling_policy_collection.rb +72 -0
- data/lib/aws/auto_scaling/scaling_policy_options.rb +64 -0
- data/lib/aws/auto_scaling/scheduled_action.rb +145 -0
- data/lib/aws/auto_scaling/scheduled_action_collection.rb +195 -0
- data/lib/aws/auto_scaling/tag.rb +59 -0
- data/lib/aws/auto_scaling/tag_collection.rb +112 -0
- data/lib/aws/cloud_formation.rb +272 -0
- data/lib/aws/cloud_formation/client.rb +369 -0
- data/lib/aws/cloud_formation/config.rb +18 -0
- data/lib/aws/cloud_formation/errors.rb +22 -0
- data/lib/aws/cloud_formation/request.rb +29 -0
- data/lib/aws/cloud_formation/stack.rb +255 -0
- data/lib/aws/cloud_formation/stack_collection.rb +209 -0
- data/lib/aws/cloud_formation/stack_event.rb +75 -0
- data/lib/aws/cloud_formation/stack_event_collection.rb +47 -0
- data/lib/aws/cloud_formation/stack_options.rb +72 -0
- data/lib/aws/cloud_formation/stack_output.rb +53 -0
- data/lib/aws/cloud_formation/stack_resource.rb +117 -0
- data/lib/aws/cloud_formation/stack_resource_collection.rb +84 -0
- data/lib/aws/cloud_formation/stack_resource_summary_collection.rb +64 -0
- data/lib/aws/cloud_formation/stack_summary_collection.rb +123 -0
- data/lib/aws/cloud_front.rb +73 -0
- data/lib/aws/cloud_front/client.rb +1307 -0
- data/lib/aws/cloud_front/config.rb +18 -0
- data/lib/aws/cloud_front/errors.rb +22 -0
- data/lib/aws/cloud_front/request.rb +44 -0
- data/lib/aws/cloud_search.rb +74 -0
- data/lib/aws/cloud_search/client.rb +558 -0
- data/lib/aws/cloud_search/config.rb +18 -0
- data/lib/aws/cloud_search/errors.rb +22 -0
- data/lib/aws/cloud_search/request.rb +23 -0
- data/lib/aws/cloud_watch.rb +119 -0
- data/lib/aws/cloud_watch/alarm.rb +272 -0
- data/lib/aws/cloud_watch/alarm_collection.rb +153 -0
- data/lib/aws/cloud_watch/alarm_history_item.rb +50 -0
- data/lib/aws/cloud_watch/alarm_history_item_collection.rb +84 -0
- data/lib/aws/cloud_watch/client.rb +247 -0
- data/lib/aws/cloud_watch/config.rb +18 -0
- data/lib/aws/cloud_watch/errors.rb +22 -0
- data/lib/aws/cloud_watch/metric.rb +135 -0
- data/lib/aws/cloud_watch/metric_alarm_collection.rb +160 -0
- data/lib/aws/cloud_watch/metric_collection.rb +131 -0
- data/lib/aws/cloud_watch/metric_statistics.rb +69 -0
- data/lib/aws/cloud_watch/request.rb +23 -0
- data/lib/aws/core.rb +587 -0
- data/lib/aws/core/async_handle.rb +90 -0
- data/lib/aws/core/autoloader.rb +64 -0
- data/lib/aws/core/cacheable.rb +78 -0
- data/lib/aws/core/client.rb +691 -0
- data/lib/aws/core/collection.rb +267 -0
- data/lib/aws/core/collection/simple.rb +82 -0
- data/lib/aws/core/collection/with_limit_and_next_token.rb +71 -0
- data/lib/aws/core/collection/with_next_token.rb +97 -0
- data/lib/aws/core/configuration.rb +546 -0
- data/lib/aws/core/credential_providers.rb +461 -0
- data/lib/aws/core/data.rb +247 -0
- data/lib/aws/core/http/curb_handler.rb +155 -0
- data/lib/aws/core/http/handler.rb +89 -0
- data/lib/aws/core/http/net_http_handler.rb +128 -0
- data/lib/aws/core/http/request.rb +263 -0
- data/lib/aws/core/http/response.rb +81 -0
- data/lib/aws/core/indifferent_hash.rb +88 -0
- data/lib/aws/core/inflection.rb +56 -0
- data/lib/aws/core/json_client.rb +47 -0
- data/lib/aws/core/json_parser.rb +76 -0
- data/lib/aws/core/json_request_builder.rb +35 -0
- data/lib/aws/core/json_response_parser.rb +79 -0
- data/lib/aws/core/lazy_error_classes.rb +90 -0
- data/lib/aws/core/log_formatter.rb +462 -0
- data/lib/aws/core/managed_file.rb +32 -0
- data/lib/aws/core/meta_utils.rb +45 -0
- data/lib/aws/core/model.rb +57 -0
- data/lib/aws/core/naming.rb +30 -0
- data/lib/aws/core/option_grammar.rb +735 -0
- data/lib/aws/core/options/json_serializer.rb +82 -0
- data/lib/aws/core/options/validator.rb +155 -0
- data/lib/aws/core/options/xml_serializer.rb +118 -0
- data/lib/aws/core/page_result.rb +75 -0
- data/lib/aws/core/policy.rb +916 -0
- data/lib/aws/core/query_client.rb +41 -0
- data/lib/aws/core/query_error_parser.rb +24 -0
- data/lib/aws/core/query_request_builder.rb +47 -0
- data/lib/aws/core/query_response_parser.rb +35 -0
- data/lib/aws/core/resource.rb +413 -0
- data/lib/aws/core/resource_cache.rb +40 -0
- data/lib/aws/core/response.rb +208 -0
- data/lib/aws/core/response_cache.rb +50 -0
- data/lib/aws/core/rest_error_parser.rb +24 -0
- data/lib/aws/core/rest_json_client.rb +40 -0
- data/lib/aws/core/rest_request_builder.rb +146 -0
- data/lib/aws/core/rest_response_parser.rb +66 -0
- data/lib/aws/core/rest_xml_client.rb +47 -0
- data/lib/aws/core/service_interface.rb +61 -0
- data/lib/aws/core/signature/version_2.rb +56 -0
- data/lib/aws/core/signature/version_3.rb +77 -0
- data/lib/aws/core/signature/version_3_https.rb +54 -0
- data/lib/aws/core/signature/version_4.rb +135 -0
- data/lib/aws/core/signer.rb +46 -0
- data/lib/aws/core/uri_escape.rb +44 -0
- data/lib/aws/core/xml/frame.rb +244 -0
- data/lib/aws/core/xml/frame_stack.rb +85 -0
- data/lib/aws/core/xml/grammar.rb +307 -0
- data/lib/aws/core/xml/parser.rb +70 -0
- data/lib/aws/core/xml/root_frame.rb +65 -0
- data/lib/aws/core/xml/sax_handlers/libxml.rb +47 -0
- data/lib/aws/core/xml/sax_handlers/nokogiri.rb +55 -0
- data/lib/aws/core/xml/sax_handlers/ox.rb +41 -0
- data/lib/aws/core/xml/sax_handlers/rexml.rb +43 -0
- data/lib/aws/core/xml/stub.rb +123 -0
- data/lib/aws/data_pipeline.rb +73 -0
- data/lib/aws/data_pipeline/client.rb +339 -0
- data/lib/aws/data_pipeline/config.rb +18 -0
- data/lib/aws/data_pipeline/errors.rb +20 -0
- data/lib/aws/data_pipeline/request.rb +26 -0
- data/lib/aws/dynamo_db.rb +206 -0
- data/lib/aws/dynamo_db/attribute_collection.rb +461 -0
- data/lib/aws/dynamo_db/batch_get.rb +213 -0
- data/lib/aws/dynamo_db/batch_write.rb +252 -0
- data/lib/aws/dynamo_db/binary.rb +35 -0
- data/lib/aws/dynamo_db/client.rb +904 -0
- data/lib/aws/dynamo_db/config.rb +24 -0
- data/lib/aws/dynamo_db/errors.rb +20 -0
- data/lib/aws/dynamo_db/expectations.rb +40 -0
- data/lib/aws/dynamo_db/item.rb +133 -0
- data/lib/aws/dynamo_db/item_collection.rb +852 -0
- data/lib/aws/dynamo_db/item_data.rb +31 -0
- data/lib/aws/dynamo_db/keys.rb +41 -0
- data/lib/aws/dynamo_db/primary_key_element.rb +48 -0
- data/lib/aws/dynamo_db/request.rb +26 -0
- data/lib/aws/dynamo_db/resource.rb +33 -0
- data/lib/aws/dynamo_db/table.rb +491 -0
- data/lib/aws/dynamo_db/table_collection.rb +165 -0
- data/lib/aws/dynamo_db/types.rb +111 -0
- data/lib/aws/ec2.rb +440 -0
- data/lib/aws/ec2/attachment.rb +140 -0
- data/lib/aws/ec2/attachment_collection.rb +54 -0
- data/lib/aws/ec2/availability_zone.rb +86 -0
- data/lib/aws/ec2/availability_zone_collection.rb +43 -0
- data/lib/aws/ec2/block_device_mappings.rb +53 -0
- data/lib/aws/ec2/client.rb +3621 -0
- data/lib/aws/ec2/collection.rb +36 -0
- data/lib/aws/ec2/config.rb +18 -0
- data/lib/aws/ec2/config_transform.rb +63 -0
- data/lib/aws/ec2/customer_gateway.rb +90 -0
- data/lib/aws/ec2/customer_gateway_collection.rb +73 -0
- data/lib/aws/ec2/dhcp_options.rb +106 -0
- data/lib/aws/ec2/dhcp_options_collection.rb +87 -0
- data/lib/aws/ec2/elastic_ip.rb +208 -0
- data/lib/aws/ec2/elastic_ip_collection.rb +97 -0
- data/lib/aws/ec2/errors.rb +32 -0
- data/lib/aws/ec2/export_task.rb +120 -0
- data/lib/aws/ec2/export_task_collection.rb +67 -0
- data/lib/aws/ec2/filtered_collection.rb +89 -0
- data/lib/aws/ec2/has_permissions.rb +44 -0
- data/lib/aws/ec2/image.rb +264 -0
- data/lib/aws/ec2/image_collection.rb +228 -0
- data/lib/aws/ec2/instance.rb +796 -0
- data/lib/aws/ec2/instance_collection.rb +372 -0
- data/lib/aws/ec2/internet_gateway.rb +122 -0
- data/lib/aws/ec2/internet_gateway/attachment.rb +78 -0
- data/lib/aws/ec2/internet_gateway_collection.rb +54 -0
- data/lib/aws/ec2/key_pair.rb +82 -0
- data/lib/aws/ec2/key_pair_collection.rb +99 -0
- data/lib/aws/ec2/network_acl.rb +256 -0
- data/lib/aws/ec2/network_acl/association.rb +56 -0
- data/lib/aws/ec2/network_acl/entry.rb +147 -0
- data/lib/aws/ec2/network_acl_collection.rb +64 -0
- data/lib/aws/ec2/network_interface.rb +228 -0
- data/lib/aws/ec2/network_interface/attachment.rb +100 -0
- data/lib/aws/ec2/network_interface_collection.rb +103 -0
- data/lib/aws/ec2/permission_collection.rb +174 -0
- data/lib/aws/ec2/region.rb +106 -0
- data/lib/aws/ec2/region_collection.rb +51 -0
- data/lib/aws/ec2/request.rb +21 -0
- data/lib/aws/ec2/reserved_instances.rb +56 -0
- data/lib/aws/ec2/reserved_instances_collection.rb +40 -0
- data/lib/aws/ec2/reserved_instances_offering.rb +60 -0
- data/lib/aws/ec2/reserved_instances_offering_collection.rb +39 -0
- data/lib/aws/ec2/resource.rb +161 -0
- data/lib/aws/ec2/resource_tag_collection.rb +211 -0
- data/lib/aws/ec2/route_table.rb +205 -0
- data/lib/aws/ec2/route_table/association.rb +119 -0
- data/lib/aws/ec2/route_table/route.rb +119 -0
- data/lib/aws/ec2/route_table_collection.rb +72 -0
- data/lib/aws/ec2/security_group.rb +484 -0
- data/lib/aws/ec2/security_group/ip_permission.rb +135 -0
- data/lib/aws/ec2/security_group/ip_permission_collection.rb +82 -0
- data/lib/aws/ec2/security_group_collection.rb +135 -0
- data/lib/aws/ec2/snapshot.rb +143 -0
- data/lib/aws/ec2/snapshot_collection.rb +132 -0
- data/lib/aws/ec2/subnet.rb +161 -0
- data/lib/aws/ec2/subnet_collection.rb +115 -0
- data/lib/aws/ec2/tag.rb +81 -0
- data/lib/aws/ec2/tag_collection.rb +107 -0
- data/lib/aws/ec2/tagged_collection.rb +53 -0
- data/lib/aws/ec2/tagged_item.rb +85 -0
- data/lib/aws/ec2/volume.rb +174 -0
- data/lib/aws/ec2/volume_collection.rb +101 -0
- data/lib/aws/ec2/vpc.rb +166 -0
- data/lib/aws/ec2/vpc_collection.rb +70 -0
- data/lib/aws/ec2/vpn_connection.rb +99 -0
- data/lib/aws/ec2/vpn_connection/telemetry.rb +49 -0
- data/lib/aws/ec2/vpn_connection_collection.rb +96 -0
- data/lib/aws/ec2/vpn_gateway.rb +123 -0
- data/lib/aws/ec2/vpn_gateway/attachment.rb +45 -0
- data/lib/aws/ec2/vpn_gateway_collection.rb +77 -0
- data/lib/aws/elastic_beanstalk.rb +50 -0
- data/lib/aws/elastic_beanstalk/client.rb +867 -0
- data/lib/aws/elastic_beanstalk/config.rb +18 -0
- data/lib/aws/elastic_beanstalk/errors.rb +22 -0
- data/lib/aws/elastic_beanstalk/request.rb +29 -0
- data/lib/aws/elastic_transcoder.rb +30 -0
- data/lib/aws/elastic_transcoder/client.rb +672 -0
- data/lib/aws/elastic_transcoder/config.rb +18 -0
- data/lib/aws/elastic_transcoder/errors.rb +23 -0
- data/lib/aws/elastic_transcoder/request.rb +30 -0
- data/lib/aws/elasticache.rb +50 -0
- data/lib/aws/elasticache/client.rb +920 -0
- data/lib/aws/elasticache/config.rb +18 -0
- data/lib/aws/elasticache/errors.rb +22 -0
- data/lib/aws/elasticache/request.rb +23 -0
- data/lib/aws/elb.rb +67 -0
- data/lib/aws/elb/availability_zone_collection.rb +138 -0
- data/lib/aws/elb/backend_server_policy_collection.rb +139 -0
- data/lib/aws/elb/client.rb +500 -0
- data/lib/aws/elb/config.rb +18 -0
- data/lib/aws/elb/errors.rb +26 -0
- data/lib/aws/elb/instance_collection.rb +173 -0
- data/lib/aws/elb/listener.rb +190 -0
- data/lib/aws/elb/listener_collection.rb +113 -0
- data/lib/aws/elb/listener_opts.rb +45 -0
- data/lib/aws/elb/load_balancer.rb +281 -0
- data/lib/aws/elb/load_balancer_collection.rb +134 -0
- data/lib/aws/elb/load_balancer_policy.rb +93 -0
- data/lib/aws/elb/load_balancer_policy_collection.rb +208 -0
- data/lib/aws/elb/request.rb +29 -0
- data/lib/aws/emr.rb +86 -0
- data/lib/aws/emr/client.rb +330 -0
- data/lib/aws/emr/config.rb +18 -0
- data/lib/aws/emr/errors.rb +22 -0
- data/lib/aws/emr/instance_group.rb +138 -0
- data/lib/aws/emr/instance_group_collection.rb +82 -0
- data/lib/aws/emr/job_flow.rb +306 -0
- data/lib/aws/emr/job_flow_collection.rb +185 -0
- data/lib/aws/emr/request.rb +23 -0
- data/lib/aws/errors.rb +162 -0
- data/lib/aws/glacier.rb +80 -0
- data/lib/aws/glacier/archive.rb +56 -0
- data/lib/aws/glacier/archive_collection.rb +146 -0
- data/lib/aws/glacier/client.rb +286 -0
- data/lib/aws/glacier/config.rb +19 -0
- data/lib/aws/glacier/errors.rb +22 -0
- data/lib/aws/glacier/request.rb +34 -0
- data/lib/aws/glacier/resource.rb +30 -0
- data/lib/aws/glacier/vault.rb +145 -0
- data/lib/aws/glacier/vault_collection.rb +75 -0
- data/lib/aws/glacier/vault_notification_configuration.rb +29 -0
- data/lib/aws/iam.rb +420 -0
- data/lib/aws/iam/access_key.rb +180 -0
- data/lib/aws/iam/access_key_collection.rb +128 -0
- data/lib/aws/iam/account_alias_collection.rb +79 -0
- data/lib/aws/iam/client.rb +1092 -0
- data/lib/aws/iam/collection.rb +83 -0
- data/lib/aws/iam/config.rb +18 -0
- data/lib/aws/iam/errors.rb +22 -0
- data/lib/aws/iam/group.rb +111 -0
- data/lib/aws/iam/group_collection.rb +132 -0
- data/lib/aws/iam/group_policy_collection.rb +47 -0
- data/lib/aws/iam/group_user_collection.rb +84 -0
- data/lib/aws/iam/login_profile.rb +99 -0
- data/lib/aws/iam/mfa_device.rb +52 -0
- data/lib/aws/iam/mfa_device_collection.rb +127 -0
- data/lib/aws/iam/policy.rb +46 -0
- data/lib/aws/iam/policy_collection.rb +188 -0
- data/lib/aws/iam/request.rb +29 -0
- data/lib/aws/iam/resource.rb +62 -0
- data/lib/aws/iam/server_certificate.rb +141 -0
- data/lib/aws/iam/server_certificate_collection.rb +138 -0
- data/lib/aws/iam/signing_certificate.rb +169 -0
- data/lib/aws/iam/signing_certificate_collection.rb +131 -0
- data/lib/aws/iam/user.rb +205 -0
- data/lib/aws/iam/user_collection.rb +133 -0
- data/lib/aws/iam/user_group_collection.rb +98 -0
- data/lib/aws/iam/user_policy.rb +90 -0
- data/lib/aws/iam/user_policy_collection.rb +45 -0
- data/lib/aws/iam/virtual_mfa_device.rb +139 -0
- data/lib/aws/iam/virtual_mfa_device_collection.rb +73 -0
- data/lib/aws/import_export.rb +73 -0
- data/lib/aws/import_export/client.rb +109 -0
- data/lib/aws/import_export/config.rb +19 -0
- data/lib/aws/import_export/errors.rb +22 -0
- data/lib/aws/import_export/request.rb +23 -0
- data/lib/aws/ops_works.rb +30 -0
- data/lib/aws/ops_works/client.rb +713 -0
- data/lib/aws/ops_works/config.rb +18 -0
- data/lib/aws/ops_works/errors.rb +20 -0
- data/lib/aws/ops_works/request.rb +27 -0
- data/lib/aws/rails.rb +195 -0
- data/lib/aws/rds.rb +71 -0
- data/lib/aws/rds/client.rb +2228 -0
- data/lib/aws/rds/config.rb +18 -0
- data/lib/aws/rds/db_instance.rb +205 -0
- data/lib/aws/rds/db_instance_collection.rb +75 -0
- data/lib/aws/rds/db_snapshot.rb +163 -0
- data/lib/aws/rds/db_snapshot_collection.rb +89 -0
- data/lib/aws/rds/errors.rb +22 -0
- data/lib/aws/rds/request.rb +23 -0
- data/lib/aws/record.rb +116 -0
- data/lib/aws/record/abstract_base.rb +701 -0
- data/lib/aws/record/attributes.rb +384 -0
- data/lib/aws/record/conversion.rb +38 -0
- data/lib/aws/record/dirty_tracking.rb +285 -0
- data/lib/aws/record/errors.rb +143 -0
- data/lib/aws/record/exceptions.rb +48 -0
- data/lib/aws/record/hash_model.rb +161 -0
- data/lib/aws/record/hash_model/attributes.rb +197 -0
- data/lib/aws/record/hash_model/finder_methods.rb +172 -0
- data/lib/aws/record/hash_model/scope.rb +108 -0
- data/lib/aws/record/model.rb +427 -0
- data/lib/aws/record/model/attributes.rb +379 -0
- data/lib/aws/record/model/finder_methods.rb +232 -0
- data/lib/aws/record/model/scope.rb +213 -0
- data/lib/aws/record/naming.rb +31 -0
- data/lib/aws/record/scope.rb +199 -0
- data/lib/aws/record/validations.rb +712 -0
- data/lib/aws/record/validator.rb +246 -0
- data/lib/aws/record/validators/acceptance.rb +51 -0
- data/lib/aws/record/validators/block.rb +38 -0
- data/lib/aws/record/validators/confirmation.rb +43 -0
- data/lib/aws/record/validators/count.rb +108 -0
- data/lib/aws/record/validators/exclusion.rb +43 -0
- data/lib/aws/record/validators/format.rb +57 -0
- data/lib/aws/record/validators/inclusion.rb +56 -0
- data/lib/aws/record/validators/length.rb +107 -0
- data/lib/aws/record/validators/method.rb +33 -0
- data/lib/aws/record/validators/numericality.rb +138 -0
- data/lib/aws/record/validators/presence.rb +45 -0
- data/lib/aws/redshift.rb +52 -0
- data/lib/aws/redshift/client.rb +1291 -0
- data/lib/aws/redshift/config.rb +18 -0
- data/lib/aws/redshift/errors.rb +22 -0
- data/lib/aws/redshift/request.rb +29 -0
- data/lib/aws/route_53.rb +87 -0
- data/lib/aws/route_53/change_batch.rb +159 -0
- data/lib/aws/route_53/change_info.rb +72 -0
- data/lib/aws/route_53/client.rb +387 -0
- data/lib/aws/route_53/config.rb +18 -0
- data/lib/aws/route_53/errors.rb +22 -0
- data/lib/aws/route_53/hosted_zone.rb +111 -0
- data/lib/aws/route_53/hosted_zone_collection.rb +100 -0
- data/lib/aws/route_53/request.rb +23 -0
- data/lib/aws/route_53/resource_record_set.rb +237 -0
- data/lib/aws/route_53/resource_record_set_collection.rb +110 -0
- data/lib/aws/s3.rb +155 -0
- data/lib/aws/s3/access_control_list.rb +257 -0
- data/lib/aws/s3/acl_object.rb +264 -0
- data/lib/aws/s3/acl_options.rb +204 -0
- data/lib/aws/s3/bucket.rb +742 -0
- data/lib/aws/s3/bucket_collection.rb +160 -0
- data/lib/aws/s3/bucket_lifecycle_configuration.rb +458 -0
- data/lib/aws/s3/bucket_tag_collection.rb +109 -0
- data/lib/aws/s3/bucket_version_collection.rb +77 -0
- data/lib/aws/s3/cipher_io.rb +119 -0
- data/lib/aws/s3/client.rb +1700 -0
- data/lib/aws/s3/client/xml.rb +231 -0
- data/lib/aws/s3/config.rb +36 -0
- data/lib/aws/s3/cors_rule.rb +106 -0
- data/lib/aws/s3/cors_rule_collection.rb +192 -0
- data/lib/aws/s3/data_options.rb +185 -0
- data/lib/aws/s3/encryption_utils.rb +139 -0
- data/lib/aws/s3/errors.rb +94 -0
- data/lib/aws/s3/multipart_upload.rb +320 -0
- data/lib/aws/s3/multipart_upload_collection.rb +68 -0
- data/lib/aws/s3/object_collection.rb +355 -0
- data/lib/aws/s3/object_metadata.rb +96 -0
- data/lib/aws/s3/object_upload_collection.rb +77 -0
- data/lib/aws/s3/object_version.rb +148 -0
- data/lib/aws/s3/object_version_collection.rb +89 -0
- data/lib/aws/s3/paginated_collection.rb +75 -0
- data/lib/aws/s3/policy.rb +74 -0
- data/lib/aws/s3/prefix_and_delimiter_collection.rb +47 -0
- data/lib/aws/s3/prefixed_collection.rb +81 -0
- data/lib/aws/s3/presigned_post.rb +555 -0
- data/lib/aws/s3/request.rb +201 -0
- data/lib/aws/s3/s3_object.rb +1690 -0
- data/lib/aws/s3/tree.rb +118 -0
- data/lib/aws/s3/tree/branch_node.rb +68 -0
- data/lib/aws/s3/tree/child_collection.rb +104 -0
- data/lib/aws/s3/tree/leaf_node.rb +94 -0
- data/lib/aws/s3/tree/node.rb +22 -0
- data/lib/aws/s3/tree/parent.rb +87 -0
- data/lib/aws/s3/uploaded_part.rb +80 -0
- data/lib/aws/s3/uploaded_part_collection.rb +84 -0
- data/lib/aws/s3/website_configuration.rb +102 -0
- data/lib/aws/simple_db.rb +219 -0
- data/lib/aws/simple_db/attribute.rb +154 -0
- data/lib/aws/simple_db/attribute_collection.rb +231 -0
- data/lib/aws/simple_db/client.rb +287 -0
- data/lib/aws/simple_db/config.rb +20 -0
- data/lib/aws/simple_db/consistent_read_option.rb +42 -0
- data/lib/aws/simple_db/delete_attributes.rb +62 -0
- data/lib/aws/simple_db/domain.rb +121 -0
- data/lib/aws/simple_db/domain_collection.rb +86 -0
- data/lib/aws/simple_db/domain_metadata.rb +110 -0
- data/lib/aws/simple_db/errors.rb +55 -0
- data/lib/aws/simple_db/expect_condition_option.rb +45 -0
- data/lib/aws/simple_db/item.rb +93 -0
- data/lib/aws/simple_db/item_collection.rb +649 -0
- data/lib/aws/simple_db/item_data.rb +73 -0
- data/lib/aws/simple_db/put_attributes.rb +60 -0
- data/lib/aws/simple_db/request.rb +23 -0
- data/lib/aws/simple_email_service.rb +428 -0
- data/lib/aws/simple_email_service/client.rb +276 -0
- data/lib/aws/simple_email_service/config.rb +19 -0
- data/lib/aws/simple_email_service/email_address_collection.rb +69 -0
- data/lib/aws/simple_email_service/errors.rb +22 -0
- data/lib/aws/simple_email_service/identity.rb +209 -0
- data/lib/aws/simple_email_service/identity_collection.rb +81 -0
- data/lib/aws/simple_email_service/quotas.rb +64 -0
- data/lib/aws/simple_email_service/request.rb +27 -0
- data/lib/aws/simple_workflow.rb +228 -0
- data/lib/aws/simple_workflow/activity_task.rb +173 -0
- data/lib/aws/simple_workflow/activity_task_collection.rb +123 -0
- data/lib/aws/simple_workflow/activity_type.rb +131 -0
- data/lib/aws/simple_workflow/activity_type_collection.rb +93 -0
- data/lib/aws/simple_workflow/client.rb +1204 -0
- data/lib/aws/simple_workflow/config.rb +18 -0
- data/lib/aws/simple_workflow/count.rb +49 -0
- data/lib/aws/simple_workflow/decision_task.rb +603 -0
- data/lib/aws/simple_workflow/decision_task_collection.rb +225 -0
- data/lib/aws/simple_workflow/domain.rb +122 -0
- data/lib/aws/simple_workflow/domain_collection.rb +169 -0
- data/lib/aws/simple_workflow/errors.rb +20 -0
- data/lib/aws/simple_workflow/history_event.rb +276 -0
- data/lib/aws/simple_workflow/history_event_collection.rb +76 -0
- data/lib/aws/simple_workflow/option_formatters.rb +82 -0
- data/lib/aws/simple_workflow/request.rb +33 -0
- data/lib/aws/simple_workflow/resource.rb +94 -0
- data/lib/aws/simple_workflow/type.rb +89 -0
- data/lib/aws/simple_workflow/type_collection.rb +140 -0
- data/lib/aws/simple_workflow/workflow_execution.rb +386 -0
- data/lib/aws/simple_workflow/workflow_execution_collection.rb +617 -0
- data/lib/aws/simple_workflow/workflow_type.rb +177 -0
- data/lib/aws/simple_workflow/workflow_type_collection.rb +91 -0
- data/lib/aws/sns.rb +76 -0
- data/lib/aws/sns/client.rb +266 -0
- data/lib/aws/sns/config.rb +18 -0
- data/lib/aws/sns/errors.rb +22 -0
- data/lib/aws/sns/has_delivery_policy.rb +68 -0
- data/lib/aws/sns/policy.rb +47 -0
- data/lib/aws/sns/request.rb +23 -0
- data/lib/aws/sns/subscription.rb +144 -0
- data/lib/aws/sns/subscription_collection.rb +78 -0
- data/lib/aws/sns/topic.rb +403 -0
- data/lib/aws/sns/topic_collection.rb +62 -0
- data/lib/aws/sns/topic_subscription_collection.rb +54 -0
- data/lib/aws/sqs.rb +81 -0
- data/lib/aws/sqs/client.rb +258 -0
- data/lib/aws/sqs/config.rb +18 -0
- data/lib/aws/sqs/errors.rb +101 -0
- data/lib/aws/sqs/policy.rb +48 -0
- data/lib/aws/sqs/queue.rb +764 -0
- data/lib/aws/sqs/queue_collection.rb +174 -0
- data/lib/aws/sqs/received_message.rb +181 -0
- data/lib/aws/sqs/received_sns_message.rb +116 -0
- data/lib/aws/sqs/request.rb +67 -0
- data/lib/aws/storage_gateway.rb +73 -0
- data/lib/aws/storage_gateway/client.rb +472 -0
- data/lib/aws/storage_gateway/config.rb +18 -0
- data/lib/aws/storage_gateway/errors.rb +22 -0
- data/lib/aws/storage_gateway/request.rb +28 -0
- data/lib/aws/sts.rb +163 -0
- data/lib/aws/sts/client.rb +157 -0
- data/lib/aws/sts/config.rb +18 -0
- data/lib/aws/sts/errors.rb +22 -0
- data/lib/aws/sts/federated_session.rb +56 -0
- data/lib/aws/sts/policy.rb +30 -0
- data/lib/aws/sts/request.rb +29 -0
- data/lib/aws/sts/session.rb +48 -0
- data/lib/aws/version.rb +18 -0
- data/lib/net/http/connection_pool.rb +226 -0
- data/lib/net/http/connection_pool/connection.rb +189 -0
- data/lib/net/http/connection_pool/session.rb +126 -0
- data/rails/init.rb +15 -0
- metadata +632 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
|
4
|
+
# may not use this file except in compliance with the License. A copy of
|
|
5
|
+
# the License is located at
|
|
6
|
+
#
|
|
7
|
+
# http://aws.amazon.com/apache2.0/
|
|
8
|
+
#
|
|
9
|
+
# or in the "license" file accompanying this file. This file is
|
|
10
|
+
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
|
11
|
+
# ANY KIND, either express or implied. See the License for the specific
|
|
12
|
+
# language governing permissions and limitations under the License.
|
|
13
|
+
|
|
14
|
+
module AWS
|
|
15
|
+
module Core
|
|
16
|
+
|
|
17
|
+
# Mixin that provides a generic callback facility for asynchronous
|
|
18
|
+
# tasks that can either succeed or fail.
|
|
19
|
+
module AsyncHandle
|
|
20
|
+
|
|
21
|
+
# Called to signal success and fire off the success and complete callbacks.
|
|
22
|
+
def signal_success
|
|
23
|
+
__send_signal(:success)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Called to signal failure and fire off the failure and complete callbacks.
|
|
27
|
+
def signal_failure
|
|
28
|
+
__send_signal(:failure)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Registers a callback to be called on successful completion of
|
|
32
|
+
# the task.
|
|
33
|
+
#
|
|
34
|
+
# handle.on_success { puts "It worked!" }
|
|
35
|
+
#
|
|
36
|
+
# If this is called when the task has already completed
|
|
37
|
+
# successfully, it will call the callback immediately.
|
|
38
|
+
def on_success(&block)
|
|
39
|
+
if @_async_status == :success
|
|
40
|
+
block.call
|
|
41
|
+
else
|
|
42
|
+
(@_async_callbacks ||= []) << { :success => block }
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Registers a callback to be called when the task fails.
|
|
47
|
+
#
|
|
48
|
+
# handle.on_failure { puts "It didn't work!" }
|
|
49
|
+
#
|
|
50
|
+
# If this is called when the task has already failed, it will
|
|
51
|
+
# call the callback immediately.
|
|
52
|
+
def on_failure(&block)
|
|
53
|
+
if @_async_status == :failure
|
|
54
|
+
block.call
|
|
55
|
+
else
|
|
56
|
+
(@_async_callbacks ||= []) << { :failure => block }
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Registers a callback to be called when the task is complete,
|
|
61
|
+
# regardless of its status. Yields the status to the block.
|
|
62
|
+
#
|
|
63
|
+
# handle.on_complete do |status|
|
|
64
|
+
# puts "It #{status == :success ? 'did' : 'did not'} work!"
|
|
65
|
+
# end
|
|
66
|
+
#
|
|
67
|
+
# If this is called when the task has already completed, it will
|
|
68
|
+
# call the callback immediately.
|
|
69
|
+
def on_complete(&block)
|
|
70
|
+
if !@_async_status.nil?
|
|
71
|
+
block.call(@_async_status)
|
|
72
|
+
else
|
|
73
|
+
(@_async_callbacks ||= []) << {
|
|
74
|
+
:failure => lambda { block.call(:failure) },
|
|
75
|
+
:success => lambda { block.call(:success) }
|
|
76
|
+
}
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
private
|
|
81
|
+
def __send_signal(kind)
|
|
82
|
+
@_async_status = kind
|
|
83
|
+
@_async_callbacks.map do |cb|
|
|
84
|
+
cb[kind]
|
|
85
|
+
end.compact.each {|block| block.call } if @_async_callbacks
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
|
4
|
+
# may not use this file except in compliance with the License. A copy of
|
|
5
|
+
# the License is located at
|
|
6
|
+
#
|
|
7
|
+
# http://aws.amazon.com/apache2.0/
|
|
8
|
+
#
|
|
9
|
+
# or in the "license" file accompanying this file. This file is
|
|
10
|
+
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
|
11
|
+
# ANY KIND, either express or implied. See the License for the specific
|
|
12
|
+
# language governing permissions and limitations under the License.
|
|
13
|
+
|
|
14
|
+
require 'set'
|
|
15
|
+
|
|
16
|
+
module AWS
|
|
17
|
+
|
|
18
|
+
@@eager = false
|
|
19
|
+
@@autoloads = {}
|
|
20
|
+
|
|
21
|
+
def self.register_autoloads klass, prefix = nil, &block
|
|
22
|
+
autoloader = Core::Autoloader.new(klass, prefix)
|
|
23
|
+
autoloader.instance_eval(&block)
|
|
24
|
+
autoloader.autoloads.each_pair do |const_name, file_path|
|
|
25
|
+
require(file_path) if @@eager
|
|
26
|
+
@@autoloads["#{klass}::#{const_name}"] = file_path
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def self.eager_autoload!
|
|
31
|
+
unless @@eager
|
|
32
|
+
@@eager = true
|
|
33
|
+
@@autoloads.values.uniq.each {|file_path| require(file_path) }
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def self.autoloads
|
|
38
|
+
@@autoloads
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
module Core
|
|
42
|
+
|
|
43
|
+
# @private
|
|
44
|
+
class Autoloader
|
|
45
|
+
|
|
46
|
+
def initialize klass, prefix = nil
|
|
47
|
+
@klass = klass
|
|
48
|
+
@prefix = prefix || klass.name.gsub(/::/, '/').downcase
|
|
49
|
+
@autoloads = {}
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
attr_reader :autoloads
|
|
53
|
+
|
|
54
|
+
def autoload const_name, file_name
|
|
55
|
+
path = "#{@prefix}/#{file_name}"
|
|
56
|
+
@klass.autoload(const_name, path)
|
|
57
|
+
@autoloads[const_name] = path
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
end
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
|
4
|
+
# may not use this file except in compliance with the License. A copy of
|
|
5
|
+
# the License is located at
|
|
6
|
+
#
|
|
7
|
+
# http://aws.amazon.com/apache2.0/
|
|
8
|
+
#
|
|
9
|
+
# or in the "license" file accompanying this file. This file is
|
|
10
|
+
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
|
11
|
+
# ANY KIND, either express or implied. See the License for the specific
|
|
12
|
+
# language governing permissions and limitations under the License.
|
|
13
|
+
|
|
14
|
+
module AWS
|
|
15
|
+
module Core
|
|
16
|
+
|
|
17
|
+
# @private
|
|
18
|
+
module Cacheable
|
|
19
|
+
|
|
20
|
+
# @private
|
|
21
|
+
class NoData < StandardError; end
|
|
22
|
+
|
|
23
|
+
def self.included base
|
|
24
|
+
base.extend Naming unless base.respond_to?(:service_ruby_name)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# @private
|
|
28
|
+
protected
|
|
29
|
+
def local_cache_key
|
|
30
|
+
raise NotImplementedError
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# @private
|
|
34
|
+
protected
|
|
35
|
+
def cache_key
|
|
36
|
+
@cache_key ||= begin
|
|
37
|
+
endpoint_method = self.class.service_ruby_name + "_endpoint"
|
|
38
|
+
config.credential_provider.access_key_id + ":" +
|
|
39
|
+
config.send(endpoint_method) + ":" +
|
|
40
|
+
self.class.name + ":" +
|
|
41
|
+
local_cache_key
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# @private
|
|
46
|
+
public
|
|
47
|
+
def retrieve_attribute attr, &block
|
|
48
|
+
|
|
49
|
+
if cache = AWS.response_cache
|
|
50
|
+
|
|
51
|
+
if cache.resource_cache.cached?(cache_key, attr.name)
|
|
52
|
+
return cache.resource_cache.get(cache_key, attr.name)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
cache.select(*attr.request_types).each do |response|
|
|
56
|
+
if attributes = attributes_from_response(response)
|
|
57
|
+
cache.resource_cache.store(cache_key, attributes)
|
|
58
|
+
return attributes[attr.name] if attributes.key?(attr.name)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
response = yield
|
|
65
|
+
|
|
66
|
+
if attributes = attributes_from_response(response)
|
|
67
|
+
if cache = AWS.response_cache
|
|
68
|
+
cache.resource_cache.store(cache_key, attributes)
|
|
69
|
+
end
|
|
70
|
+
attributes[attr.name] if attributes.key?(attr.name)
|
|
71
|
+
else
|
|
72
|
+
raise NoData.new("no data in #{response.request_type} response")
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
@@ -0,0 +1,691 @@
|
|
|
1
|
+
# Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
|
4
|
+
# may not use this file except in compliance with the License. A copy of
|
|
5
|
+
# the License is located at
|
|
6
|
+
#
|
|
7
|
+
# http://aws.amazon.com/apache2.0/
|
|
8
|
+
#
|
|
9
|
+
# or in the "license" file accompanying this file. This file is
|
|
10
|
+
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
|
11
|
+
# ANY KIND, either express or implied. See the License for the specific
|
|
12
|
+
# language governing permissions and limitations under the License.
|
|
13
|
+
|
|
14
|
+
require 'json'
|
|
15
|
+
require 'set'
|
|
16
|
+
require 'yaml'
|
|
17
|
+
require 'uri'
|
|
18
|
+
|
|
19
|
+
module AWS
|
|
20
|
+
module Core
|
|
21
|
+
|
|
22
|
+
# Base client class for all of the Amazon AWS service clients.
|
|
23
|
+
class Client
|
|
24
|
+
|
|
25
|
+
# Raised when a request failed due to a networking issue (e.g.
|
|
26
|
+
# EOFError, IOError, Errno::ECONNRESET, Errno::EPIPE,
|
|
27
|
+
# Timeout::Error, etc)
|
|
28
|
+
class NetworkError < StandardError; end
|
|
29
|
+
|
|
30
|
+
extend Naming
|
|
31
|
+
|
|
32
|
+
# @private
|
|
33
|
+
CACHEABLE_REQUESTS = Set[]
|
|
34
|
+
|
|
35
|
+
# Creates a new low-level client.
|
|
36
|
+
# @param [Hash] options
|
|
37
|
+
# @option options [Core::Configuration] :config (AWS.config)
|
|
38
|
+
# The base configuration object to use. All other options
|
|
39
|
+
# are merged with this. Defaults to the AWS.config.
|
|
40
|
+
# @option (see AWS.config)
|
|
41
|
+
def initialize options = {}
|
|
42
|
+
|
|
43
|
+
options = options.dup # so we don't modify the options passed in
|
|
44
|
+
|
|
45
|
+
@service_ruby_name = self.class.service_ruby_name
|
|
46
|
+
|
|
47
|
+
# translate these into service specific configuration options,
|
|
48
|
+
# e.g. :endpoint into :s3_endpoint
|
|
49
|
+
[:endpoint, :region, :port].each do |opt|
|
|
50
|
+
if options[opt]
|
|
51
|
+
options[:"#{service_ruby_name}_#{opt}"] = options.delete(opt)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
@config = (options.delete(:config) || AWS.config)
|
|
56
|
+
@config = @config.with(options)
|
|
57
|
+
|
|
58
|
+
@credential_provider = @config.credential_provider
|
|
59
|
+
@http_handler = @config.http_handler
|
|
60
|
+
@endpoint = config.send(:"#{service_ruby_name}_endpoint")
|
|
61
|
+
@port = config.send(:"#{service_ruby_name}_port")
|
|
62
|
+
if config.send(:"#{service_ruby_name}_service_path") <=> "/"
|
|
63
|
+
@uri = config.send(:"#{service_ruby_name}_service_path")
|
|
64
|
+
end
|
|
65
|
+
@http_read_timeout = @config.http_read_timeout
|
|
66
|
+
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# @return [Configuration] This clients configuration.
|
|
70
|
+
attr_reader :config
|
|
71
|
+
|
|
72
|
+
# @return [CredentialProviders::Provider] Returns the credential
|
|
73
|
+
# provider for this client.
|
|
74
|
+
# @private
|
|
75
|
+
attr_reader :credential_provider
|
|
76
|
+
|
|
77
|
+
# @return [String] The snake-cased ruby name for the service
|
|
78
|
+
# (e.g. 's3', 'iam', 'dynamo_db', etc).
|
|
79
|
+
# @private
|
|
80
|
+
attr_reader :service_ruby_name
|
|
81
|
+
|
|
82
|
+
# @return [Integer] What port this client makes requests via.
|
|
83
|
+
# @private
|
|
84
|
+
attr_reader :port
|
|
85
|
+
|
|
86
|
+
# @return [Integer] The number of seconds before requests made by
|
|
87
|
+
# this client should timeout if they have not received a response.
|
|
88
|
+
attr_reader :http_read_timeout
|
|
89
|
+
|
|
90
|
+
# @return [String] Returns the service endpoint (hostname) this client
|
|
91
|
+
# makes requests against.
|
|
92
|
+
# @private
|
|
93
|
+
attr_reader :endpoint
|
|
94
|
+
|
|
95
|
+
# @return [String] Returns the service path this client
|
|
96
|
+
# makes requests against.
|
|
97
|
+
# @private
|
|
98
|
+
attr_reader :uri
|
|
99
|
+
|
|
100
|
+
# @return (see Client.operations)
|
|
101
|
+
def operations
|
|
102
|
+
self.class.operations
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# Returns a copy of the client with a different HTTP handler.
|
|
106
|
+
# You can pass an object like BuiltinHttpHandler or you can
|
|
107
|
+
# use a block; for example:
|
|
108
|
+
#
|
|
109
|
+
# s3_with_logging = s3.with_http_handler do |request, response|
|
|
110
|
+
# $stderr.puts request.inspect
|
|
111
|
+
# super(request, response)
|
|
112
|
+
# $stderr.puts response.inspect
|
|
113
|
+
# end
|
|
114
|
+
#
|
|
115
|
+
# The block executes in the context of an HttpHandler
|
|
116
|
+
# instance, and +super+ delegates to the HTTP handler used by
|
|
117
|
+
# this client. This provides an easy way to spy on requests
|
|
118
|
+
# and responses. See HttpHandler, HttpRequest, and
|
|
119
|
+
# HttpResponse for more details on how to implement a fully
|
|
120
|
+
# functional HTTP handler using a different HTTP library than
|
|
121
|
+
# the one that ships with Ruby.
|
|
122
|
+
# @param handler (nil) A new http handler. Leave blank and pass a
|
|
123
|
+
# block to wrap the current handler with the block.
|
|
124
|
+
# @return [Core::Client] Returns a new instance of the client class with
|
|
125
|
+
# the modified or wrapped http handler.
|
|
126
|
+
def with_http_handler(handler = nil, &blk)
|
|
127
|
+
handler ||= Http::Handler.new(@http_handler, &blk)
|
|
128
|
+
with_options(:http_handler => handler)
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
# Returns a new client with the passed configuration options
|
|
132
|
+
# merged with the current configuration options.
|
|
133
|
+
#
|
|
134
|
+
# no_retry_client = client.with_options(:max_retries => 0)
|
|
135
|
+
#
|
|
136
|
+
# @param [Hash] options
|
|
137
|
+
# @option (see AWS.config)
|
|
138
|
+
# @return [Client]
|
|
139
|
+
def with_options options
|
|
140
|
+
with_config(config.with(options))
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
# @param [Configuration] config The configuration object to use.
|
|
144
|
+
# @return [Core::Client] Returns a new client object with the given
|
|
145
|
+
# configuration.
|
|
146
|
+
# @private
|
|
147
|
+
def with_config config
|
|
148
|
+
self.class.new(:config => config)
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
# The stub returned is memoized.
|
|
152
|
+
# @see new_stub_for
|
|
153
|
+
# @private
|
|
154
|
+
def stub_for method_name
|
|
155
|
+
@stubs ||= {}
|
|
156
|
+
@stubs[method_name] ||= new_stub_for(method_name)
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
# Primarily used for testing, this method returns an empty pseudo
|
|
160
|
+
# service response without making a request. Its used primarily for
|
|
161
|
+
# testing the lighter level service interfaces.
|
|
162
|
+
# @private
|
|
163
|
+
def new_stub_for method_name
|
|
164
|
+
response = Response.new(Http::Request.new, Http::Response.new)
|
|
165
|
+
response.request_type = method_name
|
|
166
|
+
response.request_options = {}
|
|
167
|
+
send("simulate_#{method_name}_response", response)
|
|
168
|
+
response.signal_success
|
|
169
|
+
response
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
# Logs the warning to the configured logger, otherwise to stderr.
|
|
173
|
+
# @param [String] warning
|
|
174
|
+
# @return [nil]
|
|
175
|
+
def log_warning warning
|
|
176
|
+
message = '[aws-sdk-gem-warning] ' + warning
|
|
177
|
+
if config.logger
|
|
178
|
+
config.logger.warn(message)
|
|
179
|
+
else
|
|
180
|
+
$stderr.puts(message)
|
|
181
|
+
end
|
|
182
|
+
nil
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
protected
|
|
186
|
+
|
|
187
|
+
def new_request
|
|
188
|
+
eval(self.class.name.sub(/::Client$/, ''))::Request.new
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
def new_response(*args, &block)
|
|
192
|
+
Response.new(*args, &block)
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
def make_async_request response
|
|
196
|
+
|
|
197
|
+
pauses = async_request_with_retries(response, response.http_request)
|
|
198
|
+
|
|
199
|
+
response
|
|
200
|
+
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
def async_request_with_retries response, http_request, retry_delays = nil
|
|
204
|
+
|
|
205
|
+
response.http_response = Http::Response.new
|
|
206
|
+
|
|
207
|
+
handle = Object.new
|
|
208
|
+
handle.extend AsyncHandle
|
|
209
|
+
handle.on_complete do |status|
|
|
210
|
+
case status
|
|
211
|
+
when :failure
|
|
212
|
+
response.error = StandardError.new("failed to contact the service")
|
|
213
|
+
response.signal_failure
|
|
214
|
+
when :success
|
|
215
|
+
populate_error(response)
|
|
216
|
+
retry_delays ||= sleep_durations(response)
|
|
217
|
+
if should_retry?(response) and !retry_delays.empty?
|
|
218
|
+
rebuild_http_request(response)
|
|
219
|
+
@http_handler.sleep_with_callback(retry_delays.shift) do
|
|
220
|
+
async_request_with_retries(response, response.http_request, retry_delays)
|
|
221
|
+
end
|
|
222
|
+
else
|
|
223
|
+
response.error ?
|
|
224
|
+
response.signal_failure :
|
|
225
|
+
response.signal_success
|
|
226
|
+
end
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
@http_handler.handle_async(http_request, response.http_response, handle)
|
|
231
|
+
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
def make_sync_request response, &read_block
|
|
235
|
+
retry_server_errors do
|
|
236
|
+
|
|
237
|
+
response.http_response = Http::Response.new
|
|
238
|
+
|
|
239
|
+
@http_handler.handle(
|
|
240
|
+
response.http_request,
|
|
241
|
+
response.http_response,
|
|
242
|
+
&read_block)
|
|
243
|
+
|
|
244
|
+
if
|
|
245
|
+
block_given? and
|
|
246
|
+
response.http_response.status < 300 and
|
|
247
|
+
response.http_response.body
|
|
248
|
+
then
|
|
249
|
+
|
|
250
|
+
msg = ":http_handler read the entire http response body into "
|
|
251
|
+
msg << "memory, it should have instead yielded chunks"
|
|
252
|
+
log_warning(msg)
|
|
253
|
+
|
|
254
|
+
# go ahead and yield the body on behalf of the handler
|
|
255
|
+
yield(response.http_response.body)
|
|
256
|
+
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
populate_error(response)
|
|
260
|
+
response.signal_success unless response.error
|
|
261
|
+
response
|
|
262
|
+
|
|
263
|
+
end
|
|
264
|
+
end
|
|
265
|
+
|
|
266
|
+
def retry_server_errors &block
|
|
267
|
+
|
|
268
|
+
response = yield
|
|
269
|
+
|
|
270
|
+
sleeps = sleep_durations(response)
|
|
271
|
+
while should_retry?(response)
|
|
272
|
+
break if sleeps.empty?
|
|
273
|
+
Kernel.sleep(sleeps.shift)
|
|
274
|
+
rebuild_http_request(response)
|
|
275
|
+
response = yield
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
response
|
|
279
|
+
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
def rebuild_http_request response
|
|
283
|
+
credential_provider.refresh if expired_credentials?(response)
|
|
284
|
+
response.rebuild_request
|
|
285
|
+
if redirected?(response)
|
|
286
|
+
loc = URI.parse(response.http_response.headers['location'].first)
|
|
287
|
+
AWS::Core::MetaUtils.extend_method(response.http_request, :host) do
|
|
288
|
+
loc.host
|
|
289
|
+
end
|
|
290
|
+
response.http_request.host = loc.host
|
|
291
|
+
response.http_request.port = loc.port
|
|
292
|
+
response.http_request.uri = loc.path
|
|
293
|
+
end
|
|
294
|
+
response.retry_count += 1
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
def sleep_durations response
|
|
298
|
+
if expired_credentials?(response)
|
|
299
|
+
[0]
|
|
300
|
+
else
|
|
301
|
+
factor = scaling_factor(response)
|
|
302
|
+
Array.new(config.max_retries) {|n| (2 ** n) * factor }
|
|
303
|
+
end
|
|
304
|
+
end
|
|
305
|
+
|
|
306
|
+
def scaling_factor response
|
|
307
|
+
throttled?(response) ? (0.5 + Kernel.rand * 0.1) : 0.3
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
def should_retry? response
|
|
311
|
+
if retryable_error?(response)
|
|
312
|
+
response.safe_to_retry?
|
|
313
|
+
else
|
|
314
|
+
false
|
|
315
|
+
end
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
def retryable_error? response
|
|
319
|
+
expired_credentials?(response) or
|
|
320
|
+
response.network_error? or
|
|
321
|
+
throttled?(response) or
|
|
322
|
+
redirected?(response) or
|
|
323
|
+
response.error.kind_of?(Errors::ServerError)
|
|
324
|
+
end
|
|
325
|
+
|
|
326
|
+
# @return [Boolean] Returns +true+ if the response contains an
|
|
327
|
+
# error message that indicates credentials have expired.
|
|
328
|
+
def expired_credentials? response
|
|
329
|
+
response.error and
|
|
330
|
+
response.error.respond_to?(:code) and
|
|
331
|
+
(response.error.code == 'ExpiredTokenException' || response.error.code == 'ExpiredToken')
|
|
332
|
+
end
|
|
333
|
+
|
|
334
|
+
def throttled? response
|
|
335
|
+
response.error and
|
|
336
|
+
response.error.respond_to?(:code) and
|
|
337
|
+
response.error.code.to_s.match(/Throttling/i)
|
|
338
|
+
end
|
|
339
|
+
|
|
340
|
+
def redirected? response
|
|
341
|
+
response.http_response.status == 307
|
|
342
|
+
end
|
|
343
|
+
|
|
344
|
+
def return_or_raise options, &block
|
|
345
|
+
response = yield
|
|
346
|
+
unless options[:async]
|
|
347
|
+
raise response.error if response.error
|
|
348
|
+
end
|
|
349
|
+
response
|
|
350
|
+
end
|
|
351
|
+
|
|
352
|
+
# Yields to the given block (which should be making a
|
|
353
|
+
# request and returning a {Response} object). The results of the
|
|
354
|
+
# request/response are logged.
|
|
355
|
+
#
|
|
356
|
+
# @param [Hash] options
|
|
357
|
+
# @option options [Boolean] :async
|
|
358
|
+
# @return [Response]
|
|
359
|
+
def log_client_request options, &block
|
|
360
|
+
|
|
361
|
+
# time the request, retries and all
|
|
362
|
+
start = Time.now
|
|
363
|
+
response = yield
|
|
364
|
+
response.duration = Time.now - start
|
|
365
|
+
|
|
366
|
+
if options[:async]
|
|
367
|
+
response.on_complete { log_response(response) }
|
|
368
|
+
else
|
|
369
|
+
log_response(response)
|
|
370
|
+
end
|
|
371
|
+
|
|
372
|
+
response
|
|
373
|
+
|
|
374
|
+
end
|
|
375
|
+
|
|
376
|
+
# Logs the response to the configured logger.
|
|
377
|
+
# @param [Response] response
|
|
378
|
+
# @return [nil]
|
|
379
|
+
def log_response response
|
|
380
|
+
if config.logger
|
|
381
|
+
message = config.log_formatter.format(response)
|
|
382
|
+
config.logger.send(config.log_level, message)
|
|
383
|
+
end
|
|
384
|
+
nil
|
|
385
|
+
end
|
|
386
|
+
|
|
387
|
+
def populate_error response
|
|
388
|
+
|
|
389
|
+
status = response.http_response.status
|
|
390
|
+
|
|
391
|
+
error_code, error_message = extract_error_details(response)
|
|
392
|
+
|
|
393
|
+
error_args = [
|
|
394
|
+
response.http_request,
|
|
395
|
+
response.http_response,
|
|
396
|
+
error_code,
|
|
397
|
+
error_message
|
|
398
|
+
]
|
|
399
|
+
|
|
400
|
+
response.error =
|
|
401
|
+
case
|
|
402
|
+
when response.network_error? then response.http_response.network_error
|
|
403
|
+
when error_code then error_class(error_code).new(*error_args)
|
|
404
|
+
when status >= 500 then Errors::ServerError.new(*error_args)
|
|
405
|
+
when status >= 300 then Errors::ClientError.new(*error_args)
|
|
406
|
+
else nil # no error
|
|
407
|
+
end
|
|
408
|
+
|
|
409
|
+
end
|
|
410
|
+
|
|
411
|
+
# Extracts the error code and error message from a response
|
|
412
|
+
# if it contains an error. Returns nil otherwise. Should be defined
|
|
413
|
+
# in sub-classes (e.g. QueryClient, RESTClient, etc).
|
|
414
|
+
# @param [Response] response
|
|
415
|
+
# @return [Array<Code,Message>,nil] Should return an array with an
|
|
416
|
+
# error code and message, or +nil+.
|
|
417
|
+
def extract_error_details response
|
|
418
|
+
raise NotImplementedError
|
|
419
|
+
end
|
|
420
|
+
|
|
421
|
+
# Given an error code string, this method will return an error class.
|
|
422
|
+
#
|
|
423
|
+
# AWS::EC2::Client.new.send(:error_code, 'InvalidInstanceId')
|
|
424
|
+
# #=> AWS::EC2::Errors::InvalidInstanceId
|
|
425
|
+
#
|
|
426
|
+
# @param [String] error_code The error code string as returned by
|
|
427
|
+
# the service. If this class contains periods, they will be
|
|
428
|
+
# converted into namespaces (e.g. 'Foo.Bar' becomes Errors::Foo::Bar).
|
|
429
|
+
#
|
|
430
|
+
# @return [Class]
|
|
431
|
+
#
|
|
432
|
+
def error_class error_code
|
|
433
|
+
errors_module.error_class(error_code)
|
|
434
|
+
end
|
|
435
|
+
|
|
436
|
+
# Returns the ::Errors module for the current client.
|
|
437
|
+
#
|
|
438
|
+
# AWS::S3::Client.new.errors_module
|
|
439
|
+
# #=> AWS::S3::Errors
|
|
440
|
+
#
|
|
441
|
+
# @return [Module]
|
|
442
|
+
#
|
|
443
|
+
def errors_module
|
|
444
|
+
AWS.const_get(self.class.to_s[/(\w+)::Client/, 1])::Errors
|
|
445
|
+
end
|
|
446
|
+
|
|
447
|
+
def client_request name, options, &read_block
|
|
448
|
+
return_or_raise(options) do
|
|
449
|
+
log_client_request(options) do
|
|
450
|
+
|
|
451
|
+
if config.stub_requests?
|
|
452
|
+
|
|
453
|
+
response = stub_for(name)
|
|
454
|
+
response.http_request = build_request(name, options)
|
|
455
|
+
response.request_options = options
|
|
456
|
+
response
|
|
457
|
+
|
|
458
|
+
else
|
|
459
|
+
|
|
460
|
+
client = self
|
|
461
|
+
|
|
462
|
+
response = new_response do
|
|
463
|
+
client.send(:build_request, name, options)
|
|
464
|
+
end
|
|
465
|
+
|
|
466
|
+
response.request_type = name
|
|
467
|
+
response.request_options = options
|
|
468
|
+
|
|
469
|
+
if
|
|
470
|
+
cacheable_request?(name, options) and
|
|
471
|
+
cache = AWS.response_cache and
|
|
472
|
+
cached_response = cache.cached(response)
|
|
473
|
+
then
|
|
474
|
+
cached_response.cached = true
|
|
475
|
+
cached_response
|
|
476
|
+
else
|
|
477
|
+
# process the http request
|
|
478
|
+
options[:async] ?
|
|
479
|
+
make_async_request(response, &read_block) :
|
|
480
|
+
make_sync_request(response, &read_block)
|
|
481
|
+
|
|
482
|
+
# process the http response
|
|
483
|
+
response.on_success do
|
|
484
|
+
send("process_#{name}_response", response)
|
|
485
|
+
if cache = AWS.response_cache
|
|
486
|
+
cache.add(response)
|
|
487
|
+
end
|
|
488
|
+
end
|
|
489
|
+
|
|
490
|
+
# close files we opened
|
|
491
|
+
response.on_complete do
|
|
492
|
+
if response.http_request.body_stream.is_a?(ManagedFile)
|
|
493
|
+
response.http_request.body_stream.close
|
|
494
|
+
end
|
|
495
|
+
end
|
|
496
|
+
|
|
497
|
+
response
|
|
498
|
+
|
|
499
|
+
end
|
|
500
|
+
|
|
501
|
+
end
|
|
502
|
+
|
|
503
|
+
end
|
|
504
|
+
end
|
|
505
|
+
end
|
|
506
|
+
|
|
507
|
+
def cacheable_request? name, options
|
|
508
|
+
self.class::CACHEABLE_REQUESTS.include?(name)
|
|
509
|
+
end
|
|
510
|
+
|
|
511
|
+
def build_request name, options
|
|
512
|
+
|
|
513
|
+
# we dont want to pass the async option to the configure block
|
|
514
|
+
opts = options.dup
|
|
515
|
+
opts.delete(:async)
|
|
516
|
+
|
|
517
|
+
http_request = new_request
|
|
518
|
+
http_request.access_key_id = credential_provider.access_key_id
|
|
519
|
+
|
|
520
|
+
# configure the http request
|
|
521
|
+
http_request.service_ruby_name = service_ruby_name
|
|
522
|
+
http_request.default_read_timeout = http_read_timeout
|
|
523
|
+
http_request.host = endpoint
|
|
524
|
+
http_request.port = port
|
|
525
|
+
http_request.uri = uri
|
|
526
|
+
http_request.region = config.send(:"#{service_ruby_name}_region")
|
|
527
|
+
http_request.proxy_uri = config.proxy_uri
|
|
528
|
+
http_request.use_ssl = config.use_ssl?
|
|
529
|
+
http_request.ssl_verify_peer = config.ssl_verify_peer?
|
|
530
|
+
http_request.ssl_ca_file = config.ssl_ca_file if config.ssl_ca_file
|
|
531
|
+
http_request.ssl_ca_path = config.ssl_ca_path if config.ssl_ca_path
|
|
532
|
+
|
|
533
|
+
send("configure_#{name}_request", http_request, opts)
|
|
534
|
+
|
|
535
|
+
http_request.headers["user-agent"] = user_agent_string
|
|
536
|
+
http_request.add_authorization!(credential_provider)
|
|
537
|
+
|
|
538
|
+
http_request
|
|
539
|
+
|
|
540
|
+
end
|
|
541
|
+
|
|
542
|
+
def user_agent_string
|
|
543
|
+
engine = (RUBY_ENGINE rescue nil or "ruby")
|
|
544
|
+
user_agent = "%s aws-sdk-ruby/#{VERSION} %s/%s %s" %
|
|
545
|
+
[config.user_agent_prefix, engine, RUBY_VERSION, RUBY_PLATFORM]
|
|
546
|
+
user_agent.strip!
|
|
547
|
+
if AWS.memoizing?
|
|
548
|
+
user_agent << " memoizing"
|
|
549
|
+
end
|
|
550
|
+
user_agent
|
|
551
|
+
end
|
|
552
|
+
|
|
553
|
+
class << self
|
|
554
|
+
|
|
555
|
+
# @return [Array<Symbol>] Returns a list of service operations as
|
|
556
|
+
# method names supported by this client.
|
|
557
|
+
def operations
|
|
558
|
+
@operations ||= []
|
|
559
|
+
end
|
|
560
|
+
|
|
561
|
+
# @private
|
|
562
|
+
def request_builders
|
|
563
|
+
@request_builders ||= {}
|
|
564
|
+
end
|
|
565
|
+
|
|
566
|
+
# @private
|
|
567
|
+
def response_parsers
|
|
568
|
+
@response_parsers ||= {}
|
|
569
|
+
end
|
|
570
|
+
|
|
571
|
+
protected
|
|
572
|
+
|
|
573
|
+
# Define this in sub-classes (e.g. QueryClient, RESTClient, etc)
|
|
574
|
+
def request_builder_for api_config, operation
|
|
575
|
+
raise NotImplementedError
|
|
576
|
+
end
|
|
577
|
+
|
|
578
|
+
# Define this in sub-classes (e.g. QueryClient, RESTClient, etc)
|
|
579
|
+
def response_parser_for api_config, operation
|
|
580
|
+
raise NotImplementedError
|
|
581
|
+
end
|
|
582
|
+
|
|
583
|
+
# Adds a single method to the current client class. This method
|
|
584
|
+
# yields a request method builder that allows you to specify how:
|
|
585
|
+
#
|
|
586
|
+
# * the request is built
|
|
587
|
+
# * the response is processed
|
|
588
|
+
# * the response is stubbed for testing
|
|
589
|
+
#
|
|
590
|
+
def add_client_request_method method_name, options = {}, &block
|
|
591
|
+
|
|
592
|
+
operations << method_name
|
|
593
|
+
|
|
594
|
+
ClientRequestMethodBuilder.new(self, method_name, &block)
|
|
595
|
+
|
|
596
|
+
method_def = <<-METHOD
|
|
597
|
+
def #{method_name}(*args, &block)
|
|
598
|
+
options = args.first ? args.first : {}
|
|
599
|
+
client_request(#{method_name.inspect}, options, &block)
|
|
600
|
+
end
|
|
601
|
+
METHOD
|
|
602
|
+
|
|
603
|
+
module_eval(method_def)
|
|
604
|
+
|
|
605
|
+
end
|
|
606
|
+
|
|
607
|
+
# Loads the API configuration for the given API version.
|
|
608
|
+
# @param [String] api_version The API version date string
|
|
609
|
+
# (e.g. '2012-01-05').
|
|
610
|
+
# @return [Hash]
|
|
611
|
+
def load_api_config api_version
|
|
612
|
+
lib = File.dirname(File.dirname(__FILE__))
|
|
613
|
+
path = "#{lib}/api_config/#{service_name}-#{api_version}.yml"
|
|
614
|
+
YAML.load(File.read(path))
|
|
615
|
+
end
|
|
616
|
+
|
|
617
|
+
# Defines one method for each service operation described in
|
|
618
|
+
# the API configuration.
|
|
619
|
+
# @param [String] api_version
|
|
620
|
+
def define_client_methods api_version
|
|
621
|
+
|
|
622
|
+
const_set(:API_VERSION, api_version)
|
|
623
|
+
|
|
624
|
+
api_config = load_api_config(api_version)
|
|
625
|
+
|
|
626
|
+
api_config[:operations].each do |operation|
|
|
627
|
+
|
|
628
|
+
builder = request_builder_for(api_config, operation)
|
|
629
|
+
parser = response_parser_for(api_config, operation)
|
|
630
|
+
|
|
631
|
+
define_client_method(operation[:method], builder, parser)
|
|
632
|
+
|
|
633
|
+
end
|
|
634
|
+
end
|
|
635
|
+
|
|
636
|
+
def define_client_method method_name, builder, parser
|
|
637
|
+
|
|
638
|
+
request_builders[method_name] = builder
|
|
639
|
+
response_parsers[method_name] = parser
|
|
640
|
+
|
|
641
|
+
add_client_request_method(method_name) do
|
|
642
|
+
|
|
643
|
+
configure_request do |request, request_options|
|
|
644
|
+
builder.populate_request(request, request_options)
|
|
645
|
+
end
|
|
646
|
+
|
|
647
|
+
process_response do |response|
|
|
648
|
+
response.data = parser.extract_data(response)
|
|
649
|
+
end
|
|
650
|
+
|
|
651
|
+
simulate_response do |response|
|
|
652
|
+
response.data = parser.simulate
|
|
653
|
+
end
|
|
654
|
+
|
|
655
|
+
end
|
|
656
|
+
end
|
|
657
|
+
|
|
658
|
+
end
|
|
659
|
+
|
|
660
|
+
# @private
|
|
661
|
+
class ClientRequestMethodBuilder
|
|
662
|
+
|
|
663
|
+
def initialize client_class, method_name, &block
|
|
664
|
+
@client_class = client_class
|
|
665
|
+
@method_name = method_name
|
|
666
|
+
configure_request {|request, options|}
|
|
667
|
+
process_response {|response|}
|
|
668
|
+
simulate_response {|response|}
|
|
669
|
+
instance_eval(&block)
|
|
670
|
+
end
|
|
671
|
+
|
|
672
|
+
def configure_request options = {}, &block
|
|
673
|
+
name = "configure_#{@method_name}_request"
|
|
674
|
+
MetaUtils.class_extend_method(@client_class, name, &block)
|
|
675
|
+
end
|
|
676
|
+
|
|
677
|
+
def process_response &block
|
|
678
|
+
name = "process_#{@method_name}_response"
|
|
679
|
+
MetaUtils.class_extend_method(@client_class, name, &block)
|
|
680
|
+
end
|
|
681
|
+
|
|
682
|
+
def simulate_response &block
|
|
683
|
+
name = "simulate_#{@method_name}_response"
|
|
684
|
+
MetaUtils.class_extend_method(@client_class, name, &block)
|
|
685
|
+
end
|
|
686
|
+
|
|
687
|
+
end
|
|
688
|
+
|
|
689
|
+
end
|
|
690
|
+
end
|
|
691
|
+
end
|