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,172 @@
|
|
|
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 Record
|
|
16
|
+
class HashModel
|
|
17
|
+
class << self
|
|
18
|
+
|
|
19
|
+
# @param [String] id The id of the record to load.
|
|
20
|
+
# @param [Hash] options
|
|
21
|
+
# @option options [String] :shard Specifies what shard (i.e. table)
|
|
22
|
+
# should be searched.
|
|
23
|
+
# @raise [RecordNotFound] Raises a record not found exception if there
|
|
24
|
+
# was no data found for the given id.
|
|
25
|
+
# @return [Record::HashModel] Returns the record with the given id.
|
|
26
|
+
def find_by_id id, options = {}
|
|
27
|
+
|
|
28
|
+
table = dynamo_db_table(options[:shard])
|
|
29
|
+
|
|
30
|
+
data = table.items[id].attributes.to_h
|
|
31
|
+
|
|
32
|
+
raise RecordNotFound, "no data found for id: #{id}" if data.empty?
|
|
33
|
+
|
|
34
|
+
obj = self.new(:shard => table)
|
|
35
|
+
obj.send(:hydrate, id, data)
|
|
36
|
+
obj
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
alias_method :[], :find_by_id
|
|
40
|
+
|
|
41
|
+
# Finds records in Amazon DynamoDB and returns them as objects of
|
|
42
|
+
# the current class.
|
|
43
|
+
#
|
|
44
|
+
# Finding +:all+ returns an enumerable scope object
|
|
45
|
+
#
|
|
46
|
+
# People.find(:all, :limit => 10).each do |person|
|
|
47
|
+
# puts person.name
|
|
48
|
+
# end
|
|
49
|
+
#
|
|
50
|
+
# Finding +:first+ returns a single record (or nil)
|
|
51
|
+
#
|
|
52
|
+
# boss = People.find(:first)
|
|
53
|
+
#
|
|
54
|
+
# Find accepts a hash of find modifiers (+:shard+ and +:limit+).
|
|
55
|
+
# You can also choose to omit these modifiers and
|
|
56
|
+
# chain them on the scope object returned. In the following
|
|
57
|
+
# example only one request is made to SimpleDB (when #each is
|
|
58
|
+
# called)
|
|
59
|
+
#
|
|
60
|
+
# people = People.find(:all, :limit => 10)
|
|
61
|
+
#
|
|
62
|
+
# people = people.limit(10).find(:all)
|
|
63
|
+
#
|
|
64
|
+
# @overload find(id)
|
|
65
|
+
# @param id The record to find, raises an exception if the record is
|
|
66
|
+
# not found.
|
|
67
|
+
#
|
|
68
|
+
# @overload find(mode, options = {})
|
|
69
|
+
# @param [:all,:first] mode (:all) When finding +:all+ matching records
|
|
70
|
+
# and array is returned of records. When finding +:first+ then
|
|
71
|
+
# +nil+ or a single record will be returned.
|
|
72
|
+
# @param [Hash] options
|
|
73
|
+
# @option options [Integer] :shard The shard name of the Amazon
|
|
74
|
+
# DynamoDB table to search.
|
|
75
|
+
# @option options [Integer] :limit The max number of records to fetch.
|
|
76
|
+
def find *args
|
|
77
|
+
new_scope.find(*args)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# Returns a chainable scope object that restricts further scopes to a
|
|
81
|
+
# particular table.
|
|
82
|
+
#
|
|
83
|
+
# Book.shard('books-2').each do |book|
|
|
84
|
+
# # ...
|
|
85
|
+
# end
|
|
86
|
+
#
|
|
87
|
+
# @param [String] shard_name
|
|
88
|
+
# @return [Scope] Returns a scope for restricting the table searched.
|
|
89
|
+
def shard shard_name
|
|
90
|
+
new_scope.shard(shard_name)
|
|
91
|
+
end
|
|
92
|
+
alias_method :domain, :shard # backwards compat
|
|
93
|
+
|
|
94
|
+
# Returns an enumerable scope object represents all records.
|
|
95
|
+
#
|
|
96
|
+
# Book.all.each do |book|
|
|
97
|
+
# # ...
|
|
98
|
+
# end
|
|
99
|
+
#
|
|
100
|
+
# This method is equivalent to +find(:all)+, and therefore you can also
|
|
101
|
+
# pass aditional options.
|
|
102
|
+
#
|
|
103
|
+
# Book.all(:where => { :author' => 'me' }).each do |my_book|
|
|
104
|
+
# # ...
|
|
105
|
+
# end
|
|
106
|
+
#
|
|
107
|
+
# @return [Scope] Returns an enumerable scope object.
|
|
108
|
+
#
|
|
109
|
+
def all options = {}
|
|
110
|
+
new_scope.find(:all, options)
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# Yields once for each record.
|
|
114
|
+
def each &block
|
|
115
|
+
all.each(&block)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
# Counts records Amazon DynamoDB.
|
|
119
|
+
#
|
|
120
|
+
# class Product < AWS::Record::HashModel
|
|
121
|
+
# end
|
|
122
|
+
#
|
|
123
|
+
# # returns the count of records in the 'Product' table
|
|
124
|
+
# Product.count
|
|
125
|
+
#
|
|
126
|
+
# You can specify the table via #shard
|
|
127
|
+
#
|
|
128
|
+
# # returns the count of records in the 'products-1' table
|
|
129
|
+
# Product.shard('products-1').count
|
|
130
|
+
#
|
|
131
|
+
# You can also specify the shard as an option to #count.
|
|
132
|
+
#
|
|
133
|
+
# Product.count(:shard => 'table-name')
|
|
134
|
+
#
|
|
135
|
+
# Chaining #count with #limit has no effect on the count.
|
|
136
|
+
#
|
|
137
|
+
# Product.limit(10).count # same as Product.count, limit ignored
|
|
138
|
+
#
|
|
139
|
+
# @param [Hash] options
|
|
140
|
+
#
|
|
141
|
+
# @option [String] :shard Which shard to count records in.
|
|
142
|
+
#
|
|
143
|
+
# @return [Integer] The count of records in the table.
|
|
144
|
+
#
|
|
145
|
+
def count options = {}
|
|
146
|
+
new_scope.count(options)
|
|
147
|
+
end
|
|
148
|
+
alias_method :size, :count
|
|
149
|
+
|
|
150
|
+
# @return [Object,nil] Returns the first record found. If there were
|
|
151
|
+
# no records found, nil is returned.
|
|
152
|
+
def first options = {}
|
|
153
|
+
new_scope.first(options)
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
# The maximum number of records to return. By default, all records
|
|
157
|
+
# matching the where conditions will be returned from a find.
|
|
158
|
+
#
|
|
159
|
+
# People.limit(10).each {|person| ... }
|
|
160
|
+
#
|
|
161
|
+
# Limit can be chained with other scope modifiers:
|
|
162
|
+
#
|
|
163
|
+
# People.where(:age => 40).limit(10).each {|person| ... }
|
|
164
|
+
#
|
|
165
|
+
def limit limit
|
|
166
|
+
new_scope.limit(limit)
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
end
|
|
@@ -0,0 +1,108 @@
|
|
|
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 Record
|
|
16
|
+
class HashModel
|
|
17
|
+
|
|
18
|
+
# The primary interface for finding records with {AWS::Record::HashModel}.
|
|
19
|
+
#
|
|
20
|
+
# == Getting a Scope Object
|
|
21
|
+
#
|
|
22
|
+
# You should normally never need to construct a Scope object directly.
|
|
23
|
+
# Scope objects are returned from the AWS::Record::HashModel finder
|
|
24
|
+
# methods # (e.g. +shard+ and +limit+).
|
|
25
|
+
#
|
|
26
|
+
# books = Book.limit(100)
|
|
27
|
+
# books.class #=> AWS::Record::HashModel::Scope
|
|
28
|
+
#
|
|
29
|
+
# Scopes are also returned from methods defined with the +scope+ method.
|
|
30
|
+
#
|
|
31
|
+
# class Book < AWS::Record::HashModel
|
|
32
|
+
# scope :sampling, limit(10)
|
|
33
|
+
# end
|
|
34
|
+
#
|
|
35
|
+
# Book.sampling #=> returns a scope that limits to 10
|
|
36
|
+
#
|
|
37
|
+
# == Chaining Scopes
|
|
38
|
+
#
|
|
39
|
+
# Scope objects represent a request, but do not actualy make a request
|
|
40
|
+
# until required. This allows you to chain requests
|
|
41
|
+
#
|
|
42
|
+
# # no request made by the following 2 statements
|
|
43
|
+
# books = Book.shard('books-1') # what table to search
|
|
44
|
+
# books = books.limit(10) # how many records to fetch
|
|
45
|
+
#
|
|
46
|
+
# books.each do |book|
|
|
47
|
+
# # yields up to 10 books from the table 'books-1'
|
|
48
|
+
# end
|
|
49
|
+
#
|
|
50
|
+
# The following methods returns a scope that can be chained.
|
|
51
|
+
#
|
|
52
|
+
# * {#shard}
|
|
53
|
+
# * {#limit}
|
|
54
|
+
#
|
|
55
|
+
# == Terminating Scopes
|
|
56
|
+
#
|
|
57
|
+
# To terminate a scope you can enumerate it or call #first.
|
|
58
|
+
#
|
|
59
|
+
# # terminate a scope by enumerating
|
|
60
|
+
# Book.limit(10).each {|book| ... }
|
|
61
|
+
#
|
|
62
|
+
# # terminate a scope by getting the first record
|
|
63
|
+
# Book.shard('books-1').first
|
|
64
|
+
#
|
|
65
|
+
class Scope < Record::Scope
|
|
66
|
+
|
|
67
|
+
private
|
|
68
|
+
def _each_object &block
|
|
69
|
+
|
|
70
|
+
items = _item_collection
|
|
71
|
+
|
|
72
|
+
items.select(:limit => @options[:limit]).each do |item_data|
|
|
73
|
+
obj = base_class.new(:shard => _shard)
|
|
74
|
+
obj.send(:hydrate, item_data.attributes['id'], item_data.attributes)
|
|
75
|
+
yield(obj)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
private
|
|
81
|
+
def _merge_scope scope
|
|
82
|
+
merged = self
|
|
83
|
+
scope.instance_variable_get('@options').each_pair do |opt_name,opt_value|
|
|
84
|
+
unless [nil, []].include?(opt_value)
|
|
85
|
+
merged = merged.send(opt_name, *opt_value)
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
merged
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
private
|
|
92
|
+
def _handle_options options
|
|
93
|
+
scope = self
|
|
94
|
+
options.each_pair do |method, args|
|
|
95
|
+
scope = scope.send(method, *args)
|
|
96
|
+
end
|
|
97
|
+
scope
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
private
|
|
101
|
+
def _item_collection
|
|
102
|
+
base_class.dynamo_db_table(_shard).items
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
@@ -0,0 +1,427 @@
|
|
|
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
|
+
# todo move these to included modules (like validations and naming)
|
|
15
|
+
|
|
16
|
+
require 'aws/record/abstract_base'
|
|
17
|
+
require 'aws/record/model/scope'
|
|
18
|
+
require 'aws/record/model/attributes'
|
|
19
|
+
require 'aws/record/model/finder_methods'
|
|
20
|
+
|
|
21
|
+
module AWS
|
|
22
|
+
module Record
|
|
23
|
+
|
|
24
|
+
# An ActiveRecord-like interface built ontop of Amazon SimpleDB.
|
|
25
|
+
#
|
|
26
|
+
# class Book < AWS::Record::Model
|
|
27
|
+
#
|
|
28
|
+
# string_attr :title
|
|
29
|
+
# string_attr :author
|
|
30
|
+
# integer_attr :number_of_pages
|
|
31
|
+
#
|
|
32
|
+
# timestamps # adds a :created_at and :updated_at pair of timestamps
|
|
33
|
+
#
|
|
34
|
+
# end
|
|
35
|
+
#
|
|
36
|
+
# b = Book.new(:title => 'My Book', :author => 'Me', :pages => 1)
|
|
37
|
+
# b.save
|
|
38
|
+
#
|
|
39
|
+
# = Attribute Macros
|
|
40
|
+
#
|
|
41
|
+
# When extending AWS::Record::Model you should first consider what
|
|
42
|
+
# attributes your class should have. Unlike ActiveRecord, AWS::Record
|
|
43
|
+
# models are not backed by a database table/schema. You must choose what
|
|
44
|
+
# attributes (and what types) you need.
|
|
45
|
+
#
|
|
46
|
+
# * +string_attr+
|
|
47
|
+
# * +boolean_attr+
|
|
48
|
+
# * +integer_attr+
|
|
49
|
+
# * +float_attr+
|
|
50
|
+
# * +datetime_attr+
|
|
51
|
+
# * +date_attr+
|
|
52
|
+
#
|
|
53
|
+
# === Usage
|
|
54
|
+
#
|
|
55
|
+
# Normally you just call these methods inside your model class definition:
|
|
56
|
+
#
|
|
57
|
+
# class Book < AWS::Record::Model
|
|
58
|
+
# string_attr :title
|
|
59
|
+
# boolean_attr :has_been_read
|
|
60
|
+
# integer_attr :number_of_pages
|
|
61
|
+
# float_attr :weight_in_pounds
|
|
62
|
+
# datetime_attr :published_at
|
|
63
|
+
# end
|
|
64
|
+
#
|
|
65
|
+
# For each attribute macro a pair of setter/getter methods are added #
|
|
66
|
+
# to your class (and a few other useful methods).
|
|
67
|
+
#
|
|
68
|
+
# b = Book.new
|
|
69
|
+
# b.title = "My Book"
|
|
70
|
+
# b.has_been_read = true
|
|
71
|
+
# b.number_of_pages = 1000
|
|
72
|
+
# b.weight_in_pounds = 1.1
|
|
73
|
+
# b.published_at = Time.now
|
|
74
|
+
# b.save
|
|
75
|
+
#
|
|
76
|
+
# b.id #=> "0aa894ca-8223-4d34-831e-e5134b2bb71c"
|
|
77
|
+
# b.attributes
|
|
78
|
+
# #=> { 'title' => 'My Book', 'has_been_read' => true, ... }
|
|
79
|
+
#
|
|
80
|
+
# === Default Values
|
|
81
|
+
#
|
|
82
|
+
# All attribute macros accept the +:default_value+ option. This sets
|
|
83
|
+
# a value that is populated onto all new instnaces of the class.
|
|
84
|
+
#
|
|
85
|
+
# class Book < AWS::Record::Model
|
|
86
|
+
# string_attr :author, :default_value => 'Me'
|
|
87
|
+
# end
|
|
88
|
+
#
|
|
89
|
+
# Book.new.author #=> 'Me'
|
|
90
|
+
#
|
|
91
|
+
# === Multi-Valued (Set) Attributes
|
|
92
|
+
#
|
|
93
|
+
# AWS::Record permits storing multiple values with a single attribute.
|
|
94
|
+
#
|
|
95
|
+
# class Book < AWS::Record::Model
|
|
96
|
+
# string_attr :tags, :set => true
|
|
97
|
+
# end
|
|
98
|
+
#
|
|
99
|
+
# b = Book.new
|
|
100
|
+
# b.tags #=> #<Set: {}>
|
|
101
|
+
#
|
|
102
|
+
# b.tags = ['fiction', 'fantasy']
|
|
103
|
+
# b.tags #=> #<Set: {'fiction', 'fantasy'}>
|
|
104
|
+
#
|
|
105
|
+
# These multi-valued attributes are treated as sets, not arrays. This
|
|
106
|
+
# means:
|
|
107
|
+
#
|
|
108
|
+
# * values are unordered
|
|
109
|
+
# * duplicate values are automatically omitted
|
|
110
|
+
#
|
|
111
|
+
# Please consider these limitations when you choose to use the +:set+
|
|
112
|
+
# option with the attribute macros.
|
|
113
|
+
#
|
|
114
|
+
# = Validations
|
|
115
|
+
#
|
|
116
|
+
# It's important to validate models before there are persisted to keep
|
|
117
|
+
# your data clean. AWS::Record supports most of the ActiveRecord style
|
|
118
|
+
# validators.
|
|
119
|
+
#
|
|
120
|
+
# class Book < AWS::Record::Model
|
|
121
|
+
# string_attr :title
|
|
122
|
+
# validates_presence_of :title
|
|
123
|
+
# end
|
|
124
|
+
#
|
|
125
|
+
# b = Book.new
|
|
126
|
+
# b.valid? #=> false
|
|
127
|
+
# b.errors.full_messages #=> ['Title may not be blank']
|
|
128
|
+
#
|
|
129
|
+
# Validations are checked before saving a record. If any of the validators
|
|
130
|
+
# adds an error, the the save will fail.
|
|
131
|
+
#
|
|
132
|
+
# For more information about the available validation methods see
|
|
133
|
+
# {Validations}.
|
|
134
|
+
#
|
|
135
|
+
# = Finder Methods
|
|
136
|
+
#
|
|
137
|
+
# You can find records by their ID. Each record gets a UUID when it
|
|
138
|
+
# is saved for the first time. You can use this ID to fetch the record
|
|
139
|
+
# at a latter time:
|
|
140
|
+
#
|
|
141
|
+
# b = Book["0aa894ca-8223-4d34-831e-e5134b2bb71c"]
|
|
142
|
+
#
|
|
143
|
+
# b = Book.find("0aa894ca-8223-4d34-831e-e5134b2bb71c")
|
|
144
|
+
#
|
|
145
|
+
# If you try to find a record by ID that has no data an error will
|
|
146
|
+
# be raised.
|
|
147
|
+
#
|
|
148
|
+
# === All
|
|
149
|
+
#
|
|
150
|
+
# You can enumerate all of your records using +all+.
|
|
151
|
+
#
|
|
152
|
+
# Book.all.each do |book|
|
|
153
|
+
# puts book.id
|
|
154
|
+
# end
|
|
155
|
+
#
|
|
156
|
+
# Book.find(:all) do |book|
|
|
157
|
+
# puts book.id
|
|
158
|
+
# end
|
|
159
|
+
#
|
|
160
|
+
# Be careful when enumerating all. Depending on the number of records
|
|
161
|
+
# and number of attributes each record has, this can take a while,
|
|
162
|
+
# causing quite a few requests.
|
|
163
|
+
#
|
|
164
|
+
# === First
|
|
165
|
+
#
|
|
166
|
+
# If you only want a single record, you should use +first+.
|
|
167
|
+
#
|
|
168
|
+
# b = Book.first
|
|
169
|
+
#
|
|
170
|
+
# === Modifiers
|
|
171
|
+
#
|
|
172
|
+
# Frequently you do not want ALL records or the very first record. You
|
|
173
|
+
# can pass options to +find+, +all+ and +first+.
|
|
174
|
+
#
|
|
175
|
+
# my_books = Book.find(:all, :where => 'owner = "Me"')
|
|
176
|
+
#
|
|
177
|
+
# book = Book.first(:where => { :has_been_read => false })
|
|
178
|
+
#
|
|
179
|
+
# You can pass as find options:
|
|
180
|
+
#
|
|
181
|
+
# * +:where+ - Conditions that must be met to be returned
|
|
182
|
+
# * +:order+ - The order to sort matched records by
|
|
183
|
+
# * +:limit+ - The maximum number of records to return
|
|
184
|
+
#
|
|
185
|
+
# = Scopes
|
|
186
|
+
#
|
|
187
|
+
# More useful than writing query fragments all over the place is to
|
|
188
|
+
# name your most common conditions for reuse.
|
|
189
|
+
#
|
|
190
|
+
# class Book < AWS::Record::Model
|
|
191
|
+
#
|
|
192
|
+
# scope :mine, where(:owner => 'Me')
|
|
193
|
+
#
|
|
194
|
+
# scope :unread, where(:has_been_read => false)
|
|
195
|
+
#
|
|
196
|
+
# scope :by_popularity, order(:score, :desc)
|
|
197
|
+
#
|
|
198
|
+
# scope :top_10, by_popularity.limit(10)
|
|
199
|
+
#
|
|
200
|
+
# end
|
|
201
|
+
#
|
|
202
|
+
# # The following expression returns 10 books that belong
|
|
203
|
+
# # to me, that are unread sorted by popularity.
|
|
204
|
+
# next_good_reads = Book.mine.unread.top_10
|
|
205
|
+
#
|
|
206
|
+
# There are 3 standard scope methods:
|
|
207
|
+
#
|
|
208
|
+
# * +where+
|
|
209
|
+
# * +order+
|
|
210
|
+
# * +limit+
|
|
211
|
+
#
|
|
212
|
+
# === Conditions (where)
|
|
213
|
+
#
|
|
214
|
+
# Where accepts aruments in a number of forms:
|
|
215
|
+
#
|
|
216
|
+
# 1. As an sql-like fragment. If you need to escape values this form is
|
|
217
|
+
# not suggested.
|
|
218
|
+
#
|
|
219
|
+
# Book.where('title = "My Book"')
|
|
220
|
+
#
|
|
221
|
+
# 2. An sql-like fragment, with placeholders. This escapes quoted
|
|
222
|
+
# arguments properly to avoid injection.
|
|
223
|
+
#
|
|
224
|
+
# Book.where('title = ?', 'My Book')
|
|
225
|
+
#
|
|
226
|
+
# 3. A hash of key-value pairs. This is the simplest form, but also the
|
|
227
|
+
# least flexible. You can not use this form if you need more complex
|
|
228
|
+
# expressions that use or.
|
|
229
|
+
#
|
|
230
|
+
# Book.where(:title => 'My Book')
|
|
231
|
+
#
|
|
232
|
+
# === Order
|
|
233
|
+
#
|
|
234
|
+
# This orders the records as returned by AWS. Default ordering is ascending.
|
|
235
|
+
# Pass the value :desc as a second argument to sort in reverse ordering.
|
|
236
|
+
#
|
|
237
|
+
# Book.order(:title) # alphabetical ordering
|
|
238
|
+
# Book.order(:title, :desc) # reverse alphabetical ordering
|
|
239
|
+
#
|
|
240
|
+
# You may only order by a single attribute. If you call order twice in the
|
|
241
|
+
# chain, the last call gets presedence:
|
|
242
|
+
#
|
|
243
|
+
# Book.order(:title).order(:price)
|
|
244
|
+
#
|
|
245
|
+
# In this example the books will be ordered by :price and the order(:title)
|
|
246
|
+
# is lost.
|
|
247
|
+
#
|
|
248
|
+
# === Limit
|
|
249
|
+
#
|
|
250
|
+
# Just call +limit+ with an integer argument. This sets the maximum
|
|
251
|
+
# number of records to retrieve:
|
|
252
|
+
#
|
|
253
|
+
# Book.limit(2)
|
|
254
|
+
#
|
|
255
|
+
# === Delayed Execution
|
|
256
|
+
#
|
|
257
|
+
# It should be noted that all finds are lazy (except +first+). This
|
|
258
|
+
# means the value returned is not an array of records, rather a handle
|
|
259
|
+
# to a {Scope} object that will return records when you enumerate over them.
|
|
260
|
+
#
|
|
261
|
+
# This allows you to build an expression without making unecessary requests.
|
|
262
|
+
# In the following example no request is made until the call to
|
|
263
|
+
# each_with_index.
|
|
264
|
+
#
|
|
265
|
+
# all_books = Books.all
|
|
266
|
+
# ten_books = all_books.limit(10)
|
|
267
|
+
#
|
|
268
|
+
# ten_books.each_with_index do |book,n|
|
|
269
|
+
# puts "#{n + 1} : #{book.title}"
|
|
270
|
+
# end
|
|
271
|
+
#
|
|
272
|
+
class Model
|
|
273
|
+
|
|
274
|
+
extend AbstractBase
|
|
275
|
+
|
|
276
|
+
class << self
|
|
277
|
+
|
|
278
|
+
# Creates the SimpleDB domain that is configured for this class.
|
|
279
|
+
#
|
|
280
|
+
# class Product < AWS::Record::Model
|
|
281
|
+
# end
|
|
282
|
+
#
|
|
283
|
+
# Product.create_table #=> 'Product'
|
|
284
|
+
#
|
|
285
|
+
# If you share a single AWS account with multiple applications, you
|
|
286
|
+
# can provide a domain prefix for your model classes.
|
|
287
|
+
#
|
|
288
|
+
# AWS::Record.domain_prefix = 'myapp-'
|
|
289
|
+
#
|
|
290
|
+
# Product.create_table #=> 'myapp-Product'
|
|
291
|
+
#
|
|
292
|
+
# If you have set a model shard name, this is used in place of the
|
|
293
|
+
# class name.
|
|
294
|
+
#
|
|
295
|
+
# AWS::Record.domain_prefix = 'prod-'
|
|
296
|
+
# class Product < AWS::Record::Model
|
|
297
|
+
# set_shard_name 'products'
|
|
298
|
+
# end
|
|
299
|
+
#
|
|
300
|
+
# Product.create_table #=> 'prod-products'
|
|
301
|
+
#
|
|
302
|
+
# If you shard you data across multiple domains, you can specify the
|
|
303
|
+
# shard name:
|
|
304
|
+
#
|
|
305
|
+
# # create two domains, with the given names
|
|
306
|
+
# Product.create_domain 'products-1'
|
|
307
|
+
# Product.create_domain 'products-2'
|
|
308
|
+
#
|
|
309
|
+
# @param [optional,String] shard_name Defaults to the class name.
|
|
310
|
+
#
|
|
311
|
+
# @return [SimpleDB::Domain]
|
|
312
|
+
#
|
|
313
|
+
def create_domain shard_name = nil
|
|
314
|
+
sdb.domains.create(sdb_domain_name(shard_name))
|
|
315
|
+
end
|
|
316
|
+
|
|
317
|
+
# @return [AWS::SimpleDB::Domain]
|
|
318
|
+
# @private
|
|
319
|
+
def sdb_domain shard_name = nil
|
|
320
|
+
sdb.domains[sdb_domain_name(shard_name)]
|
|
321
|
+
end
|
|
322
|
+
|
|
323
|
+
protected
|
|
324
|
+
def sdb_domain_name shard_name = nil
|
|
325
|
+
"#{AWS::Record.domain_prefix}#{self.shard_name(shard_name)}"
|
|
326
|
+
end
|
|
327
|
+
|
|
328
|
+
protected
|
|
329
|
+
def sdb
|
|
330
|
+
AWS::SimpleDB.new
|
|
331
|
+
end
|
|
332
|
+
|
|
333
|
+
end
|
|
334
|
+
|
|
335
|
+
# @return [SimpleDB::Item] Returns a reference to the item as stored in
|
|
336
|
+
# simple db.
|
|
337
|
+
# @private
|
|
338
|
+
private
|
|
339
|
+
def sdb_item
|
|
340
|
+
sdb_domain.items[id]
|
|
341
|
+
end
|
|
342
|
+
|
|
343
|
+
# @return [SimpleDB::Domain] Returns the domain this record is
|
|
344
|
+
# persisted to or will be persisted to.
|
|
345
|
+
private
|
|
346
|
+
def sdb_domain
|
|
347
|
+
self.class.sdb_domain(shard)
|
|
348
|
+
end
|
|
349
|
+
|
|
350
|
+
# This function accepts a hash of item data (as returned from
|
|
351
|
+
# AttributeCollection#to_h or ItemData#attributes) and returns only
|
|
352
|
+
# the key/value pairs that are configured attribues for this class.
|
|
353
|
+
# @private
|
|
354
|
+
private
|
|
355
|
+
def deserialize_item_data item_data
|
|
356
|
+
|
|
357
|
+
marked_for_deletion = item_data['_delete_'] || []
|
|
358
|
+
|
|
359
|
+
data = {}
|
|
360
|
+
item_data.each_pair do |attr_name,values|
|
|
361
|
+
|
|
362
|
+
attribute = self.class.attributes[attr_name]
|
|
363
|
+
|
|
364
|
+
next unless attribute
|
|
365
|
+
next if marked_for_deletion.include?(attr_name)
|
|
366
|
+
|
|
367
|
+
if attribute.set?
|
|
368
|
+
data[attr_name] = values.map{|v| attribute.deserialize(v) }
|
|
369
|
+
else
|
|
370
|
+
data[attr_name] = attribute.deserialize(values.first)
|
|
371
|
+
end
|
|
372
|
+
|
|
373
|
+
end
|
|
374
|
+
data
|
|
375
|
+
end
|
|
376
|
+
|
|
377
|
+
# @private
|
|
378
|
+
protected
|
|
379
|
+
def create_storage
|
|
380
|
+
to_add = serialize_attributes
|
|
381
|
+
sdb_item.attributes.add(to_add.merge(opt_lock_conditions))
|
|
382
|
+
end
|
|
383
|
+
|
|
384
|
+
# @private
|
|
385
|
+
private
|
|
386
|
+
def update_storage
|
|
387
|
+
|
|
388
|
+
to_update = {}
|
|
389
|
+
to_delete = []
|
|
390
|
+
|
|
391
|
+
# serialized_attributes will raise error if the entire record is blank
|
|
392
|
+
attribute_values = serialize_attributes
|
|
393
|
+
|
|
394
|
+
changed.each do |attr_name|
|
|
395
|
+
if values = attribute_values[attr_name]
|
|
396
|
+
to_update[attr_name] = values
|
|
397
|
+
else
|
|
398
|
+
to_delete << attr_name
|
|
399
|
+
end
|
|
400
|
+
end
|
|
401
|
+
|
|
402
|
+
to_update.merge!(opt_lock_conditions)
|
|
403
|
+
|
|
404
|
+
if to_delete.empty?
|
|
405
|
+
sdb_item.attributes.replace(to_update)
|
|
406
|
+
else
|
|
407
|
+
sdb_item.attributes.replace(to_update.merge('_delete_' => to_delete))
|
|
408
|
+
sdb_item.attributes.delete(to_delete + ['_delete_'])
|
|
409
|
+
end
|
|
410
|
+
|
|
411
|
+
end
|
|
412
|
+
|
|
413
|
+
# @return [true]
|
|
414
|
+
# @private
|
|
415
|
+
private
|
|
416
|
+
def delete_storage
|
|
417
|
+
sdb_item.delete(opt_lock_conditions)
|
|
418
|
+
@_deleted = true
|
|
419
|
+
end
|
|
420
|
+
|
|
421
|
+
end
|
|
422
|
+
|
|
423
|
+
# for backwards compatability with the old AWS::Record::Base
|
|
424
|
+
Base = Model
|
|
425
|
+
|
|
426
|
+
end
|
|
427
|
+
end
|