aws-sdk 1.32.0 → 1.67.0
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/lib/aws-sdk.rb +1 -15
- metadata +16 -589
- data/.yardopts +0 -7
- data/LICENSE.txt +0 -12
- data/README.md +0 -291
- data/bin/aws-rb +0 -169
- data/ca-bundle.crt +0 -3554
- data/endpoints.json +0 -1506
- data/lib/aws.rb +0 -14
- data/lib/aws/api_config/AutoScaling-2011-01-01.yml +0 -869
- data/lib/aws/api_config/CloudFormation-2010-05-15.yml +0 -358
- data/lib/aws/api_config/CloudFront-2013-05-12.yml +0 -2448
- data/lib/aws/api_config/CloudFront-2013-08-26.yml +0 -2599
- data/lib/aws/api_config/CloudFront-2013-09-27.yml +0 -2765
- data/lib/aws/api_config/CloudFront-2013-11-11.yml +0 -2886
- data/lib/aws/api_config/CloudSearch-2011-02-01.yml +0 -681
- data/lib/aws/api_config/CloudTrail-2013-11-01.yml +0 -159
- data/lib/aws/api_config/CloudWatch-2010-08-01.yml +0 -433
- data/lib/aws/api_config/DataPipeline-2012-10-29.yml +0 -422
- data/lib/aws/api_config/DirectConnect-2012-10-25.yml +0 -735
- data/lib/aws/api_config/DynamoDB-2011-12-05.yml +0 -1168
- data/lib/aws/api_config/DynamoDB-2012-08-10.yml +0 -2005
- data/lib/aws/api_config/EC2-2013-08-15.yml +0 -4708
- data/lib/aws/api_config/EC2-2013-10-01.yml +0 -4726
- data/lib/aws/api_config/EC2-2013-10-15.yml +0 -4726
- data/lib/aws/api_config/ELB-2012-06-01.yml +0 -632
- data/lib/aws/api_config/EMR-2009-03-31.yml +0 -953
- data/lib/aws/api_config/ElastiCache-2013-06-15.yml +0 -1188
- data/lib/aws/api_config/ElasticBeanstalk-2010-12-01.yml +0 -847
- data/lib/aws/api_config/ElasticTranscoder-2012-09-25.yml +0 -2285
- data/lib/aws/api_config/Glacier-2012-06-01.yml +0 -649
- data/lib/aws/api_config/IAM-2010-05-08.yml +0 -1297
- data/lib/aws/api_config/ImportExport-2010-06-01.yml +0 -109
- data/lib/aws/api_config/Kinesis-2013-12-02.yml +0 -201
- data/lib/aws/api_config/OpsWorks-2013-02-18.yml +0 -1825
- data/lib/aws/api_config/RDS-2013-05-15.yml +0 -2464
- data/lib/aws/api_config/RDS-2013-09-09.yml +0 -2641
- data/lib/aws/api_config/Redshift-2012-12-01.yml +0 -2137
- data/lib/aws/api_config/Route53-2012-12-12.yml +0 -547
- data/lib/aws/api_config/SNS-2010-03-31.yml +0 -433
- data/lib/aws/api_config/SQS-2012-11-05.yml +0 -319
- data/lib/aws/api_config/STS-2011-06-15.yml +0 -147
- data/lib/aws/api_config/SimpleDB-2009-04-15.yml +0 -306
- data/lib/aws/api_config/SimpleEmailService-2010-12-01.yml +0 -346
- data/lib/aws/api_config/SimpleWorkflow-2012-01-25.yml +0 -2388
- data/lib/aws/api_config/StorageGateway-2012-06-30.yml +0 -748
- data/lib/aws/api_config/StorageGateway-2013-06-30.yml +0 -1025
- data/lib/aws/api_config/Support-2013-04-15.yml +0 -426
- data/lib/aws/auto_scaling.rb +0 -163
- data/lib/aws/auto_scaling/activity.rb +0 -102
- data/lib/aws/auto_scaling/activity_collection.rb +0 -81
- data/lib/aws/auto_scaling/client.rb +0 -48
- data/lib/aws/auto_scaling/config.rb +0 -18
- data/lib/aws/auto_scaling/errors.rb +0 -22
- data/lib/aws/auto_scaling/group.rb +0 -421
- data/lib/aws/auto_scaling/group_collection.rb +0 -96
- data/lib/aws/auto_scaling/group_options.rb +0 -155
- data/lib/aws/auto_scaling/instance.rb +0 -192
- data/lib/aws/auto_scaling/instance_collection.rb +0 -63
- data/lib/aws/auto_scaling/launch_configuration.rb +0 -162
- data/lib/aws/auto_scaling/launch_configuration_collection.rb +0 -160
- data/lib/aws/auto_scaling/notification_configuration.rb +0 -89
- data/lib/aws/auto_scaling/notification_configuration_collection.rb +0 -183
- data/lib/aws/auto_scaling/scaling_policy.rb +0 -142
- data/lib/aws/auto_scaling/scaling_policy_collection.rb +0 -72
- data/lib/aws/auto_scaling/scaling_policy_options.rb +0 -65
- data/lib/aws/auto_scaling/scheduled_action.rb +0 -141
- data/lib/aws/auto_scaling/scheduled_action_collection.rb +0 -202
- data/lib/aws/auto_scaling/tag.rb +0 -59
- data/lib/aws/auto_scaling/tag_collection.rb +0 -114
- data/lib/aws/cloud_formation.rb +0 -272
- data/lib/aws/cloud_formation/client.rb +0 -48
- data/lib/aws/cloud_formation/config.rb +0 -18
- data/lib/aws/cloud_formation/errors.rb +0 -22
- data/lib/aws/cloud_formation/stack.rb +0 -266
- data/lib/aws/cloud_formation/stack_collection.rb +0 -232
- data/lib/aws/cloud_formation/stack_event.rb +0 -73
- data/lib/aws/cloud_formation/stack_event_collection.rb +0 -47
- data/lib/aws/cloud_formation/stack_options.rb +0 -72
- data/lib/aws/cloud_formation/stack_output.rb +0 -53
- data/lib/aws/cloud_formation/stack_resource.rb +0 -117
- data/lib/aws/cloud_formation/stack_resource_collection.rb +0 -83
- data/lib/aws/cloud_formation/stack_resource_summary_collection.rb +0 -64
- data/lib/aws/cloud_formation/stack_summary_collection.rb +0 -123
- data/lib/aws/cloud_front.rb +0 -72
- data/lib/aws/cloud_front/client.rb +0 -45
- data/lib/aws/cloud_front/config.rb +0 -18
- data/lib/aws/cloud_front/errors.rb +0 -22
- data/lib/aws/cloud_search.rb +0 -73
- data/lib/aws/cloud_search/client.rb +0 -36
- data/lib/aws/cloud_search/config.rb +0 -18
- data/lib/aws/cloud_search/errors.rb +0 -22
- data/lib/aws/cloud_trail.rb +0 -72
- data/lib/aws/cloud_trail/client.rb +0 -35
- data/lib/aws/cloud_trail/config.rb +0 -18
- data/lib/aws/cloud_trail/errors.rb +0 -22
- data/lib/aws/cloud_watch.rb +0 -118
- data/lib/aws/cloud_watch/alarm.rb +0 -290
- data/lib/aws/cloud_watch/alarm_collection.rb +0 -153
- data/lib/aws/cloud_watch/alarm_history_item.rb +0 -50
- data/lib/aws/cloud_watch/alarm_history_item_collection.rb +0 -84
- data/lib/aws/cloud_watch/client.rb +0 -40
- data/lib/aws/cloud_watch/config.rb +0 -18
- data/lib/aws/cloud_watch/errors.rb +0 -22
- data/lib/aws/cloud_watch/metric.rb +0 -135
- data/lib/aws/cloud_watch/metric_alarm_collection.rb +0 -160
- data/lib/aws/cloud_watch/metric_collection.rb +0 -129
- data/lib/aws/cloud_watch/metric_statistics.rb +0 -69
- data/lib/aws/core.rb +0 -701
- data/lib/aws/core/async_handle.rb +0 -90
- data/lib/aws/core/cacheable.rb +0 -77
- data/lib/aws/core/client.rb +0 -778
- data/lib/aws/core/collection.rb +0 -263
- data/lib/aws/core/collection/simple.rb +0 -82
- data/lib/aws/core/collection/with_limit_and_next_token.rb +0 -71
- data/lib/aws/core/collection/with_next_token.rb +0 -97
- data/lib/aws/core/configuration.rb +0 -541
- data/lib/aws/core/credential_providers.rb +0 -506
- data/lib/aws/core/data.rb +0 -247
- data/lib/aws/core/deprecations.rb +0 -84
- data/lib/aws/core/endpoints.rb +0 -37
- data/lib/aws/core/http/connection_pool.rb +0 -349
- data/lib/aws/core/http/curb_handler.rb +0 -148
- data/lib/aws/core/http/handler.rb +0 -89
- data/lib/aws/core/http/net_http_handler.rb +0 -147
- data/lib/aws/core/http/patch.rb +0 -102
- data/lib/aws/core/http/request.rb +0 -249
- data/lib/aws/core/http/response.rb +0 -81
- data/lib/aws/core/indifferent_hash.rb +0 -88
- data/lib/aws/core/inflection.rb +0 -56
- data/lib/aws/core/json_client.rb +0 -47
- data/lib/aws/core/json_parser.rb +0 -76
- data/lib/aws/core/json_request_builder.rb +0 -35
- data/lib/aws/core/json_response_parser.rb +0 -79
- data/lib/aws/core/lazy_error_classes.rb +0 -90
- data/lib/aws/core/log_formatter.rb +0 -428
- data/lib/aws/core/managed_file.rb +0 -32
- data/lib/aws/core/meta_utils.rb +0 -45
- data/lib/aws/core/model.rb +0 -57
- data/lib/aws/core/naming.rb +0 -30
- data/lib/aws/core/option_grammar.rb +0 -738
- data/lib/aws/core/options/json_serializer.rb +0 -82
- data/lib/aws/core/options/validator.rb +0 -155
- data/lib/aws/core/options/xml_serializer.rb +0 -118
- data/lib/aws/core/page_result.rb +0 -75
- data/lib/aws/core/policy.rb +0 -942
- data/lib/aws/core/query_client.rb +0 -41
- data/lib/aws/core/query_error_parser.rb +0 -24
- data/lib/aws/core/query_request_builder.rb +0 -47
- data/lib/aws/core/query_response_parser.rb +0 -35
- data/lib/aws/core/region.rb +0 -85
- data/lib/aws/core/region_collection.rb +0 -80
- data/lib/aws/core/resource.rb +0 -413
- data/lib/aws/core/resource_cache.rb +0 -40
- data/lib/aws/core/response.rb +0 -211
- data/lib/aws/core/response_cache.rb +0 -50
- data/lib/aws/core/rest_error_parser.rb +0 -24
- data/lib/aws/core/rest_json_client.rb +0 -40
- data/lib/aws/core/rest_request_builder.rb +0 -154
- data/lib/aws/core/rest_response_parser.rb +0 -66
- data/lib/aws/core/rest_xml_client.rb +0 -47
- data/lib/aws/core/service_interface.rb +0 -83
- data/lib/aws/core/signers/base.rb +0 -46
- data/lib/aws/core/signers/cloud_front.rb +0 -56
- data/lib/aws/core/signers/s3.rb +0 -159
- data/lib/aws/core/signers/version_2.rb +0 -72
- data/lib/aws/core/signers/version_3.rb +0 -86
- data/lib/aws/core/signers/version_3_https.rb +0 -61
- data/lib/aws/core/signers/version_4.rb +0 -228
- data/lib/aws/core/signers/version_4/chunk_signed_stream.rb +0 -191
- data/lib/aws/core/uri_escape.rb +0 -44
- data/lib/aws/core/xml/frame.rb +0 -244
- data/lib/aws/core/xml/frame_stack.rb +0 -85
- data/lib/aws/core/xml/grammar.rb +0 -306
- data/lib/aws/core/xml/parser.rb +0 -70
- data/lib/aws/core/xml/root_frame.rb +0 -65
- data/lib/aws/core/xml/sax_handlers/libxml.rb +0 -47
- data/lib/aws/core/xml/sax_handlers/nokogiri.rb +0 -56
- data/lib/aws/core/xml/sax_handlers/ox.rb +0 -41
- data/lib/aws/core/xml/sax_handlers/rexml.rb +0 -47
- data/lib/aws/core/xml/stub.rb +0 -123
- data/lib/aws/data_pipeline.rb +0 -72
- data/lib/aws/data_pipeline/client.rb +0 -36
- data/lib/aws/data_pipeline/config.rb +0 -18
- data/lib/aws/data_pipeline/errors.rb +0 -20
- data/lib/aws/direct_connect.rb +0 -73
- data/lib/aws/direct_connect/client.rb +0 -36
- data/lib/aws/direct_connect/config.rb +0 -18
- data/lib/aws/direct_connect/errors.rb +0 -22
- data/lib/aws/dynamo_db.rb +0 -214
- data/lib/aws/dynamo_db/attribute_collection.rb +0 -456
- data/lib/aws/dynamo_db/batch_get.rb +0 -213
- data/lib/aws/dynamo_db/batch_write.rb +0 -252
- data/lib/aws/dynamo_db/binary.rb +0 -35
- data/lib/aws/dynamo_db/client.rb +0 -129
- data/lib/aws/dynamo_db/client/v20111205.rb +0 -1266
- data/lib/aws/dynamo_db/client/v20120810.rb +0 -1409
- data/lib/aws/dynamo_db/client_v2.rb +0 -44
- data/lib/aws/dynamo_db/config.rb +0 -24
- data/lib/aws/dynamo_db/errors.rb +0 -20
- data/lib/aws/dynamo_db/expectations.rb +0 -40
- data/lib/aws/dynamo_db/item.rb +0 -133
- data/lib/aws/dynamo_db/item_collection.rb +0 -856
- data/lib/aws/dynamo_db/item_data.rb +0 -31
- data/lib/aws/dynamo_db/keys.rb +0 -41
- data/lib/aws/dynamo_db/primary_key_element.rb +0 -48
- data/lib/aws/dynamo_db/resource.rb +0 -33
- data/lib/aws/dynamo_db/table.rb +0 -496
- data/lib/aws/dynamo_db/table_collection.rb +0 -165
- data/lib/aws/dynamo_db/types.rb +0 -111
- data/lib/aws/ec2.rb +0 -428
- data/lib/aws/ec2/attachment.rb +0 -135
- data/lib/aws/ec2/attachment_collection.rb +0 -54
- data/lib/aws/ec2/availability_zone.rb +0 -86
- data/lib/aws/ec2/availability_zone_collection.rb +0 -43
- data/lib/aws/ec2/block_device_mappings.rb +0 -53
- data/lib/aws/ec2/client.rb +0 -101
- data/lib/aws/ec2/collection.rb +0 -36
- data/lib/aws/ec2/config.rb +0 -30
- data/lib/aws/ec2/customer_gateway.rb +0 -90
- data/lib/aws/ec2/customer_gateway_collection.rb +0 -73
- data/lib/aws/ec2/dhcp_options.rb +0 -106
- data/lib/aws/ec2/dhcp_options_collection.rb +0 -87
- data/lib/aws/ec2/elastic_ip.rb +0 -209
- data/lib/aws/ec2/elastic_ip_collection.rb +0 -93
- data/lib/aws/ec2/errors.rb +0 -32
- data/lib/aws/ec2/export_task.rb +0 -120
- data/lib/aws/ec2/export_task_collection.rb +0 -67
- data/lib/aws/ec2/filtered_collection.rb +0 -87
- data/lib/aws/ec2/has_permissions.rb +0 -44
- data/lib/aws/ec2/image.rb +0 -270
- data/lib/aws/ec2/image_collection.rb +0 -220
- data/lib/aws/ec2/instance.rb +0 -803
- data/lib/aws/ec2/instance_collection.rb +0 -391
- data/lib/aws/ec2/internet_gateway.rb +0 -122
- data/lib/aws/ec2/internet_gateway/attachment.rb +0 -78
- data/lib/aws/ec2/internet_gateway_collection.rb +0 -54
- data/lib/aws/ec2/key_pair.rb +0 -82
- data/lib/aws/ec2/key_pair_collection.rb +0 -99
- data/lib/aws/ec2/network_acl.rb +0 -256
- data/lib/aws/ec2/network_acl/association.rb +0 -56
- data/lib/aws/ec2/network_acl/entry.rb +0 -147
- data/lib/aws/ec2/network_acl_collection.rb +0 -64
- data/lib/aws/ec2/network_interface.rb +0 -237
- data/lib/aws/ec2/network_interface/attachment.rb +0 -100
- data/lib/aws/ec2/network_interface_collection.rb +0 -103
- data/lib/aws/ec2/permission_collection.rb +0 -174
- data/lib/aws/ec2/region.rb +0 -106
- data/lib/aws/ec2/region_collection.rb +0 -51
- data/lib/aws/ec2/reserved_instances.rb +0 -56
- data/lib/aws/ec2/reserved_instances_collection.rb +0 -40
- data/lib/aws/ec2/reserved_instances_offering.rb +0 -60
- data/lib/aws/ec2/reserved_instances_offering_collection.rb +0 -45
- data/lib/aws/ec2/resource.rb +0 -161
- data/lib/aws/ec2/resource_tag_collection.rb +0 -211
- data/lib/aws/ec2/route_table.rb +0 -205
- data/lib/aws/ec2/route_table/association.rb +0 -119
- data/lib/aws/ec2/route_table/route.rb +0 -119
- data/lib/aws/ec2/route_table_collection.rb +0 -72
- data/lib/aws/ec2/security_group.rb +0 -482
- data/lib/aws/ec2/security_group/ip_permission.rb +0 -135
- data/lib/aws/ec2/security_group/ip_permission_collection.rb +0 -82
- data/lib/aws/ec2/security_group_collection.rb +0 -133
- data/lib/aws/ec2/snapshot.rb +0 -143
- data/lib/aws/ec2/snapshot_collection.rb +0 -131
- data/lib/aws/ec2/subnet.rb +0 -161
- data/lib/aws/ec2/subnet_collection.rb +0 -115
- data/lib/aws/ec2/tag.rb +0 -81
- data/lib/aws/ec2/tag_collection.rb +0 -107
- data/lib/aws/ec2/tagged_collection.rb +0 -53
- data/lib/aws/ec2/tagged_item.rb +0 -85
- data/lib/aws/ec2/volume.rb +0 -174
- data/lib/aws/ec2/volume_collection.rb +0 -98
- data/lib/aws/ec2/vpc.rb +0 -166
- data/lib/aws/ec2/vpc_collection.rb +0 -70
- data/lib/aws/ec2/vpn_connection.rb +0 -99
- data/lib/aws/ec2/vpn_connection/telemetry.rb +0 -49
- data/lib/aws/ec2/vpn_connection_collection.rb +0 -96
- data/lib/aws/ec2/vpn_gateway.rb +0 -123
- data/lib/aws/ec2/vpn_gateway/attachment.rb +0 -45
- data/lib/aws/ec2/vpn_gateway_collection.rb +0 -77
- data/lib/aws/elastic_beanstalk.rb +0 -49
- data/lib/aws/elastic_beanstalk/client.rb +0 -36
- data/lib/aws/elastic_beanstalk/config.rb +0 -18
- data/lib/aws/elastic_beanstalk/errors.rb +0 -22
- data/lib/aws/elastic_transcoder.rb +0 -29
- data/lib/aws/elastic_transcoder/client.rb +0 -48
- data/lib/aws/elastic_transcoder/config.rb +0 -18
- data/lib/aws/elastic_transcoder/errors.rb +0 -23
- data/lib/aws/elasticache.rb +0 -49
- data/lib/aws/elasticache/client.rb +0 -35
- data/lib/aws/elasticache/config.rb +0 -18
- data/lib/aws/elasticache/errors.rb +0 -22
- data/lib/aws/elb.rb +0 -66
- data/lib/aws/elb/availability_zone_collection.rb +0 -138
- data/lib/aws/elb/backend_server_policy_collection.rb +0 -139
- data/lib/aws/elb/client.rb +0 -35
- data/lib/aws/elb/config.rb +0 -18
- data/lib/aws/elb/errors.rb +0 -26
- data/lib/aws/elb/instance_collection.rb +0 -168
- data/lib/aws/elb/listener.rb +0 -190
- data/lib/aws/elb/listener_collection.rb +0 -113
- data/lib/aws/elb/listener_opts.rb +0 -45
- data/lib/aws/elb/load_balancer.rb +0 -280
- data/lib/aws/elb/load_balancer_collection.rb +0 -146
- data/lib/aws/elb/load_balancer_policy.rb +0 -93
- data/lib/aws/elb/load_balancer_policy_collection.rb +0 -208
- data/lib/aws/emr.rb +0 -87
- data/lib/aws/emr/client.rb +0 -35
- data/lib/aws/emr/config.rb +0 -18
- data/lib/aws/emr/errors.rb +0 -22
- data/lib/aws/emr/instance_group.rb +0 -138
- data/lib/aws/emr/instance_group_collection.rb +0 -82
- data/lib/aws/emr/job_flow.rb +0 -307
- data/lib/aws/emr/job_flow_collection.rb +0 -185
- data/lib/aws/errors.rb +0 -162
- data/lib/aws/glacier.rb +0 -79
- data/lib/aws/glacier/archive.rb +0 -56
- data/lib/aws/glacier/archive_collection.rb +0 -146
- data/lib/aws/glacier/client.rb +0 -49
- data/lib/aws/glacier/config.rb +0 -19
- data/lib/aws/glacier/errors.rb +0 -22
- data/lib/aws/glacier/resource.rb +0 -30
- data/lib/aws/glacier/vault.rb +0 -145
- data/lib/aws/glacier/vault_collection.rb +0 -75
- data/lib/aws/glacier/vault_notification_configuration.rb +0 -29
- data/lib/aws/iam.rb +0 -408
- data/lib/aws/iam/access_key.rb +0 -185
- data/lib/aws/iam/access_key_collection.rb +0 -128
- data/lib/aws/iam/account_alias_collection.rb +0 -79
- data/lib/aws/iam/client.rb +0 -49
- data/lib/aws/iam/collection.rb +0 -83
- data/lib/aws/iam/config.rb +0 -18
- data/lib/aws/iam/errors.rb +0 -22
- data/lib/aws/iam/group.rb +0 -111
- data/lib/aws/iam/group_collection.rb +0 -132
- data/lib/aws/iam/group_policy_collection.rb +0 -47
- data/lib/aws/iam/group_user_collection.rb +0 -84
- data/lib/aws/iam/login_profile.rb +0 -99
- data/lib/aws/iam/mfa_device.rb +0 -52
- data/lib/aws/iam/mfa_device_collection.rb +0 -127
- data/lib/aws/iam/policy.rb +0 -46
- data/lib/aws/iam/policy_collection.rb +0 -188
- data/lib/aws/iam/resource.rb +0 -62
- data/lib/aws/iam/server_certificate.rb +0 -141
- data/lib/aws/iam/server_certificate_collection.rb +0 -138
- data/lib/aws/iam/signing_certificate.rb +0 -174
- data/lib/aws/iam/signing_certificate_collection.rb +0 -131
- data/lib/aws/iam/user.rb +0 -200
- data/lib/aws/iam/user_collection.rb +0 -133
- data/lib/aws/iam/user_group_collection.rb +0 -98
- data/lib/aws/iam/user_policy.rb +0 -90
- data/lib/aws/iam/user_policy_collection.rb +0 -45
- data/lib/aws/iam/virtual_mfa_device.rb +0 -139
- data/lib/aws/iam/virtual_mfa_device_collection.rb +0 -73
- data/lib/aws/import_export.rb +0 -73
- data/lib/aws/import_export/client.rb +0 -35
- data/lib/aws/import_export/config.rb +0 -19
- data/lib/aws/import_export/errors.rb +0 -22
- data/lib/aws/kinesis.rb +0 -53
- data/lib/aws/kinesis/client.rb +0 -35
- data/lib/aws/kinesis/config.rb +0 -18
- data/lib/aws/kinesis/errors.rb +0 -20
- data/lib/aws/ops_works.rb +0 -29
- data/lib/aws/ops_works/client.rb +0 -35
- data/lib/aws/ops_works/config.rb +0 -18
- data/lib/aws/ops_works/errors.rb +0 -20
- data/lib/aws/rails.rb +0 -195
- data/lib/aws/rds.rb +0 -70
- data/lib/aws/rds/client.rb +0 -42
- data/lib/aws/rds/config.rb +0 -18
- data/lib/aws/rds/db_instance.rb +0 -216
- data/lib/aws/rds/db_instance_collection.rb +0 -75
- data/lib/aws/rds/db_snapshot.rb +0 -163
- data/lib/aws/rds/db_snapshot_collection.rb +0 -89
- data/lib/aws/rds/errors.rb +0 -22
- data/lib/aws/record.rb +0 -139
- data/lib/aws/record/abstract_base.rb +0 -690
- data/lib/aws/record/attributes.rb +0 -388
- data/lib/aws/record/conversion.rb +0 -38
- data/lib/aws/record/dirty_tracking.rb +0 -287
- data/lib/aws/record/errors.rb +0 -143
- data/lib/aws/record/exceptions.rb +0 -51
- data/lib/aws/record/hash_model.rb +0 -204
- data/lib/aws/record/hash_model/attributes.rb +0 -195
- data/lib/aws/record/hash_model/finder_methods.rb +0 -172
- data/lib/aws/record/hash_model/scope.rb +0 -108
- data/lib/aws/record/model.rb +0 -453
- data/lib/aws/record/model/attributes.rb +0 -377
- data/lib/aws/record/model/finder_methods.rb +0 -232
- data/lib/aws/record/model/scope.rb +0 -212
- data/lib/aws/record/naming.rb +0 -31
- data/lib/aws/record/scope.rb +0 -203
- data/lib/aws/record/validations.rb +0 -694
- data/lib/aws/record/validator.rb +0 -246
- data/lib/aws/record/validators/acceptance.rb +0 -49
- data/lib/aws/record/validators/block.rb +0 -36
- data/lib/aws/record/validators/confirmation.rb +0 -41
- data/lib/aws/record/validators/count.rb +0 -106
- data/lib/aws/record/validators/exclusion.rb +0 -41
- data/lib/aws/record/validators/format.rb +0 -55
- data/lib/aws/record/validators/inclusion.rb +0 -54
- data/lib/aws/record/validators/length.rb +0 -105
- data/lib/aws/record/validators/method.rb +0 -31
- data/lib/aws/record/validators/numericality.rb +0 -136
- data/lib/aws/record/validators/presence.rb +0 -43
- data/lib/aws/redshift.rb +0 -51
- data/lib/aws/redshift/client.rb +0 -35
- data/lib/aws/redshift/config.rb +0 -18
- data/lib/aws/redshift/errors.rb +0 -22
- data/lib/aws/route_53.rb +0 -86
- data/lib/aws/route_53/change_batch.rb +0 -161
- data/lib/aws/route_53/change_info.rb +0 -72
- data/lib/aws/route_53/client.rb +0 -35
- data/lib/aws/route_53/config.rb +0 -18
- data/lib/aws/route_53/errors.rb +0 -22
- data/lib/aws/route_53/hosted_zone.rb +0 -111
- data/lib/aws/route_53/hosted_zone_collection.rb +0 -100
- data/lib/aws/route_53/resource_record_set.rb +0 -251
- data/lib/aws/route_53/resource_record_set_collection.rb +0 -110
- data/lib/aws/s3.rb +0 -156
- data/lib/aws/s3/access_control_list.rb +0 -265
- data/lib/aws/s3/acl_object.rb +0 -264
- data/lib/aws/s3/acl_options.rb +0 -204
- data/lib/aws/s3/bucket.rb +0 -742
- data/lib/aws/s3/bucket_collection.rb +0 -162
- data/lib/aws/s3/bucket_lifecycle_configuration.rb +0 -457
- data/lib/aws/s3/bucket_tag_collection.rb +0 -111
- data/lib/aws/s3/bucket_version_collection.rb +0 -79
- data/lib/aws/s3/cipher_io.rb +0 -120
- data/lib/aws/s3/client.rb +0 -1919
- data/lib/aws/s3/client/xml.rb +0 -259
- data/lib/aws/s3/config.rb +0 -48
- data/lib/aws/s3/cors_rule.rb +0 -108
- data/lib/aws/s3/cors_rule_collection.rb +0 -194
- data/lib/aws/s3/data_options.rb +0 -191
- data/lib/aws/s3/encryption_utils.rb +0 -146
- data/lib/aws/s3/errors.rb +0 -94
- data/lib/aws/s3/multipart_upload.rb +0 -351
- data/lib/aws/s3/multipart_upload_collection.rb +0 -76
- data/lib/aws/s3/object_collection.rb +0 -353
- data/lib/aws/s3/object_metadata.rb +0 -103
- data/lib/aws/s3/object_upload_collection.rb +0 -77
- data/lib/aws/s3/object_version.rb +0 -154
- data/lib/aws/s3/object_version_collection.rb +0 -89
- data/lib/aws/s3/paginated_collection.rb +0 -75
- data/lib/aws/s3/policy.rb +0 -74
- data/lib/aws/s3/prefix_and_delimiter_collection.rb +0 -47
- data/lib/aws/s3/prefixed_collection.rb +0 -85
- data/lib/aws/s3/presign_v4.rb +0 -127
- data/lib/aws/s3/presigned_post.rb +0 -554
- data/lib/aws/s3/request.rb +0 -62
- data/lib/aws/s3/s3_object.rb +0 -1781
- data/lib/aws/s3/tree.rb +0 -116
- data/lib/aws/s3/tree/branch_node.rb +0 -68
- data/lib/aws/s3/tree/child_collection.rb +0 -104
- data/lib/aws/s3/tree/leaf_node.rb +0 -94
- data/lib/aws/s3/tree/node.rb +0 -22
- data/lib/aws/s3/tree/parent.rb +0 -87
- data/lib/aws/s3/uploaded_part.rb +0 -82
- data/lib/aws/s3/uploaded_part_collection.rb +0 -84
- data/lib/aws/s3/website_configuration.rb +0 -102
- data/lib/aws/simple_db.rb +0 -218
- data/lib/aws/simple_db/attribute.rb +0 -156
- data/lib/aws/simple_db/attribute_collection.rb +0 -240
- data/lib/aws/simple_db/client.rb +0 -67
- data/lib/aws/simple_db/config.rb +0 -20
- data/lib/aws/simple_db/consistent_read_option.rb +0 -42
- data/lib/aws/simple_db/delete_attributes.rb +0 -62
- data/lib/aws/simple_db/domain.rb +0 -123
- data/lib/aws/simple_db/domain_collection.rb +0 -86
- data/lib/aws/simple_db/domain_metadata.rb +0 -110
- data/lib/aws/simple_db/errors.rb +0 -55
- data/lib/aws/simple_db/expect_condition_option.rb +0 -45
- data/lib/aws/simple_db/item.rb +0 -93
- data/lib/aws/simple_db/item_collection.rb +0 -654
- data/lib/aws/simple_db/item_data.rb +0 -73
- data/lib/aws/simple_db/put_attributes.rb +0 -60
- data/lib/aws/simple_email_service.rb +0 -430
- data/lib/aws/simple_email_service/client.rb +0 -37
- data/lib/aws/simple_email_service/config.rb +0 -18
- data/lib/aws/simple_email_service/email_address_collection.rb +0 -69
- data/lib/aws/simple_email_service/errors.rb +0 -22
- data/lib/aws/simple_email_service/identity.rb +0 -209
- data/lib/aws/simple_email_service/identity_collection.rb +0 -81
- data/lib/aws/simple_email_service/quotas.rb +0 -66
- data/lib/aws/simple_workflow.rb +0 -227
- data/lib/aws/simple_workflow/activity_task.rb +0 -178
- data/lib/aws/simple_workflow/activity_task_collection.rb +0 -123
- data/lib/aws/simple_workflow/activity_type.rb +0 -131
- data/lib/aws/simple_workflow/activity_type_collection.rb +0 -93
- data/lib/aws/simple_workflow/client.rb +0 -69
- data/lib/aws/simple_workflow/config.rb +0 -18
- data/lib/aws/simple_workflow/count.rb +0 -49
- data/lib/aws/simple_workflow/decision_task.rb +0 -603
- data/lib/aws/simple_workflow/decision_task_collection.rb +0 -225
- data/lib/aws/simple_workflow/domain.rb +0 -122
- data/lib/aws/simple_workflow/domain_collection.rb +0 -169
- data/lib/aws/simple_workflow/errors.rb +0 -20
- data/lib/aws/simple_workflow/history_event.rb +0 -276
- data/lib/aws/simple_workflow/history_event_collection.rb +0 -76
- data/lib/aws/simple_workflow/option_formatters.rb +0 -82
- data/lib/aws/simple_workflow/resource.rb +0 -94
- data/lib/aws/simple_workflow/type.rb +0 -89
- data/lib/aws/simple_workflow/type_collection.rb +0 -140
- data/lib/aws/simple_workflow/workflow_execution.rb +0 -384
- data/lib/aws/simple_workflow/workflow_execution_collection.rb +0 -617
- data/lib/aws/simple_workflow/workflow_type.rb +0 -179
- data/lib/aws/simple_workflow/workflow_type_collection.rb +0 -91
- data/lib/aws/sns.rb +0 -76
- data/lib/aws/sns/client.rb +0 -35
- data/lib/aws/sns/config.rb +0 -18
- data/lib/aws/sns/errors.rb +0 -22
- data/lib/aws/sns/has_delivery_policy.rb +0 -68
- data/lib/aws/sns/message.rb +0 -194
- data/lib/aws/sns/originators/from_auto_scaling.rb +0 -68
- data/lib/aws/sns/policy.rb +0 -47
- data/lib/aws/sns/subscription.rb +0 -165
- data/lib/aws/sns/subscription_collection.rb +0 -78
- data/lib/aws/sns/topic.rb +0 -403
- data/lib/aws/sns/topic_collection.rb +0 -62
- data/lib/aws/sns/topic_subscription_collection.rb +0 -54
- data/lib/aws/sqs.rb +0 -80
- data/lib/aws/sqs/client.rb +0 -53
- data/lib/aws/sqs/config.rb +0 -20
- data/lib/aws/sqs/errors.rb +0 -125
- data/lib/aws/sqs/policy.rb +0 -48
- data/lib/aws/sqs/queue.rb +0 -843
- data/lib/aws/sqs/queue_collection.rb +0 -182
- data/lib/aws/sqs/received_message.rb +0 -182
- data/lib/aws/sqs/received_sns_message.rb +0 -116
- data/lib/aws/storage_gateway.rb +0 -72
- data/lib/aws/storage_gateway/client.rb +0 -42
- data/lib/aws/storage_gateway/config.rb +0 -18
- data/lib/aws/storage_gateway/errors.rb +0 -22
- data/lib/aws/sts.rb +0 -164
- data/lib/aws/sts/client.rb +0 -46
- data/lib/aws/sts/config.rb +0 -18
- data/lib/aws/sts/errors.rb +0 -22
- data/lib/aws/sts/federated_session.rb +0 -56
- data/lib/aws/sts/policy.rb +0 -30
- data/lib/aws/sts/session.rb +0 -48
- data/lib/aws/support.rb +0 -29
- data/lib/aws/support/client.rb +0 -35
- data/lib/aws/support/config.rb +0 -18
- data/lib/aws/support/errors.rb +0 -20
- data/lib/aws/version.rb +0 -17
- data/rails/init.rb +0 -15
@@ -1,82 +0,0 @@
|
|
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 'base64'
|
16
|
-
|
17
|
-
module AWS
|
18
|
-
module Core
|
19
|
-
module Options
|
20
|
-
|
21
|
-
# Given a hash of serialization rules, a JSONSerializer can convert
|
22
|
-
# a hash of request options into a JSON document. The request options
|
23
|
-
# are validated before returning JSON.
|
24
|
-
class JSONSerializer
|
25
|
-
|
26
|
-
# @param [Hash] rules A hash of option rules to validate against.
|
27
|
-
# @param [String,nil] payload_param
|
28
|
-
def initialize rules, payload_param
|
29
|
-
@payload_param = payload_param
|
30
|
-
@rules = @payload_param ? rules[@payload_param][:members] : rules
|
31
|
-
end
|
32
|
-
|
33
|
-
# @return [String] Returns the name of the API operation.
|
34
|
-
attr_reader :operation_name
|
35
|
-
|
36
|
-
# @return [String]
|
37
|
-
attr_reader :namespace
|
38
|
-
|
39
|
-
# @return [Hash]
|
40
|
-
attr_reader :rules
|
41
|
-
|
42
|
-
# @overload serialize!(request_options)
|
43
|
-
# @param [Hash] request_options A hash of already validated
|
44
|
-
# request options with normalized values.
|
45
|
-
# @return [String] Returns an string of the request parameters
|
46
|
-
# serialized into XML.
|
47
|
-
def serialize request_options
|
48
|
-
request_options = request_options[@payload_param] if @payload_param
|
49
|
-
data = normalize_keys(request_options, rules)
|
50
|
-
if rules.any?{|k,v| v[:location] == 'body' }
|
51
|
-
data = data.values.first
|
52
|
-
end
|
53
|
-
JSON.pretty_generate(data)
|
54
|
-
end
|
55
|
-
|
56
|
-
protected
|
57
|
-
|
58
|
-
def normalize_keys values, rules
|
59
|
-
values.inject({}) do |h,(k,v)|
|
60
|
-
child_rules = rules[k]
|
61
|
-
child_name = child_rules[:name] || Inflection.class_name(k.to_s)
|
62
|
-
h.merge(child_name => normalize_value(v, child_rules))
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
def normalize_value value, rules
|
67
|
-
case rules[:type]
|
68
|
-
when :hash then normalize_keys(value, rules[:members])
|
69
|
-
when :array then value.map{|v| normalize_value(v, rules[:members]) }
|
70
|
-
when :map
|
71
|
-
value.inject({}) do |h,(k,v)|
|
72
|
-
h.merge(k => normalize_value(v, rules[:members]))
|
73
|
-
end
|
74
|
-
when :blob then Base64.encode64(value.read).strip
|
75
|
-
else value
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
@@ -1,155 +0,0 @@
|
|
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
|
-
module Options
|
17
|
-
|
18
|
-
# Given a hash of validation rules, a validator validate request
|
19
|
-
# options. Validations support:
|
20
|
-
#
|
21
|
-
# * rejecting unknown options
|
22
|
-
# * ensuring presence of required options
|
23
|
-
# * validating expected option types (e.g. hash, array, string,
|
24
|
-
# integer, etc).
|
25
|
-
#
|
26
|
-
# After validating, a hash of request options is returned with
|
27
|
-
# with normalized values (with converted types).
|
28
|
-
class Validator
|
29
|
-
|
30
|
-
# @param [Hash] rules A hash of option rules to validate against.
|
31
|
-
def initialize rules
|
32
|
-
@rules = rules
|
33
|
-
end
|
34
|
-
|
35
|
-
# @return [Hash]
|
36
|
-
attr_reader :rules
|
37
|
-
|
38
|
-
# @overload validate!(request_options)
|
39
|
-
# @param [Hash] request_options The hash of options to validate.
|
40
|
-
# @raise [ArgumentError] Raised when the options do not validate.
|
41
|
-
# @return [Hash]
|
42
|
-
def validate! request_options, rules = @rules
|
43
|
-
|
44
|
-
# Verify all required options are present.
|
45
|
-
rules.each_pair do |opt_name, opt_rules|
|
46
|
-
if opt_rules[:required]
|
47
|
-
unless request_options.key?(opt_name)
|
48
|
-
raise ArgumentError, "missing required option #{opt_name.inspect}"
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
request_options.inject({}) do |options, (opt_name, value)|
|
54
|
-
|
55
|
-
# Ensure this is a valid/accepted option
|
56
|
-
unless rules.key?(opt_name)
|
57
|
-
raise ArgumentError, "unexpected option #{opt_name.inspect}"
|
58
|
-
end
|
59
|
-
|
60
|
-
# Validate and convert the value
|
61
|
-
valid_value = validate_value(rules[opt_name], value, opt_name)
|
62
|
-
|
63
|
-
options.merge(opt_name => valid_value)
|
64
|
-
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
protected
|
69
|
-
|
70
|
-
# Proxies calls to the correct validation method based on the
|
71
|
-
# rules[:type].
|
72
|
-
def validate_value *args
|
73
|
-
send("validate_#{args.first[:type]}", *args)
|
74
|
-
end
|
75
|
-
|
76
|
-
# Ensures the value is a hash and validates the hash context.
|
77
|
-
def validate_hash rules, value, opt_name, context = nil
|
78
|
-
unless value.respond_to?(:to_hash)
|
79
|
-
format_error('hash value', opt_name, context)
|
80
|
-
end
|
81
|
-
validate!(value.to_hash, rules[:members])
|
82
|
-
end
|
83
|
-
|
84
|
-
def validate_map rules, value, opt_name, context = nil
|
85
|
-
unless value.respond_to?(:to_hash)
|
86
|
-
format_error('hash value', opt_name, context)
|
87
|
-
end
|
88
|
-
value.inject({}) do |values,(k,v)|
|
89
|
-
context = "member #{k.inspect} of :#{opt_name}"
|
90
|
-
values[k] = validate_value(rules[:members], v, opt_name, context)
|
91
|
-
values
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
# Ensures the value is an array (or at least enumerable) and
|
96
|
-
# that the yielded values are valid.
|
97
|
-
def validate_array rules, value, opt_name, context = nil
|
98
|
-
unless value.respond_to?(:each)
|
99
|
-
format_error('enumerable value', opt_name, context)
|
100
|
-
end
|
101
|
-
values = []
|
102
|
-
value.each do |v|
|
103
|
-
context = "member #{values.size} of :#{opt_name}"
|
104
|
-
values << validate_value(rules[:members], v, opt_name, context)
|
105
|
-
end
|
106
|
-
values
|
107
|
-
end
|
108
|
-
|
109
|
-
# Ensures the value is a string.
|
110
|
-
def validate_string rules, value, opt_name, context = nil
|
111
|
-
|
112
|
-
unless value.respond_to?(:to_str)
|
113
|
-
format_error('string value', opt_name, context)
|
114
|
-
end
|
115
|
-
|
116
|
-
rules[:lstrip] ?
|
117
|
-
value.to_str.sub(/^#{rules[:lstrip]}/, '') :
|
118
|
-
value.to_str
|
119
|
-
end
|
120
|
-
|
121
|
-
# Ensures the value is a boolean.
|
122
|
-
def validate_boolean rules, value, opt_name, context = nil
|
123
|
-
unless [true, false].include?(value)
|
124
|
-
format_error('true or false', opt_name, context)
|
125
|
-
end
|
126
|
-
value
|
127
|
-
end
|
128
|
-
|
129
|
-
# Ensures the value is an integer.
|
130
|
-
def validate_integer rules, value, opt_name, context = nil
|
131
|
-
unless value.respond_to?(:to_int)
|
132
|
-
format_error('integer value', opt_name, context)
|
133
|
-
end
|
134
|
-
value.to_int
|
135
|
-
end
|
136
|
-
|
137
|
-
# Ensures the value is a timestamp.
|
138
|
-
def validate_timestamp rules, value, opt_name, context = nil
|
139
|
-
# TODO : add validation to timestamps values
|
140
|
-
value.to_s
|
141
|
-
end
|
142
|
-
|
143
|
-
def validate_blob rules, value, opt_name, context = nil
|
144
|
-
value
|
145
|
-
end
|
146
|
-
|
147
|
-
def format_error description, opt_name, context
|
148
|
-
context = context || "option :#{opt_name}"
|
149
|
-
raise ArgumentError, "expected #{description} for #{context}"
|
150
|
-
end
|
151
|
-
|
152
|
-
end
|
153
|
-
end
|
154
|
-
end
|
155
|
-
end
|
@@ -1,118 +0,0 @@
|
|
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 'nokogiri'
|
15
|
-
|
16
|
-
module AWS
|
17
|
-
module Core
|
18
|
-
module Options
|
19
|
-
|
20
|
-
# Given a hash of serialization rules, an XMLSerializer can convert
|
21
|
-
# a hash of request options into XML. The request options are
|
22
|
-
# validated before returning XML.
|
23
|
-
class XMLSerializer
|
24
|
-
|
25
|
-
# @param [String] namespace
|
26
|
-
# @param [String] operation_name
|
27
|
-
# @param [Hash] operation
|
28
|
-
def initialize namespace, operation_name, operation
|
29
|
-
@namespace = namespace
|
30
|
-
@operation_name = operation_name
|
31
|
-
@rules = operation[:inputs]
|
32
|
-
@http = operation[:http]
|
33
|
-
@validator = Validator.new(rules)
|
34
|
-
end
|
35
|
-
|
36
|
-
# @return [String] Returns the name of the API operation.
|
37
|
-
attr_reader :operation_name
|
38
|
-
|
39
|
-
# @return [String]
|
40
|
-
attr_reader :namespace
|
41
|
-
|
42
|
-
# @return [Hash]
|
43
|
-
attr_reader :rules
|
44
|
-
|
45
|
-
# @return [Hash,nil]
|
46
|
-
attr_reader :http
|
47
|
-
|
48
|
-
# @return [Validator]
|
49
|
-
attr_reader :validator
|
50
|
-
|
51
|
-
# @overload serialize!(request_options)
|
52
|
-
# @param [Hash] request_options A hash of already validated
|
53
|
-
# request options with normalized values.
|
54
|
-
# @return [String] Returns an string of the request parameters
|
55
|
-
# serialized into XML.
|
56
|
-
def serialize request_options
|
57
|
-
if http && http[:request_payload]
|
58
|
-
payload = http[:request_payload]
|
59
|
-
root_node_name = rules[payload][:name]
|
60
|
-
params = request_options[payload]
|
61
|
-
rules = self.rules[payload][:members]
|
62
|
-
else
|
63
|
-
root_node_name = "#{operation_name}Request"
|
64
|
-
params = request_options
|
65
|
-
rules = self.rules
|
66
|
-
end
|
67
|
-
xml = Nokogiri::XML::Builder.new
|
68
|
-
xml.send(root_node_name, :xmlns => namespace) do |xml|
|
69
|
-
hash_members_xml(params, rules, xml)
|
70
|
-
end
|
71
|
-
xml.doc.root.to_xml
|
72
|
-
end
|
73
|
-
|
74
|
-
protected
|
75
|
-
|
76
|
-
def to_xml builder, opt_name, rules, value
|
77
|
-
|
78
|
-
xml_name = rules[:name]
|
79
|
-
xml_name ||= opt_name.is_a?(String) ?
|
80
|
-
opt_name : Inflection.class_name(opt_name.to_s)
|
81
|
-
|
82
|
-
case value
|
83
|
-
when Hash
|
84
|
-
|
85
|
-
builder.send(xml_name) do |builder|
|
86
|
-
hash_members_xml(value, rules[:members], builder)
|
87
|
-
end
|
88
|
-
|
89
|
-
when Array
|
90
|
-
builder.send(xml_name) do
|
91
|
-
value.each do |member_value|
|
92
|
-
to_xml(builder, 'member', rules[:members], member_value)
|
93
|
-
end
|
94
|
-
end
|
95
|
-
else builder.send(xml_name, value)
|
96
|
-
end
|
97
|
-
|
98
|
-
end
|
99
|
-
|
100
|
-
def hash_members_xml hash, rules, builder
|
101
|
-
xml_ordered_members(rules).each do |member_name|
|
102
|
-
if hash.key?(member_name)
|
103
|
-
value = hash[member_name]
|
104
|
-
to_xml(builder, member_name, rules[member_name], value)
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
def xml_ordered_members members
|
110
|
-
members.inject([]) do |list,(member_name, member)|
|
111
|
-
list << [member[:position] || 0, member_name]
|
112
|
-
end.sort_by(&:first).map(&:last)
|
113
|
-
end
|
114
|
-
|
115
|
-
end
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
data/lib/aws/core/page_result.rb
DELETED
@@ -1,75 +0,0 @@
|
|
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
|
-
class PageResult < Array
|
17
|
-
|
18
|
-
# @return [Collection] Returns the collection that was used to
|
19
|
-
# populated this page of results.
|
20
|
-
attr_reader :collection
|
21
|
-
|
22
|
-
# @return [Integer] Returns the maximum number of results per page.
|
23
|
-
# The final page in a collection may return fewer than `:per_page`
|
24
|
-
# items (e.g. `:per_page` is 10 and there are only 7 items).
|
25
|
-
attr_reader :per_page
|
26
|
-
|
27
|
-
# @return [String] An opaque token that can be passed the #page method
|
28
|
-
# of the collection that returned this page of results. This next
|
29
|
-
# token behaves as a pseudo offset. If `next_token` is `nil` then
|
30
|
-
# there are no more results for the collection.
|
31
|
-
attr_reader :next_token
|
32
|
-
|
33
|
-
# @param [Collection] collection The collection that was used to
|
34
|
-
# request this page of results. The collection should respond to
|
35
|
-
# #page and accept a :next_token option.
|
36
|
-
#
|
37
|
-
# @param [Array] items An array of result items that represent a
|
38
|
-
# page of results.
|
39
|
-
#
|
40
|
-
# @param [Integer] per_page The number of requested items for this
|
41
|
-
# page of results. If the count of items is smaller than `per_page`
|
42
|
-
# then this is the last page of results.
|
43
|
-
#
|
44
|
-
# @param [String] next_token (nil) A token that can be passed to the
|
45
|
-
#
|
46
|
-
def initialize collection, items, per_page, next_token
|
47
|
-
@collection = collection
|
48
|
-
@per_page = per_page
|
49
|
-
@next_token = next_token
|
50
|
-
super(items)
|
51
|
-
end
|
52
|
-
|
53
|
-
# @return [PageResult]
|
54
|
-
# @raise [RuntimeError] Raises a runtime error when called against
|
55
|
-
# a collection that has no more results (i.e. #last_page? == true).
|
56
|
-
def next_page
|
57
|
-
if last_page?
|
58
|
-
raise 'unable to get the next page, already at the last page'
|
59
|
-
end
|
60
|
-
collection.page(:per_page => per_page, :next_token => next_token)
|
61
|
-
end
|
62
|
-
|
63
|
-
# @return [Boolean] Returns `true` if this is the last page of results.
|
64
|
-
def last_page?
|
65
|
-
next_token.nil?
|
66
|
-
end
|
67
|
-
|
68
|
-
# @return [Boolean] Returns `true` if there are more pages of results.
|
69
|
-
def more?
|
70
|
-
!!next_token
|
71
|
-
end
|
72
|
-
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
data/lib/aws/core/policy.rb
DELETED
@@ -1,942 +0,0 @@
|
|
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 'uuidtools'
|
15
|
-
require 'date'
|
16
|
-
require 'json'
|
17
|
-
|
18
|
-
module AWS
|
19
|
-
module Core
|
20
|
-
|
21
|
-
# Represents an access policy for AWS operations and resources. For example:
|
22
|
-
#
|
23
|
-
# policy = Policy.new
|
24
|
-
# policy.allow(
|
25
|
-
# :actions => ['s3:PutObject'],
|
26
|
-
# :resources => "arn:aws:s3:::mybucket/mykey/*",
|
27
|
-
# :principals => :any
|
28
|
-
# ).where(:acl).is("public-read")
|
29
|
-
#
|
30
|
-
# policy.to_json # => '{ "Version":"2008-10-17", ...'
|
31
|
-
#
|
32
|
-
# @see #initialize More ways to construct a policy.
|
33
|
-
# @see http://docs.amazonwebservices.com/AmazonS3/latest/dev/AccessPolicyLanguage_UseCases_s3_a.html Example policies (in JSON).
|
34
|
-
class Policy
|
35
|
-
|
36
|
-
# @see Statement
|
37
|
-
# @return [Array] An array of policy statements.
|
38
|
-
attr_reader :statements
|
39
|
-
|
40
|
-
# @return [String] The version of the policy language used in this
|
41
|
-
# policy object.
|
42
|
-
attr_reader :version
|
43
|
-
|
44
|
-
# @return [String] A unique ID for the policy.
|
45
|
-
attr_reader :id
|
46
|
-
|
47
|
-
class Statement; end
|
48
|
-
|
49
|
-
# Constructs a policy. There are a few different ways to
|
50
|
-
# build a policy:
|
51
|
-
#
|
52
|
-
# * With hash arguments:
|
53
|
-
#
|
54
|
-
# Policy.new(:statements => [
|
55
|
-
# {
|
56
|
-
# :effect => :allow,
|
57
|
-
# :actions => :all,
|
58
|
-
# :principals => ["abc123"],
|
59
|
-
# :resources => "mybucket/mykey"
|
60
|
-
# }
|
61
|
-
# ])
|
62
|
-
#
|
63
|
-
# * From a JSON policy document:
|
64
|
-
#
|
65
|
-
# Policy.from_json(policy_json_string)
|
66
|
-
#
|
67
|
-
# * With a block:
|
68
|
-
#
|
69
|
-
# Policy.new do |policy|
|
70
|
-
# policy.allow(
|
71
|
-
# :actions => ['s3:PutObject'],
|
72
|
-
# :resources => "arn:aws:s3:::mybucket/mykey/*",
|
73
|
-
# :principals => :any
|
74
|
-
# ).where(:acl).is("public-read")
|
75
|
-
# end
|
76
|
-
#
|
77
|
-
def initialize(opts = {})
|
78
|
-
@statements = opts.values_at(:statements, "Statement").select do |a|
|
79
|
-
a.kind_of?(Array)
|
80
|
-
end.flatten.map do |stmt|
|
81
|
-
self.class::Statement.new(stmt)
|
82
|
-
end
|
83
|
-
|
84
|
-
if opts.has_key?(:id) or opts.has_key?("Id")
|
85
|
-
@id = opts[:id] || opts["Id"]
|
86
|
-
else
|
87
|
-
@id = UUIDTools::UUID.timestamp_create.to_s.tr('-','')
|
88
|
-
end
|
89
|
-
if opts.has_key?(:version) or opts.has_key?("Version")
|
90
|
-
@version = opts[:version] || opts["Version"]
|
91
|
-
else
|
92
|
-
@version = "2008-10-17"
|
93
|
-
end
|
94
|
-
|
95
|
-
yield(self) if block_given?
|
96
|
-
end
|
97
|
-
|
98
|
-
# @return [Boolean] Returns true if the two policies are the same.
|
99
|
-
def ==(other)
|
100
|
-
if other.kind_of?(Core::Policy)
|
101
|
-
self.hash_without_ids == other.hash_without_ids
|
102
|
-
else
|
103
|
-
false
|
104
|
-
end
|
105
|
-
end
|
106
|
-
alias_method :eql?, :==
|
107
|
-
|
108
|
-
# Removes the ids from the policy and its statements for the purpose
|
109
|
-
# of comparing two policies for equivilence.
|
110
|
-
# @return [Hash] Returns the policy as a hash with no ids
|
111
|
-
# @api private
|
112
|
-
def hash_without_ids
|
113
|
-
hash = self.to_h
|
114
|
-
hash.delete('Id')
|
115
|
-
hash['Statement'].each do |statement|
|
116
|
-
statement.delete('Sid')
|
117
|
-
end
|
118
|
-
hash
|
119
|
-
end
|
120
|
-
protected :hash_without_ids
|
121
|
-
|
122
|
-
# Returns a hash representation of the policy. The following
|
123
|
-
# statements are equivalent:
|
124
|
-
#
|
125
|
-
# policy.to_h.to_json
|
126
|
-
# policy.to_json
|
127
|
-
#
|
128
|
-
# @return [Hash]
|
129
|
-
def to_h
|
130
|
-
{
|
131
|
-
"Version" => version,
|
132
|
-
"Id" => id,
|
133
|
-
"Statement" => statements.map { |st| st.to_h }
|
134
|
-
}
|
135
|
-
end
|
136
|
-
|
137
|
-
# @return [String] a JSON representation of the policy.
|
138
|
-
def to_json
|
139
|
-
to_h.to_json
|
140
|
-
end
|
141
|
-
|
142
|
-
# Constructs a policy from a JSON representation.
|
143
|
-
# @see #initialize
|
144
|
-
# @return [Policy] Returns a Policy object constructed by parsing
|
145
|
-
# the passed JSON policy.
|
146
|
-
def self.from_json(json)
|
147
|
-
new(JSON.parse(json))
|
148
|
-
end
|
149
|
-
|
150
|
-
# Convenient syntax for expressing operators in statement
|
151
|
-
# condition blocks. For example, the following:
|
152
|
-
#
|
153
|
-
# policy.allow.where(:s3_prefix).not("forbidden").
|
154
|
-
# where(:current_time).lte(Date.today+1)
|
155
|
-
#
|
156
|
-
# is equivalent to:
|
157
|
-
#
|
158
|
-
# conditions = Policy::ConditionBlock.new
|
159
|
-
# conditions.add(:not, :s3_prefix, "forbidden")
|
160
|
-
# conditions.add(:lte, :current_time, Date.today+1)
|
161
|
-
# policy.allow(:conditions => conditions)
|
162
|
-
#
|
163
|
-
# @see ConditionBlock#add
|
164
|
-
class OperatorBuilder
|
165
|
-
|
166
|
-
# @api private
|
167
|
-
def initialize(condition_builder, key)
|
168
|
-
@condition_builder = condition_builder
|
169
|
-
@key = key
|
170
|
-
end
|
171
|
-
|
172
|
-
def method_missing(m, *values)
|
173
|
-
@condition_builder.conditions.add(m, @key, *values)
|
174
|
-
@condition_builder
|
175
|
-
end
|
176
|
-
|
177
|
-
end
|
178
|
-
|
179
|
-
# Convenient syntax for adding conditions to a statement.
|
180
|
-
# @see Policy#allow
|
181
|
-
# @see Policy#deny
|
182
|
-
class ConditionBuilder
|
183
|
-
|
184
|
-
# @return [Array] Returns an array of policy conditions.
|
185
|
-
attr_reader :conditions
|
186
|
-
|
187
|
-
# @api private
|
188
|
-
def initialize(conditions)
|
189
|
-
@conditions = conditions
|
190
|
-
end
|
191
|
-
|
192
|
-
# Adds a condition for the given key. For example:
|
193
|
-
#
|
194
|
-
# policy.allow(...).where(:current_time).lte(Date.today + 1)
|
195
|
-
#
|
196
|
-
# @return [OperatorBuilder]
|
197
|
-
def where(key, operator = nil, *values)
|
198
|
-
if operator
|
199
|
-
@conditions.add(operator, key, *values)
|
200
|
-
self
|
201
|
-
else
|
202
|
-
OperatorBuilder.new(self, key)
|
203
|
-
end
|
204
|
-
end
|
205
|
-
|
206
|
-
end
|
207
|
-
|
208
|
-
# Convenience method for constructing a new statement with the
|
209
|
-
# "Allow" effect and adding it to the policy. For example:
|
210
|
-
#
|
211
|
-
# policy.allow(
|
212
|
-
# :actions => [:put_object],
|
213
|
-
# :principals => :any,
|
214
|
-
# :resources => "mybucket/mykey/*").
|
215
|
-
# where(:acl).is("public-read")
|
216
|
-
#
|
217
|
-
# @option (see Statement#initialize)
|
218
|
-
# @see Statement#initialize
|
219
|
-
# @return [ConditionBuilder]
|
220
|
-
def allow(opts = {})
|
221
|
-
stmt = self.class::Statement.new(opts.merge(:effect => :allow))
|
222
|
-
statements << stmt
|
223
|
-
ConditionBuilder.new(stmt.conditions)
|
224
|
-
end
|
225
|
-
|
226
|
-
# Convenience method for constructing a new statement with the
|
227
|
-
# "Deny" effect and adding it to the policy. For example:
|
228
|
-
#
|
229
|
-
# policy.deny(
|
230
|
-
# :actions => [:put_object],
|
231
|
-
# :principals => :any,
|
232
|
-
# :resources => "mybucket/mykey/*"
|
233
|
-
# ).where(:acl).is("public-read")
|
234
|
-
#
|
235
|
-
# @param (see Statement#initialize)
|
236
|
-
# @see Statement#initialize
|
237
|
-
# @return [ConditionBuilder]
|
238
|
-
def deny(opts = {})
|
239
|
-
stmt = self.class::Statement.new(opts.merge(:effect => :deny))
|
240
|
-
statements << stmt
|
241
|
-
ConditionBuilder.new(stmt.conditions)
|
242
|
-
end
|
243
|
-
|
244
|
-
# Represents the condition block of a policy. In JSON,
|
245
|
-
# condition blocks look like this:
|
246
|
-
#
|
247
|
-
# { "StringLike": { "s3:prefix": ["photos/*", "photos.html"] } }
|
248
|
-
#
|
249
|
-
# ConditionBlock lets you specify conditions like the above
|
250
|
-
# example using the add method, for example:
|
251
|
-
#
|
252
|
-
# conditions.add(:like, :s3_prefix, "photos/*", "photos.html")
|
253
|
-
#
|
254
|
-
# See the add method documentation for more details about how
|
255
|
-
# to specify keys and operators.
|
256
|
-
#
|
257
|
-
# This class also provides a convenient way to query a
|
258
|
-
# condition block to see what operators, keys, and values it
|
259
|
-
# has. For example, consider the following condition block
|
260
|
-
# (in JSON):
|
261
|
-
#
|
262
|
-
# {
|
263
|
-
# "StringEquals": {
|
264
|
-
# "s3:prefix": "photos/index.html"
|
265
|
-
# },
|
266
|
-
# "DateEquals": {
|
267
|
-
# "aws:CurrentTime": ["2010-10-12", "2011-01-02"]
|
268
|
-
# },
|
269
|
-
# "NumericEquals": {
|
270
|
-
# "s3:max-keys": 10
|
271
|
-
# }
|
272
|
-
# }
|
273
|
-
#
|
274
|
-
# You can get access to the condition data using #[], #keys,
|
275
|
-
# #operators, and #values -- for example:
|
276
|
-
#
|
277
|
-
# conditions["DateEquals"]["aws:CurrentTime"].values
|
278
|
-
# # => ["2010-10-12", "2011-01-02"]
|
279
|
-
#
|
280
|
-
# You can also perform more sophisticated queries, like this
|
281
|
-
# one:
|
282
|
-
#
|
283
|
-
# conditions[:is].each do |equality_conditions|
|
284
|
-
# equality_conditions.keys.each do |key|
|
285
|
-
# puts("#{key} may be any of: " +
|
286
|
-
# equality_conditions[key].values.join(" ")
|
287
|
-
# end
|
288
|
-
# end
|
289
|
-
#
|
290
|
-
# This would print the following lines:
|
291
|
-
#
|
292
|
-
# s3:prefix may be any of: photos/index.html
|
293
|
-
# aws:CurrentTime may be any of: 2010-10-12 2011-01-02
|
294
|
-
# s3:max-keys may be any of: 10
|
295
|
-
#
|
296
|
-
class ConditionBlock
|
297
|
-
|
298
|
-
# @api private
|
299
|
-
def initialize(conditions = {})
|
300
|
-
# filter makes a copy
|
301
|
-
@conditions = filter_conditions(conditions)
|
302
|
-
end
|
303
|
-
|
304
|
-
# Adds a condition to the block. This method defines a
|
305
|
-
# convenient set of abbreviations for operators based on the
|
306
|
-
# type of value passed in. For example:
|
307
|
-
#
|
308
|
-
# conditions.add(:is, :secure_transport, true)
|
309
|
-
#
|
310
|
-
# Maps to:
|
311
|
-
#
|
312
|
-
# { "Bool": { "aws:SecureTransport": true } }
|
313
|
-
#
|
314
|
-
# While:
|
315
|
-
#
|
316
|
-
# conditions.add(:is, :s3_prefix, "photos/")
|
317
|
-
#
|
318
|
-
# Maps to:
|
319
|
-
#
|
320
|
-
# { "StringEquals": { "s3:prefix": "photos/" } }
|
321
|
-
#
|
322
|
-
# The following list shows which operators are accepted as
|
323
|
-
# symbols and how they are represented in the JSON policy:
|
324
|
-
#
|
325
|
-
# * `:is` (StringEquals, NumericEquals, DateEquals, or Bool)
|
326
|
-
# * `:like` (StringLike)
|
327
|
-
# * `:not_like` (StringNotLike)
|
328
|
-
# * `:not` (StringNotEquals, NumericNotEquals, or DateNotEquals)
|
329
|
-
# * `:greater_than`, `:gt` (NumericGreaterThan or DateGreaterThan)
|
330
|
-
# * `:greater_than_equals`, `:gte`
|
331
|
-
# (NumericGreaterThanEquals or DateGreaterThanEquals)
|
332
|
-
# * `:less_than`, `:lt` (NumericLessThan or DateLessThan)
|
333
|
-
# * `:less_than_equals`, `:lte`
|
334
|
-
# (NumericLessThanEquals or DateLessThanEquals)
|
335
|
-
# * `:is_ip_address` (IpAddress)
|
336
|
-
# * `:not_ip_address` (NotIpAddress)
|
337
|
-
# * `:is_arn` (ArnEquals)
|
338
|
-
# * `:not_arn` (ArnNotEquals)
|
339
|
-
# * `:is_arn_like` (ArnLike)
|
340
|
-
# * `:not_arn_like` (ArnNotLike)
|
341
|
-
#
|
342
|
-
# @param [Symbol or String] operator The operator used to
|
343
|
-
# compare the key with the value. See above for valid
|
344
|
-
# values and their interpretations.
|
345
|
-
#
|
346
|
-
# @param [Symbol or String] key The key to compare. Symbol
|
347
|
-
# keys are inflected to match AWS conventions. By
|
348
|
-
# default, the key is assumed to be in the "aws"
|
349
|
-
# namespace, but if you prefix the symbol name with "s3_"
|
350
|
-
# it will be sent in the "s3" namespace. For example,
|
351
|
-
# `:s3_prefix` is sent as "s3:prefix" while
|
352
|
-
# `:secure_transport` is sent as "aws:SecureTransport".
|
353
|
-
# See
|
354
|
-
# http://docs.amazonwebservices.com/AmazonS3/latest/dev/UsingResOpsConditions.html
|
355
|
-
# for a list of the available keys for each action in S3.
|
356
|
-
#
|
357
|
-
# @param [Mixed] values The value to compare against.
|
358
|
-
# This can be:
|
359
|
-
# * a String
|
360
|
-
# * a number
|
361
|
-
# * a Date, DateTime, or Time
|
362
|
-
# * a boolean value
|
363
|
-
# This method does not attempt to validate that the values
|
364
|
-
# are valid for the operators or keys they are used with.
|
365
|
-
#
|
366
|
-
def add(operator, key, *values)
|
367
|
-
if operator.kind_of?(Symbol)
|
368
|
-
converted_values = values.map { |v| convert_value(v) }
|
369
|
-
else
|
370
|
-
converted_values = values
|
371
|
-
end
|
372
|
-
operator = translate_operator(operator, values.first)
|
373
|
-
op = (@conditions[operator] ||= {})
|
374
|
-
raise "duplicate #{operator} conditions for #{key}" if op[key]
|
375
|
-
op[translate_key(key)] = converted_values
|
376
|
-
end
|
377
|
-
|
378
|
-
# @api private
|
379
|
-
def to_h
|
380
|
-
@conditions
|
381
|
-
end
|
382
|
-
|
383
|
-
# Filters the conditions described in the block, returning a
|
384
|
-
# new ConditionBlock that contains only the matching
|
385
|
-
# conditions. Each argument is matched against either the
|
386
|
-
# keys or the operators in the block, and you can specify
|
387
|
-
# the key or operator in any way that's valid for the #add
|
388
|
-
# method. Some examples:
|
389
|
-
#
|
390
|
-
# # all conditions using the StringLike operator
|
391
|
-
# conditions["StringLike"]
|
392
|
-
#
|
393
|
-
# # all conditions using StringEquals, DateEquals, NumericEquals, or Bool
|
394
|
-
# conditions[:is]
|
395
|
-
#
|
396
|
-
# # all conditions on the s3:prefix key
|
397
|
-
# conditions["s3:prefix"]
|
398
|
-
#
|
399
|
-
# # all conditions on the aws:CurrentTime key
|
400
|
-
# conditions[:current_time]
|
401
|
-
#
|
402
|
-
# Multiple conditions are ANDed together, so the following
|
403
|
-
# are equivalent:
|
404
|
-
#
|
405
|
-
# conditions[:s3_prefix][:is]
|
406
|
-
# conditions[:is][:s3_prefix]
|
407
|
-
# conditions[:s3_prefix, :is]
|
408
|
-
#
|
409
|
-
# @see #add
|
410
|
-
# @return [ConditionBlock] A new set of conditions filtered by the
|
411
|
-
# given conditions.
|
412
|
-
def [](*args)
|
413
|
-
filtered = @conditions
|
414
|
-
args.each do |filter|
|
415
|
-
type = valid_operator?(filter) ? nil : :key
|
416
|
-
filtered = filter_conditions(filtered) do |op, key, value|
|
417
|
-
(match, type) = match_triple(filter, type, op, key, value)
|
418
|
-
match
|
419
|
-
end
|
420
|
-
end
|
421
|
-
self.class.new(filtered)
|
422
|
-
end
|
423
|
-
|
424
|
-
# @return [Array] Returns an array of operators used in this block.
|
425
|
-
def operators
|
426
|
-
@conditions.keys
|
427
|
-
end
|
428
|
-
|
429
|
-
# @return [Array] Returns an array of unique keys used in the block.
|
430
|
-
def keys
|
431
|
-
@conditions.values.map do |keys|
|
432
|
-
keys.keys if keys
|
433
|
-
end.compact.flatten.uniq
|
434
|
-
end
|
435
|
-
|
436
|
-
# Returns all values used in the block. Note that the
|
437
|
-
# values may not all be from the same condition; for example:
|
438
|
-
#
|
439
|
-
# conditions.add(:like, :user_agent, "mozilla", "explorer")
|
440
|
-
# conditions.add(:lt, :s3_max_keys, 12)
|
441
|
-
# conditions.values # => ["mozilla", "explorer", 12]
|
442
|
-
#
|
443
|
-
# @return [Array] Returns an array of values used in this condition block.
|
444
|
-
def values
|
445
|
-
@conditions.values.map do |keys|
|
446
|
-
keys.values
|
447
|
-
end.compact.flatten
|
448
|
-
end
|
449
|
-
|
450
|
-
# @api private
|
451
|
-
protected
|
452
|
-
def match_triple(filter, type, op, key, value)
|
453
|
-
value = [value].flatten.first
|
454
|
-
if type
|
455
|
-
target = (type == :operator ? op : key)
|
456
|
-
match = send("match_#{type}", filter, target, value)
|
457
|
-
else
|
458
|
-
if match_operator(filter, op, value)
|
459
|
-
match = true
|
460
|
-
type = :operator
|
461
|
-
elsif match_key(filter, key)
|
462
|
-
match = true
|
463
|
-
type = :key
|
464
|
-
else
|
465
|
-
match = false
|
466
|
-
end
|
467
|
-
end
|
468
|
-
[match, type]
|
469
|
-
end
|
470
|
-
|
471
|
-
# @api private
|
472
|
-
protected
|
473
|
-
def match_operator(filter, op, value)
|
474
|
-
# dates are the only values that don't come back as native types in JSON
|
475
|
-
# but where we use the type as a cue to the operator translation
|
476
|
-
value = Date.today if op =~ /^Date/
|
477
|
-
translate_operator(filter, value) == op
|
478
|
-
end
|
479
|
-
|
480
|
-
# @api private
|
481
|
-
protected
|
482
|
-
def match_key(filter, key, value = nil)
|
483
|
-
translate_key(filter) == key
|
484
|
-
end
|
485
|
-
|
486
|
-
# @api private
|
487
|
-
protected
|
488
|
-
def filter_conditions(conditions = @conditions)
|
489
|
-
conditions.inject({}) do |m, (op, keys)|
|
490
|
-
m[op] = keys.inject({}) do |m2, (key, value)|
|
491
|
-
m2[key] = value if !block_given? or yield(op, key, value)
|
492
|
-
m2
|
493
|
-
end
|
494
|
-
m.delete(op) if m[op].empty?
|
495
|
-
m
|
496
|
-
end
|
497
|
-
end
|
498
|
-
|
499
|
-
# @api private
|
500
|
-
protected
|
501
|
-
def translate_key(key)
|
502
|
-
if key.kind_of?(Symbol)
|
503
|
-
if key.to_s =~ /^s3_(.*)$/
|
504
|
-
s3_name = $1
|
505
|
-
if s3_name == "version_id" or
|
506
|
-
s3_name == "location_constraint"
|
507
|
-
s3_name = Inflection.class_name(s3_name)
|
508
|
-
else
|
509
|
-
s3_name.tr!('_', '-')
|
510
|
-
end
|
511
|
-
"s3:#{s3_name}"
|
512
|
-
else
|
513
|
-
"aws:#{Inflection.class_name(key.to_s)}"
|
514
|
-
end
|
515
|
-
else
|
516
|
-
key
|
517
|
-
end
|
518
|
-
end
|
519
|
-
|
520
|
-
# @api private
|
521
|
-
MODIFIERS = {
|
522
|
-
/_ignoring_case$/ => "IgnoreCase",
|
523
|
-
/_equals$/ => "Equals"
|
524
|
-
}
|
525
|
-
|
526
|
-
# @api private
|
527
|
-
protected
|
528
|
-
def valid_operator?(operator)
|
529
|
-
translate_operator(operator, "")
|
530
|
-
true
|
531
|
-
rescue ArgumentError => e
|
532
|
-
false
|
533
|
-
end
|
534
|
-
|
535
|
-
# @api private
|
536
|
-
protected
|
537
|
-
def translate_operator(operator, example_value)
|
538
|
-
return operator if operator.kind_of?(String)
|
539
|
-
|
540
|
-
original_operator = operator
|
541
|
-
(operator, opts) = strip_modifiers(operator)
|
542
|
-
|
543
|
-
raise ArgumentError.new("unrecognized operator #{original_operator}") unless
|
544
|
-
respond_to?("translate_#{operator}", true)
|
545
|
-
send("translate_#{operator}", example_value, opts)
|
546
|
-
end
|
547
|
-
|
548
|
-
# @api private
|
549
|
-
protected
|
550
|
-
def translate_is(example, opts)
|
551
|
-
return "Bool" if type_notation(example) == "Bool"
|
552
|
-
base_translate(example, "Equals", opts[:ignore_case])
|
553
|
-
end
|
554
|
-
|
555
|
-
# @api private
|
556
|
-
protected
|
557
|
-
def translate_not(example, opts)
|
558
|
-
base_translate(example, "NotEquals", opts[:ignore_case])
|
559
|
-
end
|
560
|
-
|
561
|
-
# @api private
|
562
|
-
protected
|
563
|
-
def translate_like(example, opts)
|
564
|
-
base_translate(example, "Like")
|
565
|
-
end
|
566
|
-
|
567
|
-
# @api private
|
568
|
-
protected
|
569
|
-
def translate_not_like(example, opts)
|
570
|
-
base_translate(example, "NotLike")
|
571
|
-
end
|
572
|
-
|
573
|
-
# @api private
|
574
|
-
protected
|
575
|
-
def translate_less_than(example, opts)
|
576
|
-
base_translate(example, "LessThan", opts[:equals])
|
577
|
-
end
|
578
|
-
alias_method :translate_lt, :translate_less_than
|
579
|
-
|
580
|
-
# @api private
|
581
|
-
protected
|
582
|
-
def translate_lte(example, opts)
|
583
|
-
translate_less_than(example, { :equals => "Equals" })
|
584
|
-
end
|
585
|
-
|
586
|
-
# @api private
|
587
|
-
protected
|
588
|
-
def translate_greater_than(example, opts)
|
589
|
-
base_translate(example, "GreaterThan", opts[:equals])
|
590
|
-
end
|
591
|
-
alias_method :translate_gt, :translate_greater_than
|
592
|
-
|
593
|
-
# @api private
|
594
|
-
protected
|
595
|
-
def translate_gte(example, opts)
|
596
|
-
translate_greater_than(example, { :equals => "Equals" })
|
597
|
-
end
|
598
|
-
|
599
|
-
# @api private
|
600
|
-
protected
|
601
|
-
def translate_is_ip_address(example, opts)
|
602
|
-
"IpAddress"
|
603
|
-
end
|
604
|
-
|
605
|
-
# @api private
|
606
|
-
protected
|
607
|
-
def translate_not_ip_address(example, opts)
|
608
|
-
"NotIpAddress"
|
609
|
-
end
|
610
|
-
|
611
|
-
# @api private
|
612
|
-
protected
|
613
|
-
def translate_is_arn(example, opts)
|
614
|
-
"ArnEquals"
|
615
|
-
end
|
616
|
-
|
617
|
-
# @api private
|
618
|
-
protected
|
619
|
-
def translate_not_arn(example, opts)
|
620
|
-
"ArnNotEquals"
|
621
|
-
end
|
622
|
-
|
623
|
-
# @api private
|
624
|
-
protected
|
625
|
-
def translate_is_arn_like(example, opts)
|
626
|
-
"ArnLike"
|
627
|
-
end
|
628
|
-
|
629
|
-
# @api private
|
630
|
-
protected
|
631
|
-
def translate_not_arn_like(example, opts)
|
632
|
-
"ArnNotLike"
|
633
|
-
end
|
634
|
-
|
635
|
-
# @api private
|
636
|
-
protected
|
637
|
-
def base_translate(example, base_operator, *modifiers)
|
638
|
-
"#{type_notation(example)}#{base_operator}#{modifiers.join}"
|
639
|
-
end
|
640
|
-
|
641
|
-
# @api private
|
642
|
-
protected
|
643
|
-
def type_notation(example)
|
644
|
-
case example
|
645
|
-
when String
|
646
|
-
"String"
|
647
|
-
when Numeric
|
648
|
-
"Numeric"
|
649
|
-
when Time, Date
|
650
|
-
"Date"
|
651
|
-
when true, false
|
652
|
-
"Bool"
|
653
|
-
end
|
654
|
-
end
|
655
|
-
|
656
|
-
# @api private
|
657
|
-
protected
|
658
|
-
def convert_value(value)
|
659
|
-
case value
|
660
|
-
when DateTime, Time
|
661
|
-
Time.parse(value.to_s).iso8601
|
662
|
-
when Date
|
663
|
-
value.strftime("%Y-%m-%d")
|
664
|
-
else
|
665
|
-
value
|
666
|
-
end
|
667
|
-
end
|
668
|
-
|
669
|
-
# @api private
|
670
|
-
protected
|
671
|
-
def strip_modifiers(operator)
|
672
|
-
opts = {}
|
673
|
-
MODIFIERS.each do |(regex, mod)|
|
674
|
-
ruby_name = Inflection.ruby_name(mod).to_sym
|
675
|
-
opts[ruby_name] = ""
|
676
|
-
if operator.to_s =~ regex
|
677
|
-
opts[ruby_name] = mod
|
678
|
-
operator = operator.to_s.sub(regex, '').to_sym
|
679
|
-
end
|
680
|
-
end
|
681
|
-
[operator, opts]
|
682
|
-
end
|
683
|
-
|
684
|
-
end
|
685
|
-
|
686
|
-
# Represents a statement in a policy.
|
687
|
-
#
|
688
|
-
# @see Policy#allow
|
689
|
-
# @see Policy#deny
|
690
|
-
class Statement
|
691
|
-
|
692
|
-
# @return [String] Returns the statement id
|
693
|
-
attr_accessor :sid
|
694
|
-
|
695
|
-
# @return [String] Returns the statement effect, either "Allow" or
|
696
|
-
# "Deny"
|
697
|
-
attr_accessor :effect
|
698
|
-
|
699
|
-
# @return [Array] Returns an array of principals.
|
700
|
-
attr_accessor :principals
|
701
|
-
|
702
|
-
# @return [Array] Returns an array of statement actions included
|
703
|
-
# by this policy statement.
|
704
|
-
attr_accessor :actions
|
705
|
-
|
706
|
-
# @return [Array] Returns an array of actions excluded by this
|
707
|
-
# policy statement.
|
708
|
-
attr_accessor :excluded_actions
|
709
|
-
|
710
|
-
# @return [Array] Returns an array of resources affected by this
|
711
|
-
# policy statement.
|
712
|
-
attr_accessor :resources
|
713
|
-
|
714
|
-
# @return [Array] Returns an array of conditions for this policy.
|
715
|
-
attr_accessor :conditions
|
716
|
-
|
717
|
-
attr_accessor :excluded_resources
|
718
|
-
|
719
|
-
# Constructs a new statement.
|
720
|
-
#
|
721
|
-
# @option opts [String] :sid The statement ID. This is optional; if
|
722
|
-
# omitted, a UUID will be generated for the statement.
|
723
|
-
# @option opts [String] :effect The statement effect, which must be either
|
724
|
-
# "Allow" or "Deny".
|
725
|
-
# @see Policy#allow
|
726
|
-
# @see Policy#deny
|
727
|
-
# @option opts [String or array of strings] :principals The account(s)
|
728
|
-
# affected by the statement. These should be AWS account IDs.
|
729
|
-
# @option opts :actions The action or actions affected by
|
730
|
-
# the statement. These can be symbols or strings. If
|
731
|
-
# they are strings, you can use wildcard character "*"
|
732
|
-
# to match zero or more characters in the action name.
|
733
|
-
# Symbols are expected to match methods of S3::Client.
|
734
|
-
# @option opts :excluded_actions Action or actions which are
|
735
|
-
# explicitly not affected by this statement. As with
|
736
|
-
# `:actions`, these may be symbols or strings.
|
737
|
-
# @option opts [String or array of strings] :resources The
|
738
|
-
# resource(s) affected by the statement. These can be
|
739
|
-
# expressed as ARNs (e.g. `arn:aws:s3:::mybucket/mykey`)
|
740
|
-
# or you may omit the `arn:aws:s3:::` prefix and just give
|
741
|
-
# the path as `bucket_name/key`. You may use the wildcard
|
742
|
-
# character "*" to match zero or more characters in the
|
743
|
-
# resource name.
|
744
|
-
# @option opts [ConditionBlock or Hash] :conditions
|
745
|
-
# Additional conditions that narrow the effect of the
|
746
|
-
# statement. It's typically more convenient to use the
|
747
|
-
# ConditionBuilder instance returned from Policy#allow or
|
748
|
-
# Policy#deny to add conditions to a statement.
|
749
|
-
# @see S3::Client
|
750
|
-
def initialize(opts = {})
|
751
|
-
self.sid = UUIDTools::UUID.timestamp_create.to_s.tr('-','')
|
752
|
-
self.conditions = ConditionBlock.new
|
753
|
-
|
754
|
-
parse_options(opts)
|
755
|
-
|
756
|
-
yield(self) if block_given?
|
757
|
-
end
|
758
|
-
|
759
|
-
# Convenience method to add to the list of actions affected
|
760
|
-
# by this statement.
|
761
|
-
def include_actions(*actions)
|
762
|
-
self.actions ||= []
|
763
|
-
self.actions.push(*actions)
|
764
|
-
end
|
765
|
-
alias_method :include_action, :include_actions
|
766
|
-
|
767
|
-
# Convenience method to add to the list of actions
|
768
|
-
# explicitly not affected by this statement.
|
769
|
-
def exclude_actions(*actions)
|
770
|
-
self.excluded_actions ||= []
|
771
|
-
self.excluded_actions.push(*actions)
|
772
|
-
end
|
773
|
-
alias_method :exclude_action, :exclude_actions
|
774
|
-
|
775
|
-
# @api private
|
776
|
-
def to_h
|
777
|
-
stmt = {
|
778
|
-
"Sid" => sid,
|
779
|
-
"Effect" => Inflection.class_name(effect.to_s),
|
780
|
-
"Principal" => principals_hash,
|
781
|
-
"Resource" => (resource_arns if resource_arns),
|
782
|
-
"NotResource" => (excluded_resource_arns if excluded_resource_arns),
|
783
|
-
"Condition" => (conditions.to_h if conditions)
|
784
|
-
}
|
785
|
-
stmt.delete("Condition") if !conditions || conditions.to_h.empty?
|
786
|
-
stmt.delete("Principal") unless principals_hash
|
787
|
-
stmt.delete("Resource") unless resource_arns
|
788
|
-
stmt.delete("NotResource") unless excluded_resource_arns
|
789
|
-
if !translated_actions || translated_actions.empty?
|
790
|
-
stmt["NotAction"] = translated_excluded_actions
|
791
|
-
else
|
792
|
-
stmt["Action"] = translated_actions
|
793
|
-
end
|
794
|
-
stmt
|
795
|
-
end
|
796
|
-
|
797
|
-
protected
|
798
|
-
def parse_options(options)
|
799
|
-
options.each do |name, value|
|
800
|
-
name = Inflection.ruby_name(name.to_s)
|
801
|
-
name.sub!(/s$/,'')
|
802
|
-
send("parse_#{name}_option", value) if
|
803
|
-
respond_to?("parse_#{name}_option", true)
|
804
|
-
end
|
805
|
-
end
|
806
|
-
|
807
|
-
protected
|
808
|
-
def parse_effect_option(value)
|
809
|
-
self.effect = value
|
810
|
-
end
|
811
|
-
|
812
|
-
protected
|
813
|
-
def parse_sid_option(value)
|
814
|
-
self.sid = value
|
815
|
-
end
|
816
|
-
|
817
|
-
protected
|
818
|
-
def parse_action_option(value)
|
819
|
-
coerce_array_option(:actions, value)
|
820
|
-
end
|
821
|
-
|
822
|
-
protected
|
823
|
-
def parse_not_action_option(value)
|
824
|
-
coerce_array_option(:excluded_actions, value)
|
825
|
-
end
|
826
|
-
alias_method :parse_excluded_action_option, :parse_not_action_option
|
827
|
-
|
828
|
-
protected
|
829
|
-
def parse_principal_option(value)
|
830
|
-
if value and value.kind_of?(Hash)
|
831
|
-
value = value["AWS"] || []
|
832
|
-
end
|
833
|
-
|
834
|
-
coerce_array_option(:principals, value)
|
835
|
-
end
|
836
|
-
|
837
|
-
protected
|
838
|
-
def parse_resource_option(value)
|
839
|
-
coerce_array_option(:resources, value)
|
840
|
-
end
|
841
|
-
|
842
|
-
def parse_not_resource_option(value)
|
843
|
-
coerce_array_option(:excluded_resources, value)
|
844
|
-
end
|
845
|
-
alias_method :parse_excluded_resource_option, :parse_not_resource_option
|
846
|
-
|
847
|
-
protected
|
848
|
-
def parse_condition_option(value)
|
849
|
-
self.conditions = ConditionBlock.new(value)
|
850
|
-
end
|
851
|
-
|
852
|
-
protected
|
853
|
-
def coerce_array_option(attr, value)
|
854
|
-
if value.kind_of?(Array)
|
855
|
-
send("#{attr}=", value)
|
856
|
-
else
|
857
|
-
send("#{attr}=", [value])
|
858
|
-
end
|
859
|
-
end
|
860
|
-
|
861
|
-
protected
|
862
|
-
def principals_hash
|
863
|
-
return nil unless principals
|
864
|
-
{ "AWS" =>
|
865
|
-
principals.map do |principal|
|
866
|
-
principal == :any ? "*" : principal
|
867
|
-
end }
|
868
|
-
end
|
869
|
-
|
870
|
-
protected
|
871
|
-
def translate_action(action)
|
872
|
-
case action
|
873
|
-
when String then action
|
874
|
-
when :any then '*'
|
875
|
-
when Symbol
|
876
|
-
|
877
|
-
if self.class == Core::Policy::Statement
|
878
|
-
msg = 'symbolized action names are only accepted by service ' +
|
879
|
-
'specific policies (e.g. AWS::S3::Policy)'
|
880
|
-
raise ArgumentError, msg
|
881
|
-
end
|
882
|
-
|
883
|
-
unless self.class::ACTION_MAPPING.has_key?(action)
|
884
|
-
raise ArgumentError, "unrecognized action: #{action}"
|
885
|
-
end
|
886
|
-
|
887
|
-
self.class::ACTION_MAPPING[action]
|
888
|
-
|
889
|
-
end
|
890
|
-
end
|
891
|
-
|
892
|
-
protected
|
893
|
-
def translated_actions
|
894
|
-
return nil unless actions
|
895
|
-
actions.map do |action|
|
896
|
-
translate_action(action)
|
897
|
-
end
|
898
|
-
end
|
899
|
-
|
900
|
-
protected
|
901
|
-
def translated_excluded_actions
|
902
|
-
return nil unless excluded_actions
|
903
|
-
excluded_actions.map { |a| translate_action(a) }
|
904
|
-
end
|
905
|
-
|
906
|
-
protected
|
907
|
-
def resource_arns
|
908
|
-
return nil unless resources
|
909
|
-
resources.map do |resource|
|
910
|
-
case resource
|
911
|
-
when :any then "*"
|
912
|
-
else resource_arn(resource)
|
913
|
-
end
|
914
|
-
end
|
915
|
-
end
|
916
|
-
|
917
|
-
protected
|
918
|
-
def resource_arn resource
|
919
|
-
resource.to_s
|
920
|
-
end
|
921
|
-
|
922
|
-
protected
|
923
|
-
def excluded_resource_arns
|
924
|
-
return nil unless excluded_resources
|
925
|
-
excluded_resources.map do |excluded_resource|
|
926
|
-
case excluded_resource
|
927
|
-
when :any then "*"
|
928
|
-
else excluded_resource_arn(excluded_resource)
|
929
|
-
end
|
930
|
-
end
|
931
|
-
end
|
932
|
-
|
933
|
-
protected
|
934
|
-
def excluded_resource_arn excluded_resource
|
935
|
-
excluded_resource.to_s
|
936
|
-
end
|
937
|
-
|
938
|
-
end
|
939
|
-
|
940
|
-
end
|
941
|
-
end
|
942
|
-
end
|