aws-sdk 1.8.5 → 1.9.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 +7 -0
- data/.yardopts +1 -0
- data/README.rdoc +8 -0
- data/lib/aws-sdk.rb +39 -35
- data/lib/aws/api_config/CloudFront-2012-07-01.yml +2398 -0
- data/lib/aws/api_config/DirectConnect-2012-10-25.yml +475 -0
- data/lib/aws/api_config/DynamoDB-2011-12-05.yml +8 -0
- data/lib/aws/api_config/DynamoDB-2012-08-10.yml +1516 -0
- data/lib/aws/api_config/OpsWorks-2013-02-18.yml +2 -2
- data/lib/aws/auto_scaling.rb +44 -44
- data/lib/aws/auto_scaling/activity.rb +1 -1
- data/lib/aws/auto_scaling/activity_collection.rb +14 -15
- data/lib/aws/auto_scaling/client.rb +277 -277
- data/lib/aws/auto_scaling/config.rb +1 -1
- data/lib/aws/auto_scaling/group.rb +35 -36
- data/lib/aws/auto_scaling/group_collection.rb +10 -10
- data/lib/aws/auto_scaling/group_options.rb +19 -19
- data/lib/aws/auto_scaling/instance.rb +27 -27
- data/lib/aws/auto_scaling/instance_collection.rb +10 -10
- data/lib/aws/auto_scaling/launch_configuration.rb +3 -3
- data/lib/aws/auto_scaling/launch_configuration_collection.rb +1 -1
- data/lib/aws/auto_scaling/notification_configuration.rb +2 -2
- data/lib/aws/auto_scaling/notification_configuration_collection.rb +37 -38
- data/lib/aws/auto_scaling/scaling_policy.rb +3 -3
- data/lib/aws/auto_scaling/scaling_policy_collection.rb +6 -6
- data/lib/aws/auto_scaling/scaling_policy_options.rb +8 -7
- data/lib/aws/auto_scaling/scheduled_action.rb +3 -3
- data/lib/aws/auto_scaling/scheduled_action_collection.rb +28 -28
- data/lib/aws/auto_scaling/tag_collection.rb +30 -28
- data/lib/aws/cloud_formation.rb +95 -94
- data/lib/aws/cloud_formation/client.rb +136 -133
- data/lib/aws/cloud_formation/config.rb +1 -1
- data/lib/aws/cloud_formation/stack.rb +37 -37
- data/lib/aws/cloud_formation/stack_collection.rb +28 -27
- data/lib/aws/cloud_formation/stack_event.rb +9 -11
- data/lib/aws/cloud_formation/stack_output.rb +1 -1
- data/lib/aws/cloud_formation/stack_resource.rb +6 -6
- data/lib/aws/cloud_formation/stack_resource_collection.rb +11 -12
- data/lib/aws/cloud_formation/stack_resource_summary_collection.rb +11 -11
- data/lib/aws/cloud_formation/stack_summary_collection.rb +39 -39
- data/lib/aws/cloud_front.rb +21 -21
- data/lib/aws/cloud_front/client.rb +853 -652
- data/lib/aws/cloud_front/request.rb +3 -0
- data/lib/aws/cloud_search.rb +22 -22
- data/lib/aws/cloud_search/client.rb +322 -315
- data/lib/aws/cloud_search/config.rb +1 -1
- data/lib/aws/cloud_watch.rb +39 -39
- data/lib/aws/cloud_watch/alarm.rb +55 -37
- data/lib/aws/cloud_watch/alarm_collection.rb +18 -18
- data/lib/aws/cloud_watch/alarm_history_item_collection.rb +2 -2
- data/lib/aws/cloud_watch/client.rb +360 -146
- data/lib/aws/cloud_watch/config.rb +1 -1
- data/lib/aws/cloud_watch/metric.rb +15 -15
- data/lib/aws/cloud_watch/metric_alarm_collection.rb +17 -17
- data/lib/aws/cloud_watch/metric_collection.rb +16 -16
- data/lib/aws/cloud_watch/metric_statistics.rb +11 -11
- data/lib/aws/core.rb +243 -225
- data/lib/aws/core/async_handle.rb +13 -13
- data/lib/aws/core/cacheable.rb +14 -15
- data/lib/aws/core/client.rb +40 -15
- data/lib/aws/core/collection.rb +42 -46
- data/lib/aws/core/collection/with_limit_and_next_token.rb +1 -1
- data/lib/aws/core/collection/with_next_token.rb +1 -1
- data/lib/aws/core/configuration.rb +97 -133
- data/lib/aws/core/credential_providers.rb +16 -16
- data/lib/aws/core/data.rb +23 -23
- data/lib/aws/core/http/connection_pool.rb +348 -0
- data/lib/aws/core/http/net_http_handler.rb +17 -26
- data/lib/aws/core/http/patch.rb +102 -0
- data/lib/aws/core/http/request.rb +13 -19
- data/lib/aws/core/http/response.rb +2 -2
- data/lib/aws/core/lazy_error_classes.rb +17 -17
- data/lib/aws/core/log_formatter.rb +70 -104
- data/lib/aws/core/options/json_serializer.rb +1 -1
- data/lib/aws/core/options/validator.rb +4 -4
- data/lib/aws/core/page_result.rb +8 -8
- data/lib/aws/core/policy.rb +49 -49
- data/lib/aws/core/region.rb +72 -0
- data/lib/aws/core/region_collection.rb +106 -0
- data/lib/aws/core/resource.rb +5 -5
- data/lib/aws/core/response.rb +20 -17
- data/lib/aws/core/rest_request_builder.rb +4 -4
- data/lib/aws/core/service_interface.rb +24 -2
- data/lib/aws/core/signature/version_3.rb +2 -2
- data/lib/aws/core/uri_escape.rb +1 -1
- data/lib/aws/core/xml/frame_stack.rb +1 -1
- data/lib/aws/core/xml/grammar.rb +3 -4
- data/lib/aws/core/xml/sax_handlers/libxml.rb +2 -2
- data/lib/aws/core/xml/sax_handlers/nokogiri.rb +3 -3
- data/lib/aws/core/xml/sax_handlers/rexml.rb +5 -5
- data/lib/aws/core/xml/stub.rb +9 -9
- data/lib/aws/data_pipeline.rb +21 -21
- data/lib/aws/data_pipeline/client.rb +189 -133
- data/lib/aws/data_pipeline/config.rb +1 -1
- data/lib/aws/direct_connect.rb +74 -0
- data/lib/aws/direct_connect/client.rb +253 -0
- data/lib/aws/direct_connect/config.rb +18 -0
- data/lib/aws/direct_connect/errors.rb +22 -0
- data/lib/aws/direct_connect/request.rb +27 -0
- data/lib/aws/dynamo_db.rb +71 -69
- data/lib/aws/dynamo_db/attribute_collection.rb +53 -58
- data/lib/aws/dynamo_db/batch_get.rb +23 -23
- data/lib/aws/dynamo_db/batch_write.rb +43 -43
- data/lib/aws/dynamo_db/binary.rb +9 -9
- data/lib/aws/dynamo_db/client.rb +494 -509
- data/lib/aws/dynamo_db/client_base.rb +91 -0
- data/lib/aws/dynamo_db/client_v2.rb +825 -0
- data/lib/aws/dynamo_db/config.rb +1 -1
- data/lib/aws/dynamo_db/item.rb +10 -10
- data/lib/aws/dynamo_db/item_collection.rb +75 -75
- data/lib/aws/dynamo_db/table.rb +85 -85
- data/lib/aws/dynamo_db/table_collection.rb +13 -13
- data/lib/aws/ec2.rb +132 -142
- data/lib/aws/ec2/attachment.rb +31 -36
- data/lib/aws/ec2/attachment_collection.rb +1 -1
- data/lib/aws/ec2/availability_zone.rb +4 -4
- data/lib/aws/ec2/client.rb +2272 -2125
- data/lib/aws/ec2/config.rb +1 -1
- data/lib/aws/ec2/customer_gateway.rb +6 -6
- data/lib/aws/ec2/customer_gateway_collection.rb +6 -6
- data/lib/aws/ec2/dhcp_options.rb +3 -3
- data/lib/aws/ec2/dhcp_options_collection.rb +10 -10
- data/lib/aws/ec2/elastic_ip.rb +15 -15
- data/lib/aws/ec2/elastic_ip_collection.rb +11 -15
- data/lib/aws/ec2/export_task.rb +4 -4
- data/lib/aws/ec2/export_task_collection.rb +11 -11
- data/lib/aws/ec2/filtered_collection.rb +6 -8
- data/lib/aws/ec2/image.rb +46 -40
- data/lib/aws/ec2/image_collection.rb +44 -52
- data/lib/aws/ec2/instance.rb +64 -62
- data/lib/aws/ec2/instance_collection.rb +47 -50
- data/lib/aws/ec2/internet_gateway.rb +6 -6
- data/lib/aws/ec2/internet_gateway/attachment.rb +13 -13
- data/lib/aws/ec2/internet_gateway_collection.rb +3 -3
- data/lib/aws/ec2/key_pair.rb +3 -3
- data/lib/aws/ec2/key_pair_collection.rb +12 -12
- data/lib/aws/ec2/network_acl.rb +39 -39
- data/lib/aws/ec2/network_acl/association.rb +2 -2
- data/lib/aws/ec2/network_acl/entry.rb +22 -22
- data/lib/aws/ec2/network_acl_collection.rb +2 -2
- data/lib/aws/ec2/network_interface.rb +13 -4
- data/lib/aws/ec2/network_interface/attachment.rb +3 -3
- data/lib/aws/ec2/network_interface_collection.rb +5 -5
- data/lib/aws/ec2/permission_collection.rb +1 -1
- data/lib/aws/ec2/region.rb +6 -6
- data/lib/aws/ec2/region_collection.rb +1 -1
- data/lib/aws/ec2/reserved_instances_collection.rb +2 -2
- data/lib/aws/ec2/reserved_instances_offering_collection.rb +2 -2
- data/lib/aws/ec2/resource_tag_collection.rb +5 -5
- data/lib/aws/ec2/route_table.rb +14 -14
- data/lib/aws/ec2/route_table/association.rb +22 -22
- data/lib/aws/ec2/route_table/route.rb +8 -8
- data/lib/aws/ec2/route_table_collection.rb +3 -3
- data/lib/aws/ec2/security_group.rb +39 -41
- data/lib/aws/ec2/security_group_collection.rb +19 -21
- data/lib/aws/ec2/snapshot.rb +3 -3
- data/lib/aws/ec2/snapshot_collection.rb +11 -12
- data/lib/aws/ec2/subnet.rb +2 -2
- data/lib/aws/ec2/subnet_collection.rb +17 -17
- data/lib/aws/ec2/tag_collection.rb +1 -1
- data/lib/aws/ec2/tagged_collection.rb +7 -7
- data/lib/aws/ec2/tagged_item.rb +10 -10
- data/lib/aws/ec2/volume.rb +16 -16
- data/lib/aws/ec2/volume_collection.rb +9 -12
- data/lib/aws/ec2/vpc.rb +6 -6
- data/lib/aws/ec2/vpc_collection.rb +10 -10
- data/lib/aws/ec2/vpn_connection.rb +4 -4
- data/lib/aws/ec2/vpn_connection/telemetry.rb +1 -1
- data/lib/aws/ec2/vpn_connection_collection.rb +6 -6
- data/lib/aws/ec2/vpn_gateway.rb +2 -2
- data/lib/aws/ec2/vpn_gateway_collection.rb +5 -5
- data/lib/aws/elastic_beanstalk.rb +12 -12
- data/lib/aws/elastic_beanstalk/client.rb +376 -368
- data/lib/aws/elastic_beanstalk/config.rb +1 -1
- data/lib/aws/elastic_transcoder.rb +5 -5
- data/lib/aws/elastic_transcoder/client.rb +283 -283
- data/lib/aws/elastic_transcoder/config.rb +1 -1
- data/lib/aws/elasticache.rb +12 -12
- data/lib/aws/elasticache/client.rb +484 -479
- data/lib/aws/elasticache/config.rb +1 -1
- data/lib/aws/elb.rb +23 -23
- data/lib/aws/elb/availability_zone_collection.rb +34 -34
- data/lib/aws/elb/backend_server_policy_collection.rb +24 -24
- data/lib/aws/elb/client.rb +153 -153
- data/lib/aws/elb/config.rb +1 -1
- data/lib/aws/elb/errors.rb +1 -1
- data/lib/aws/elb/instance_collection.rb +20 -25
- data/lib/aws/elb/listener.rb +3 -3
- data/lib/aws/elb/listener_collection.rb +8 -8
- data/lib/aws/elb/load_balancer.rb +15 -16
- data/lib/aws/elb/load_balancer_collection.rb +36 -24
- data/lib/aws/elb/load_balancer_policy.rb +1 -1
- data/lib/aws/elb/load_balancer_policy_collection.rb +5 -5
- data/lib/aws/emr.rb +28 -26
- data/lib/aws/emr/client.rb +165 -149
- data/lib/aws/emr/config.rb +1 -1
- data/lib/aws/emr/instance_group.rb +1 -1
- data/lib/aws/emr/instance_group_collection.rb +1 -1
- data/lib/aws/emr/job_flow.rb +27 -26
- data/lib/aws/emr/job_flow_collection.rb +34 -34
- data/lib/aws/errors.rb +7 -7
- data/lib/aws/glacier.rb +21 -21
- data/lib/aws/glacier/archive_collection.rb +2 -2
- data/lib/aws/glacier/client.rb +139 -140
- data/lib/aws/glacier/config.rb +1 -1
- data/lib/aws/glacier/vault.rb +2 -2
- data/lib/aws/glacier/vault_collection.rb +1 -1
- data/lib/aws/iam.rb +133 -144
- data/lib/aws/iam/access_key.rb +17 -17
- data/lib/aws/iam/access_key_collection.rb +22 -22
- data/lib/aws/iam/account_alias_collection.rb +2 -2
- data/lib/aws/iam/client.rb +429 -420
- data/lib/aws/iam/collection.rb +1 -1
- data/lib/aws/iam/config.rb +2 -2
- data/lib/aws/iam/group.rb +8 -8
- data/lib/aws/iam/group_collection.rb +16 -16
- data/lib/aws/iam/group_policy_collection.rb +6 -6
- data/lib/aws/iam/group_user_collection.rb +3 -3
- data/lib/aws/iam/mfa_device.rb +1 -1
- data/lib/aws/iam/mfa_device_collection.rb +9 -9
- data/lib/aws/iam/policy_collection.rb +4 -4
- data/lib/aws/iam/resource.rb +2 -2
- data/lib/aws/iam/server_certificate.rb +1 -1
- data/lib/aws/iam/server_certificate_collection.rb +15 -15
- data/lib/aws/iam/signing_certificate.rb +29 -29
- data/lib/aws/iam/signing_certificate_collection.rb +23 -23
- data/lib/aws/iam/user.rb +33 -38
- data/lib/aws/iam/user_collection.rb +27 -27
- data/lib/aws/iam/user_group_collection.rb +3 -3
- data/lib/aws/iam/user_policy_collection.rb +6 -6
- data/lib/aws/iam/virtual_mfa_device.rb +12 -12
- data/lib/aws/iam/virtual_mfa_device_collection.rb +4 -4
- data/lib/aws/import_export.rb +22 -21
- data/lib/aws/import_export/client.rb +47 -43
- data/lib/aws/ops_works.rb +5 -5
- data/lib/aws/ops_works/client.rb +484 -438
- data/lib/aws/ops_works/config.rb +1 -1
- data/lib/aws/rails.rb +34 -34
- data/lib/aws/rds.rb +18 -18
- data/lib/aws/rds/client.rb +1286 -1277
- data/lib/aws/rds/config.rb +1 -1
- data/lib/aws/rds/db_instance.rb +15 -4
- data/lib/aws/rds/db_snapshot.rb +1 -1
- data/lib/aws/record.rb +50 -24
- data/lib/aws/record/abstract_base.rb +52 -60
- data/lib/aws/record/attributes.rb +79 -79
- data/lib/aws/record/conversion.rb +1 -1
- data/lib/aws/record/dirty_tracking.rb +69 -67
- data/lib/aws/record/errors.rb +21 -21
- data/lib/aws/record/exceptions.rb +2 -2
- data/lib/aws/record/hash_model.rb +20 -21
- data/lib/aws/record/hash_model/attributes.rb +13 -15
- data/lib/aws/record/hash_model/finder_methods.rb +46 -46
- data/lib/aws/record/hash_model/scope.rb +31 -31
- data/lib/aws/record/model.rb +136 -136
- data/lib/aws/record/model/attributes.rb +57 -59
- data/lib/aws/record/model/finder_methods.rb +67 -67
- data/lib/aws/record/model/scope.rb +48 -49
- data/lib/aws/record/naming.rb +1 -1
- data/lib/aws/record/scope.rb +23 -19
- data/lib/aws/record/validations.rb +253 -271
- data/lib/aws/record/validator.rb +3 -3
- data/lib/aws/record/validators/acceptance.rb +1 -3
- data/lib/aws/record/validators/block.rb +1 -3
- data/lib/aws/record/validators/confirmation.rb +1 -3
- data/lib/aws/record/validators/count.rb +2 -4
- data/lib/aws/record/validators/exclusion.rb +2 -4
- data/lib/aws/record/validators/format.rb +2 -4
- data/lib/aws/record/validators/inclusion.rb +1 -3
- data/lib/aws/record/validators/length.rb +5 -7
- data/lib/aws/record/validators/method.rb +1 -3
- data/lib/aws/record/validators/numericality.rb +6 -8
- data/lib/aws/record/validators/presence.rb +1 -3
- data/lib/aws/redshift.rb +14 -14
- data/lib/aws/redshift/client.rb +596 -592
- data/lib/aws/redshift/config.rb +1 -1
- data/lib/aws/route_53.rb +30 -30
- data/lib/aws/route_53/change_batch.rb +7 -7
- data/lib/aws/route_53/client.rb +188 -152
- data/lib/aws/route_53/hosted_zone.rb +4 -4
- data/lib/aws/route_53/hosted_zone_collection.rb +7 -7
- data/lib/aws/route_53/resource_record_set.rb +10 -10
- data/lib/aws/route_53/resource_record_set_collection.rb +6 -6
- data/lib/aws/s3.rb +79 -79
- data/lib/aws/s3/access_control_list.rb +44 -36
- data/lib/aws/s3/acl_options.rb +51 -51
- data/lib/aws/s3/bucket.rb +146 -146
- data/lib/aws/s3/bucket_collection.rb +21 -21
- data/lib/aws/s3/bucket_lifecycle_configuration.rb +81 -82
- data/lib/aws/s3/bucket_tag_collection.rb +4 -2
- data/lib/aws/s3/cipher_io.rb +5 -4
- data/lib/aws/s3/client.rb +89 -84
- data/lib/aws/s3/client/xml.rb +1 -1
- data/lib/aws/s3/config.rb +7 -1
- data/lib/aws/s3/cors_rule.rb +2 -0
- data/lib/aws/s3/cors_rule_collection.rb +42 -40
- data/lib/aws/s3/data_options.rb +16 -11
- data/lib/aws/s3/encryption_utils.rb +2 -2
- data/lib/aws/s3/errors.rb +7 -7
- data/lib/aws/s3/multipart_upload.rb +30 -33
- data/lib/aws/s3/multipart_upload_collection.rb +8 -6
- data/lib/aws/s3/object_collection.rb +35 -35
- data/lib/aws/s3/object_metadata.rb +6 -6
- data/lib/aws/s3/object_version.rb +4 -4
- data/lib/aws/s3/object_version_collection.rb +15 -15
- data/lib/aws/s3/policy.rb +2 -2
- data/lib/aws/s3/prefixed_collection.rb +9 -5
- data/lib/aws/s3/presigned_post.rb +39 -37
- data/lib/aws/s3/request.rb +11 -11
- data/lib/aws/s3/s3_object.rb +210 -200
- data/lib/aws/s3/tree.rb +25 -27
- data/lib/aws/s3/tree/child_collection.rb +3 -3
- data/lib/aws/s3/tree/leaf_node.rb +2 -2
- data/lib/aws/s3/tree/parent.rb +1 -1
- data/lib/aws/s3/website_configuration.rb +13 -13
- data/lib/aws/simple_db.rb +83 -83
- data/lib/aws/simple_db/attribute.rb +9 -7
- data/lib/aws/simple_db/attribute_collection.rb +22 -13
- data/lib/aws/simple_db/client.rb +107 -107
- data/lib/aws/simple_db/config.rb +7 -1
- data/lib/aws/simple_db/consistent_read_option.rb +5 -5
- data/lib/aws/simple_db/domain.rb +4 -2
- data/lib/aws/simple_db/domain_collection.rb +4 -4
- data/lib/aws/simple_db/domain_metadata.rb +5 -5
- data/lib/aws/simple_db/errors.rb +9 -9
- data/lib/aws/simple_db/item.rb +5 -5
- data/lib/aws/simple_db/item_collection.rb +83 -81
- data/lib/aws/simple_db/item_data.rb +4 -4
- data/lib/aws/simple_db/put_attributes.rb +3 -3
- data/lib/aws/simple_email_service.rb +140 -140
- data/lib/aws/simple_email_service/client.rb +82 -76
- data/lib/aws/simple_email_service/config.rb +1 -2
- data/lib/aws/simple_email_service/email_address_collection.rb +3 -3
- data/lib/aws/simple_email_service/identity.rb +8 -8
- data/lib/aws/simple_email_service/quotas.rb +8 -6
- data/lib/aws/simple_workflow.rb +106 -106
- data/lib/aws/simple_workflow/activity_task.rb +15 -22
- data/lib/aws/simple_workflow/activity_task_collection.rb +15 -15
- data/lib/aws/simple_workflow/activity_type.rb +23 -23
- data/lib/aws/simple_workflow/activity_type_collection.rb +23 -23
- data/lib/aws/simple_workflow/client.rb +1004 -956
- data/lib/aws/simple_workflow/config.rb +1 -1
- data/lib/aws/simple_workflow/count.rb +5 -5
- data/lib/aws/simple_workflow/decision_task.rb +129 -129
- data/lib/aws/simple_workflow/decision_task_collection.rb +59 -59
- data/lib/aws/simple_workflow/domain.rb +11 -11
- data/lib/aws/simple_workflow/domain_collection.rb +26 -26
- data/lib/aws/simple_workflow/history_event.rb +32 -32
- data/lib/aws/simple_workflow/history_event_collection.rb +3 -3
- data/lib/aws/simple_workflow/option_formatters.rb +5 -5
- data/lib/aws/simple_workflow/request.rb +1 -1
- data/lib/aws/simple_workflow/resource.rb +1 -1
- data/lib/aws/simple_workflow/type.rb +8 -8
- data/lib/aws/simple_workflow/type_collection.rb +15 -15
- data/lib/aws/simple_workflow/workflow_execution.rb +70 -72
- data/lib/aws/simple_workflow/workflow_execution_collection.rb +130 -130
- data/lib/aws/simple_workflow/workflow_type.rb +27 -25
- data/lib/aws/simple_workflow/workflow_type_collection.rb +20 -20
- data/lib/aws/sns.rb +25 -25
- data/lib/aws/sns/client.rb +55 -55
- data/lib/aws/sns/config.rb +1 -1
- data/lib/aws/sns/policy.rb +1 -1
- data/lib/aws/sns/subscription.rb +7 -7
- data/lib/aws/sns/subscription_collection.rb +5 -5
- data/lib/aws/sns/topic.rb +49 -49
- data/lib/aws/sns/topic_collection.rb +2 -2
- data/lib/aws/sns/topic_subscription_collection.rb +5 -5
- data/lib/aws/sqs.rb +20 -20
- data/lib/aws/sqs/client.rb +78 -78
- data/lib/aws/sqs/config.rb +1 -1
- data/lib/aws/sqs/errors.rb +12 -12
- data/lib/aws/sqs/queue.rb +66 -67
- data/lib/aws/sqs/queue_collection.rb +16 -8
- data/lib/aws/sqs/received_message.rb +7 -6
- data/lib/aws/storage_gateway.rb +21 -21
- data/lib/aws/storage_gateway/client.rb +269 -202
- data/lib/aws/storage_gateway/config.rb +1 -1
- data/lib/aws/sts.rb +10 -8
- data/lib/aws/sts/client.rb +35 -35
- data/lib/aws/sts/session.rb +3 -3
- data/lib/aws/version.rb +1 -2
- metadata +23 -21
- data/lib/aws/core/autoloader.rb +0 -64
- data/lib/net/http/connection_pool.rb +0 -226
- data/lib/net/http/connection_pool/connection.rb +0 -189
- data/lib/net/http/connection_pool/session.rb +0 -126
|
@@ -11,8 +11,6 @@
|
|
|
11
11
|
# ANY KIND, either express or implied. See the License for the specific
|
|
12
12
|
# language governing permissions and limitations under the License.
|
|
13
13
|
|
|
14
|
-
require 'aws/record/attributes.rb'
|
|
15
|
-
|
|
16
14
|
module AWS
|
|
17
15
|
module Record
|
|
18
16
|
class HashModel
|
|
@@ -29,7 +27,7 @@ module AWS
|
|
|
29
27
|
# recipe = Recipe.new(:name => "Buttermilk Pancakes")
|
|
30
28
|
# recipe.name #=> 'Buttermilk Pancakes'
|
|
31
29
|
#
|
|
32
|
-
# @example A string attribute with
|
|
30
|
+
# @example A string attribute with `:set` set to true
|
|
33
31
|
#
|
|
34
32
|
# class Recipe < AWS::Record::HashModel
|
|
35
33
|
# string_attr :tags, :set => true
|
|
@@ -48,12 +46,12 @@ module AWS
|
|
|
48
46
|
|
|
49
47
|
# Adds an integer attribute to this class.
|
|
50
48
|
#
|
|
51
|
-
#
|
|
52
|
-
#
|
|
53
|
-
#
|
|
49
|
+
# class Recipe < AWS::Record::HashModel
|
|
50
|
+
# integer_attr :servings
|
|
51
|
+
# end
|
|
54
52
|
#
|
|
55
|
-
#
|
|
56
|
-
#
|
|
53
|
+
# recipe = Recipe.new(:servings => '10')
|
|
54
|
+
# recipe.servings #=> 10
|
|
57
55
|
#
|
|
58
56
|
# @param [Symbol] name The name of the attribute.
|
|
59
57
|
# @param [Hash] options
|
|
@@ -65,12 +63,12 @@ module AWS
|
|
|
65
63
|
|
|
66
64
|
# Adds a float attribute to this class.
|
|
67
65
|
#
|
|
68
|
-
#
|
|
69
|
-
#
|
|
70
|
-
#
|
|
66
|
+
# class Listing < AWS::Record::HashModel
|
|
67
|
+
# float_attr :score
|
|
68
|
+
# end
|
|
71
69
|
#
|
|
72
|
-
#
|
|
73
|
-
#
|
|
70
|
+
# listing = Listing.new(:score => '123.456')
|
|
71
|
+
# listing.score # => 123.456
|
|
74
72
|
#
|
|
75
73
|
# @param [Symbol] name The name of the attribute.
|
|
76
74
|
# @param [Hash] options
|
|
@@ -119,7 +117,7 @@ module AWS
|
|
|
119
117
|
# recipe = Recipe.new(:invented => Time.now)
|
|
120
118
|
# recipe.invented #=> <DateTime ...>
|
|
121
119
|
#
|
|
122
|
-
# If you add a datetime_attr for
|
|
120
|
+
# If you add a datetime_attr for `:created_at` and/or `:updated_at` those
|
|
123
121
|
# will be automanaged.
|
|
124
122
|
#
|
|
125
123
|
# @param [Symbol] name The name of the attribute.
|
|
@@ -172,7 +170,7 @@ module AWS
|
|
|
172
170
|
end
|
|
173
171
|
|
|
174
172
|
# A convenience method for adding the standard two datetime attributes
|
|
175
|
-
#
|
|
173
|
+
# `:created_at` and `:updated_at`.
|
|
176
174
|
#
|
|
177
175
|
# @example
|
|
178
176
|
#
|
|
@@ -24,65 +24,65 @@ module AWS
|
|
|
24
24
|
# was no data found for the given id.
|
|
25
25
|
# @return [Record::HashModel] Returns the record with the given id.
|
|
26
26
|
def find_by_id id, options = {}
|
|
27
|
-
|
|
27
|
+
|
|
28
28
|
table = dynamo_db_table(options[:shard])
|
|
29
29
|
|
|
30
30
|
data = table.items[id].attributes.to_h
|
|
31
|
-
|
|
31
|
+
|
|
32
32
|
raise RecordNotFound, "no data found for id: #{id}" if data.empty?
|
|
33
|
-
|
|
33
|
+
|
|
34
34
|
obj = self.new(:shard => table)
|
|
35
35
|
obj.send(:hydrate, id, data)
|
|
36
36
|
obj
|
|
37
|
-
|
|
37
|
+
|
|
38
38
|
end
|
|
39
39
|
alias_method :[], :find_by_id
|
|
40
|
-
|
|
41
|
-
# Finds records in Amazon DynamoDB and returns them as objects of
|
|
40
|
+
|
|
41
|
+
# Finds records in Amazon DynamoDB and returns them as objects of
|
|
42
42
|
# the current class.
|
|
43
43
|
#
|
|
44
|
-
# Finding
|
|
44
|
+
# Finding `:all` returns an enumerable scope object
|
|
45
45
|
#
|
|
46
|
-
#
|
|
47
|
-
#
|
|
48
|
-
#
|
|
46
|
+
# People.find(:all, :limit => 10).each do |person|
|
|
47
|
+
# puts person.name
|
|
48
|
+
# end
|
|
49
49
|
#
|
|
50
|
-
# Finding
|
|
50
|
+
# Finding `:first` returns a single record (or nil)
|
|
51
51
|
#
|
|
52
|
-
#
|
|
52
|
+
# boss = People.find(:first)
|
|
53
53
|
#
|
|
54
|
-
# Find accepts a hash of find modifiers (
|
|
54
|
+
# Find accepts a hash of find modifiers (`:shard` and `:limit`).
|
|
55
55
|
# You can also choose to omit these modifiers and
|
|
56
56
|
# chain them on the scope object returned. In the following
|
|
57
57
|
# example only one request is made to SimpleDB (when #each is
|
|
58
58
|
# called)
|
|
59
59
|
#
|
|
60
|
-
#
|
|
60
|
+
# people = People.find(:all, :limit => 10)
|
|
61
61
|
#
|
|
62
|
-
#
|
|
62
|
+
# people = people.limit(10).find(:all)
|
|
63
63
|
#
|
|
64
64
|
# @overload find(id)
|
|
65
65
|
# @param id The record to find, raises an exception if the record is
|
|
66
66
|
# not found.
|
|
67
67
|
#
|
|
68
68
|
# @overload find(mode, options = {})
|
|
69
|
-
# @param [:all,:first] mode (:all) When finding
|
|
70
|
-
# and array is returned of records. When finding
|
|
71
|
-
#
|
|
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
72
|
# @param [Hash] options
|
|
73
|
-
# @option options [Integer] :shard The shard name of the Amazon
|
|
73
|
+
# @option options [Integer] :shard The shard name of the Amazon
|
|
74
74
|
# DynamoDB table to search.
|
|
75
75
|
# @option options [Integer] :limit The max number of records to fetch.
|
|
76
76
|
def find *args
|
|
77
77
|
new_scope.find(*args)
|
|
78
78
|
end
|
|
79
|
-
|
|
79
|
+
|
|
80
80
|
# Returns a chainable scope object that restricts further scopes to a
|
|
81
81
|
# particular table.
|
|
82
82
|
#
|
|
83
|
-
#
|
|
84
|
-
#
|
|
85
|
-
#
|
|
83
|
+
# Book.shard('books-2').each do |book|
|
|
84
|
+
# # ...
|
|
85
|
+
# end
|
|
86
86
|
#
|
|
87
87
|
# @param [String] shard_name
|
|
88
88
|
# @return [Scope] Returns a scope for restricting the table searched.
|
|
@@ -90,19 +90,19 @@ module AWS
|
|
|
90
90
|
new_scope.shard(shard_name)
|
|
91
91
|
end
|
|
92
92
|
alias_method :domain, :shard # backwards compat
|
|
93
|
-
|
|
93
|
+
|
|
94
94
|
# Returns an enumerable scope object represents all records.
|
|
95
95
|
#
|
|
96
|
-
#
|
|
97
|
-
#
|
|
98
|
-
#
|
|
96
|
+
# Book.all.each do |book|
|
|
97
|
+
# # ...
|
|
98
|
+
# end
|
|
99
99
|
#
|
|
100
|
-
# This method is equivalent to
|
|
100
|
+
# This method is equivalent to `find(:all)`, and therefore you can also
|
|
101
101
|
# pass aditional options.
|
|
102
102
|
#
|
|
103
|
-
#
|
|
104
|
-
#
|
|
105
|
-
#
|
|
103
|
+
# Book.all(:where => { :author' => 'me' }).each do |my_book|
|
|
104
|
+
# # ...
|
|
105
|
+
# end
|
|
106
106
|
#
|
|
107
107
|
# @return [Scope] Returns an enumerable scope object.
|
|
108
108
|
#
|
|
@@ -114,53 +114,53 @@ module AWS
|
|
|
114
114
|
def each &block
|
|
115
115
|
all.each(&block)
|
|
116
116
|
end
|
|
117
|
-
|
|
117
|
+
|
|
118
118
|
# Counts records Amazon DynamoDB.
|
|
119
119
|
#
|
|
120
|
-
#
|
|
121
|
-
#
|
|
120
|
+
# class Product < AWS::Record::HashModel
|
|
121
|
+
# end
|
|
122
122
|
#
|
|
123
|
-
#
|
|
124
|
-
#
|
|
123
|
+
# # returns the count of records in the 'Product' table
|
|
124
|
+
# Product.count
|
|
125
125
|
#
|
|
126
126
|
# You can specify the table via #shard
|
|
127
127
|
#
|
|
128
|
-
#
|
|
129
|
-
#
|
|
128
|
+
# # returns the count of records in the 'products-1' table
|
|
129
|
+
# Product.shard('products-1').count
|
|
130
130
|
#
|
|
131
131
|
# You can also specify the shard as an option to #count.
|
|
132
132
|
#
|
|
133
|
-
#
|
|
133
|
+
# Product.count(:shard => 'table-name')
|
|
134
134
|
#
|
|
135
135
|
# Chaining #count with #limit has no effect on the count.
|
|
136
136
|
#
|
|
137
|
-
#
|
|
137
|
+
# Product.limit(10).count # same as Product.count, limit ignored
|
|
138
138
|
#
|
|
139
139
|
# @param [Hash] options
|
|
140
140
|
#
|
|
141
141
|
# @option [String] :shard Which shard to count records in.
|
|
142
|
-
#
|
|
142
|
+
#
|
|
143
143
|
# @return [Integer] The count of records in the table.
|
|
144
144
|
#
|
|
145
145
|
def count options = {}
|
|
146
146
|
new_scope.count(options)
|
|
147
147
|
end
|
|
148
148
|
alias_method :size, :count
|
|
149
|
-
|
|
149
|
+
|
|
150
150
|
# @return [Object,nil] Returns the first record found. If there were
|
|
151
151
|
# no records found, nil is returned.
|
|
152
152
|
def first options = {}
|
|
153
153
|
new_scope.first(options)
|
|
154
154
|
end
|
|
155
|
-
|
|
155
|
+
|
|
156
156
|
# The maximum number of records to return. By default, all records
|
|
157
157
|
# matching the where conditions will be returned from a find.
|
|
158
|
-
#
|
|
159
|
-
#
|
|
158
|
+
#
|
|
159
|
+
# People.limit(10).each {|person| ... }
|
|
160
160
|
#
|
|
161
161
|
# Limit can be chained with other scope modifiers:
|
|
162
162
|
#
|
|
163
|
-
#
|
|
163
|
+
# People.where(:age => 40).limit(10).each {|person| ... }
|
|
164
164
|
#
|
|
165
165
|
def limit limit
|
|
166
166
|
new_scope.limit(limit)
|
|
@@ -10,73 +10,73 @@
|
|
|
10
10
|
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
|
11
11
|
# ANY KIND, either express or implied. See the License for the specific
|
|
12
12
|
# language governing permissions and limitations under the License.
|
|
13
|
-
|
|
13
|
+
|
|
14
14
|
module AWS
|
|
15
15
|
module Record
|
|
16
16
|
class HashModel
|
|
17
17
|
|
|
18
18
|
# The primary interface for finding records with {AWS::Record::HashModel}.
|
|
19
19
|
#
|
|
20
|
-
#
|
|
20
|
+
# ## Getting a Scope Object
|
|
21
21
|
#
|
|
22
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.
|
|
23
|
+
# Scope objects are returned from the AWS::Record::HashModel finder
|
|
24
|
+
# methods # (e.g. `shard` and `limit`).
|
|
25
25
|
#
|
|
26
|
-
#
|
|
27
|
-
#
|
|
26
|
+
# books = Book.limit(100)
|
|
27
|
+
# books.class #=> AWS::Record::HashModel::Scope
|
|
28
28
|
#
|
|
29
|
-
# Scopes are also returned from methods defined with the
|
|
29
|
+
# Scopes are also returned from methods defined with the `scope` method.
|
|
30
30
|
#
|
|
31
|
-
#
|
|
32
|
-
#
|
|
33
|
-
#
|
|
31
|
+
# class Book < AWS::Record::HashModel
|
|
32
|
+
# scope :sampling, limit(10)
|
|
33
|
+
# end
|
|
34
34
|
#
|
|
35
|
-
#
|
|
35
|
+
# Book.sampling #=> returns a scope that limits to 10
|
|
36
36
|
#
|
|
37
|
-
#
|
|
37
|
+
# ## Chaining Scopes
|
|
38
38
|
#
|
|
39
39
|
# Scope objects represent a request, but do not actualy make a request
|
|
40
40
|
# until required. This allows you to chain requests
|
|
41
41
|
#
|
|
42
|
-
#
|
|
43
|
-
#
|
|
44
|
-
#
|
|
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
45
|
#
|
|
46
|
-
#
|
|
47
|
-
#
|
|
48
|
-
#
|
|
46
|
+
# books.each do |book|
|
|
47
|
+
# # yields up to 10 books from the table 'books-1'
|
|
48
|
+
# end
|
|
49
49
|
#
|
|
50
50
|
# The following methods returns a scope that can be chained.
|
|
51
51
|
#
|
|
52
52
|
# * {#shard}
|
|
53
53
|
# * {#limit}
|
|
54
54
|
#
|
|
55
|
-
#
|
|
55
|
+
# ## Terminating Scopes
|
|
56
56
|
#
|
|
57
57
|
# To terminate a scope you can enumerate it or call #first.
|
|
58
58
|
#
|
|
59
|
-
#
|
|
60
|
-
#
|
|
59
|
+
# # terminate a scope by enumerating
|
|
60
|
+
# Book.limit(10).each {|book| ... }
|
|
61
61
|
#
|
|
62
|
-
#
|
|
63
|
-
#
|
|
62
|
+
# # terminate a scope by getting the first record
|
|
63
|
+
# Book.shard('books-1').first
|
|
64
64
|
#
|
|
65
65
|
class Scope < Record::Scope
|
|
66
|
-
|
|
66
|
+
|
|
67
67
|
private
|
|
68
68
|
def _each_object &block
|
|
69
|
-
|
|
69
|
+
|
|
70
70
|
items = _item_collection
|
|
71
|
-
|
|
71
|
+
|
|
72
72
|
items.select(:limit => @options[:limit]).each do |item_data|
|
|
73
73
|
obj = base_class.new(:shard => _shard)
|
|
74
74
|
obj.send(:hydrate, item_data.attributes['id'], item_data.attributes)
|
|
75
75
|
yield(obj)
|
|
76
76
|
end
|
|
77
|
-
|
|
77
|
+
|
|
78
78
|
end
|
|
79
|
-
|
|
79
|
+
|
|
80
80
|
private
|
|
81
81
|
def _merge_scope scope
|
|
82
82
|
merged = self
|
|
@@ -87,7 +87,7 @@ module AWS
|
|
|
87
87
|
end
|
|
88
88
|
merged
|
|
89
89
|
end
|
|
90
|
-
|
|
90
|
+
|
|
91
91
|
private
|
|
92
92
|
def _handle_options options
|
|
93
93
|
scope = self
|
|
@@ -96,12 +96,12 @@ module AWS
|
|
|
96
96
|
end
|
|
97
97
|
scope
|
|
98
98
|
end
|
|
99
|
-
|
|
99
|
+
|
|
100
100
|
private
|
|
101
101
|
def _item_collection
|
|
102
102
|
base_class.dynamo_db_table(_shard).items
|
|
103
103
|
end
|
|
104
|
-
|
|
104
|
+
|
|
105
105
|
end
|
|
106
106
|
end
|
|
107
107
|
end
|
data/lib/aws/record/model.rb
CHANGED
|
@@ -13,94 +13,90 @@
|
|
|
13
13
|
|
|
14
14
|
# todo move these to included modules (like validations and naming)
|
|
15
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
16
|
|
|
21
17
|
module AWS
|
|
22
18
|
module Record
|
|
23
19
|
|
|
24
20
|
# An ActiveRecord-like interface built ontop of Amazon SimpleDB.
|
|
25
21
|
#
|
|
26
|
-
#
|
|
22
|
+
# class Book < AWS::Record::Model
|
|
27
23
|
#
|
|
28
|
-
#
|
|
29
|
-
#
|
|
30
|
-
#
|
|
24
|
+
# string_attr :title
|
|
25
|
+
# string_attr :author
|
|
26
|
+
# integer_attr :number_of_pages
|
|
31
27
|
#
|
|
32
|
-
#
|
|
28
|
+
# timestamps # adds a :created_at and :updated_at pair of timestamps
|
|
33
29
|
#
|
|
34
|
-
#
|
|
30
|
+
# end
|
|
35
31
|
#
|
|
36
|
-
#
|
|
37
|
-
#
|
|
32
|
+
# b = Book.new(:title => 'My Book', :author => 'Me', :pages => 1)
|
|
33
|
+
# b.save
|
|
38
34
|
#
|
|
39
|
-
#
|
|
35
|
+
# # Attribute Macros
|
|
40
36
|
#
|
|
41
37
|
# When extending AWS::Record::Model you should first consider what
|
|
42
38
|
# attributes your class should have. Unlike ActiveRecord, AWS::Record
|
|
43
39
|
# models are not backed by a database table/schema. You must choose what
|
|
44
|
-
# attributes (and what types) you need.
|
|
40
|
+
# attributes (and what types) you need.
|
|
45
41
|
#
|
|
46
|
-
# *
|
|
47
|
-
# *
|
|
48
|
-
# *
|
|
49
|
-
# *
|
|
50
|
-
# *
|
|
51
|
-
# *
|
|
42
|
+
# * `string_attr`
|
|
43
|
+
# * `boolean_attr`
|
|
44
|
+
# * `integer_attr`
|
|
45
|
+
# * `float_attr`
|
|
46
|
+
# * `datetime_attr`
|
|
47
|
+
# * `date_attr`
|
|
52
48
|
#
|
|
53
|
-
#
|
|
49
|
+
# ### Usage
|
|
54
50
|
#
|
|
55
51
|
# Normally you just call these methods inside your model class definition:
|
|
56
52
|
#
|
|
57
|
-
#
|
|
58
|
-
#
|
|
59
|
-
#
|
|
60
|
-
#
|
|
61
|
-
#
|
|
62
|
-
#
|
|
63
|
-
#
|
|
53
|
+
# class Book < AWS::Record::Model
|
|
54
|
+
# string_attr :title
|
|
55
|
+
# boolean_attr :has_been_read
|
|
56
|
+
# integer_attr :number_of_pages
|
|
57
|
+
# float_attr :weight_in_pounds
|
|
58
|
+
# datetime_attr :published_at
|
|
59
|
+
# end
|
|
64
60
|
#
|
|
65
61
|
# For each attribute macro a pair of setter/getter methods are added #
|
|
66
62
|
# to your class (and a few other useful methods).
|
|
67
63
|
#
|
|
68
|
-
#
|
|
69
|
-
#
|
|
70
|
-
#
|
|
71
|
-
#
|
|
72
|
-
#
|
|
73
|
-
#
|
|
74
|
-
#
|
|
64
|
+
# b = Book.new
|
|
65
|
+
# b.title = "My Book"
|
|
66
|
+
# b.has_been_read = true
|
|
67
|
+
# b.number_of_pages = 1000
|
|
68
|
+
# b.weight_in_pounds = 1.1
|
|
69
|
+
# b.published_at = Time.now
|
|
70
|
+
# b.save
|
|
75
71
|
#
|
|
76
|
-
#
|
|
77
|
-
#
|
|
78
|
-
#
|
|
72
|
+
# b.id #=> "0aa894ca-8223-4d34-831e-e5134b2bb71c"
|
|
73
|
+
# b.attributes
|
|
74
|
+
# #=> { 'title' => 'My Book', 'has_been_read' => true, ... }
|
|
79
75
|
#
|
|
80
|
-
#
|
|
76
|
+
# ### Default Values
|
|
81
77
|
#
|
|
82
|
-
# All attribute macros accept the
|
|
78
|
+
# All attribute macros accept the `:default_value` option. This sets
|
|
83
79
|
# a value that is populated onto all new instnaces of the class.
|
|
84
80
|
#
|
|
85
|
-
#
|
|
86
|
-
#
|
|
87
|
-
#
|
|
81
|
+
# class Book < AWS::Record::Model
|
|
82
|
+
# string_attr :author, :default_value => 'Me'
|
|
83
|
+
# end
|
|
88
84
|
#
|
|
89
|
-
#
|
|
85
|
+
# Book.new.author #=> 'Me'
|
|
90
86
|
#
|
|
91
|
-
#
|
|
87
|
+
# ### Multi-Valued (Set) Attributes
|
|
92
88
|
#
|
|
93
89
|
# AWS::Record permits storing multiple values with a single attribute.
|
|
94
90
|
#
|
|
95
|
-
#
|
|
96
|
-
#
|
|
97
|
-
#
|
|
91
|
+
# class Book < AWS::Record::Model
|
|
92
|
+
# string_attr :tags, :set => true
|
|
93
|
+
# end
|
|
98
94
|
#
|
|
99
|
-
#
|
|
100
|
-
#
|
|
95
|
+
# b = Book.new
|
|
96
|
+
# b.tags #=> #<Set: {}>
|
|
101
97
|
#
|
|
102
|
-
#
|
|
103
|
-
#
|
|
98
|
+
# b.tags = ['fiction', 'fantasy']
|
|
99
|
+
# b.tags #=> #<Set: {'fiction', 'fantasy'}>
|
|
104
100
|
#
|
|
105
101
|
# These multi-valued attributes are treated as sets, not arrays. This
|
|
106
102
|
# means:
|
|
@@ -108,153 +104,153 @@ module AWS
|
|
|
108
104
|
# * values are unordered
|
|
109
105
|
# * duplicate values are automatically omitted
|
|
110
106
|
#
|
|
111
|
-
# Please consider these limitations when you choose to use the
|
|
107
|
+
# Please consider these limitations when you choose to use the `:set`
|
|
112
108
|
# option with the attribute macros.
|
|
113
|
-
#
|
|
114
|
-
#
|
|
109
|
+
#
|
|
110
|
+
# # Validations
|
|
115
111
|
#
|
|
116
112
|
# It's important to validate models before there are persisted to keep
|
|
117
113
|
# your data clean. AWS::Record supports most of the ActiveRecord style
|
|
118
114
|
# validators.
|
|
119
115
|
#
|
|
120
|
-
#
|
|
121
|
-
#
|
|
122
|
-
#
|
|
123
|
-
#
|
|
116
|
+
# class Book < AWS::Record::Model
|
|
117
|
+
# string_attr :title
|
|
118
|
+
# validates_presence_of :title
|
|
119
|
+
# end
|
|
124
120
|
#
|
|
125
|
-
#
|
|
126
|
-
#
|
|
127
|
-
#
|
|
121
|
+
# b = Book.new
|
|
122
|
+
# b.valid? #=> false
|
|
123
|
+
# b.errors.full_messages #=> ['Title may not be blank']
|
|
128
124
|
#
|
|
129
125
|
# Validations are checked before saving a record. If any of the validators
|
|
130
126
|
# adds an error, the the save will fail.
|
|
131
127
|
#
|
|
132
128
|
# For more information about the available validation methods see
|
|
133
129
|
# {Validations}.
|
|
134
|
-
#
|
|
135
|
-
#
|
|
130
|
+
#
|
|
131
|
+
# # Finder Methods
|
|
136
132
|
#
|
|
137
133
|
# You can find records by their ID. Each record gets a UUID when it
|
|
138
134
|
# is saved for the first time. You can use this ID to fetch the record
|
|
139
135
|
# at a latter time:
|
|
140
136
|
#
|
|
141
|
-
#
|
|
137
|
+
# b = Book["0aa894ca-8223-4d34-831e-e5134b2bb71c"]
|
|
142
138
|
#
|
|
143
|
-
#
|
|
139
|
+
# b = Book.find("0aa894ca-8223-4d34-831e-e5134b2bb71c")
|
|
144
140
|
#
|
|
145
141
|
# If you try to find a record by ID that has no data an error will
|
|
146
142
|
# be raised.
|
|
147
143
|
#
|
|
148
|
-
#
|
|
144
|
+
# ### All
|
|
149
145
|
#
|
|
150
|
-
# You can enumerate all of your records using
|
|
146
|
+
# You can enumerate all of your records using `all`.
|
|
151
147
|
#
|
|
152
|
-
#
|
|
153
|
-
#
|
|
154
|
-
#
|
|
148
|
+
# Book.all.each do |book|
|
|
149
|
+
# puts book.id
|
|
150
|
+
# end
|
|
155
151
|
#
|
|
156
|
-
#
|
|
157
|
-
#
|
|
158
|
-
#
|
|
152
|
+
# Book.find(:all) do |book|
|
|
153
|
+
# puts book.id
|
|
154
|
+
# end
|
|
159
155
|
#
|
|
160
156
|
# Be careful when enumerating all. Depending on the number of records
|
|
161
|
-
# and number of attributes each record has, this can take a while,
|
|
157
|
+
# and number of attributes each record has, this can take a while,
|
|
162
158
|
# causing quite a few requests.
|
|
163
159
|
#
|
|
164
|
-
#
|
|
160
|
+
# ### First
|
|
165
161
|
#
|
|
166
|
-
# If you only want a single record, you should use
|
|
162
|
+
# If you only want a single record, you should use `first`.
|
|
167
163
|
#
|
|
168
|
-
#
|
|
164
|
+
# b = Book.first
|
|
169
165
|
#
|
|
170
|
-
#
|
|
166
|
+
# ### Modifiers
|
|
171
167
|
#
|
|
172
168
|
# Frequently you do not want ALL records or the very first record. You
|
|
173
|
-
# can pass options to
|
|
169
|
+
# can pass options to `find`, `all` and `first`.
|
|
174
170
|
#
|
|
175
|
-
#
|
|
171
|
+
# my_books = Book.find(:all, :where => 'owner = "Me"')
|
|
176
172
|
#
|
|
177
|
-
#
|
|
173
|
+
# book = Book.first(:where => { :has_been_read => false })
|
|
178
174
|
#
|
|
179
175
|
# 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
176
|
#
|
|
185
|
-
#
|
|
177
|
+
# * `:where` - Conditions that must be met to be returned
|
|
178
|
+
# * `:order` - The order to sort matched records by
|
|
179
|
+
# * `:limit` - The maximum number of records to return
|
|
180
|
+
#
|
|
181
|
+
# # Scopes
|
|
186
182
|
#
|
|
187
183
|
# More useful than writing query fragments all over the place is to
|
|
188
184
|
# name your most common conditions for reuse.
|
|
189
185
|
#
|
|
190
|
-
#
|
|
186
|
+
# class Book < AWS::Record::Model
|
|
191
187
|
#
|
|
192
|
-
#
|
|
193
|
-
#
|
|
194
|
-
# scope :unread, where(:has_been_read => false)
|
|
188
|
+
# scope :mine, where(:owner => 'Me')
|
|
195
189
|
#
|
|
196
|
-
#
|
|
190
|
+
# scope :unread, where(:has_been_read => false)
|
|
197
191
|
#
|
|
198
|
-
#
|
|
192
|
+
# scope :by_popularity, order(:score, :desc)
|
|
199
193
|
#
|
|
200
|
-
#
|
|
194
|
+
# scope :top_10, by_popularity.limit(10)
|
|
201
195
|
#
|
|
202
|
-
#
|
|
203
|
-
#
|
|
204
|
-
#
|
|
196
|
+
# end
|
|
197
|
+
#
|
|
198
|
+
# # The following expression returns 10 books that belong
|
|
199
|
+
# # to me, that are unread sorted by popularity.
|
|
200
|
+
# next_good_reads = Book.mine.unread.top_10
|
|
205
201
|
#
|
|
206
202
|
# There are 3 standard scope methods:
|
|
207
203
|
#
|
|
208
|
-
# *
|
|
209
|
-
# *
|
|
210
|
-
# *
|
|
204
|
+
# * `where`
|
|
205
|
+
# * `order`
|
|
206
|
+
# * `limit`
|
|
211
207
|
#
|
|
212
|
-
#
|
|
208
|
+
# ### Conditions (where)
|
|
213
209
|
#
|
|
214
210
|
# Where accepts aruments in a number of forms:
|
|
215
211
|
#
|
|
216
|
-
# 1. As an sql-like fragment. If you need to escape values this form is
|
|
212
|
+
# 1. As an sql-like fragment. If you need to escape values this form is
|
|
217
213
|
# not suggested.
|
|
218
214
|
#
|
|
219
|
-
#
|
|
215
|
+
# Book.where('title = "My Book"')
|
|
220
216
|
#
|
|
221
217
|
# 2. An sql-like fragment, with placeholders. This escapes quoted
|
|
222
218
|
# arguments properly to avoid injection.
|
|
223
219
|
#
|
|
224
|
-
#
|
|
220
|
+
# Book.where('title = ?', 'My Book')
|
|
225
221
|
#
|
|
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
|
|
222
|
+
# 3. A hash of key-value pairs. This is the simplest form, but also the
|
|
223
|
+
# least flexible. You can not use this form if you need more complex
|
|
228
224
|
# expressions that use or.
|
|
229
225
|
#
|
|
230
|
-
#
|
|
226
|
+
# Book.where(:title => 'My Book')
|
|
231
227
|
#
|
|
232
|
-
#
|
|
228
|
+
# ### Order
|
|
233
229
|
#
|
|
234
230
|
# This orders the records as returned by AWS. Default ordering is ascending.
|
|
235
231
|
# Pass the value :desc as a second argument to sort in reverse ordering.
|
|
236
232
|
#
|
|
237
|
-
#
|
|
238
|
-
#
|
|
233
|
+
# Book.order(:title) # alphabetical ordering
|
|
234
|
+
# Book.order(:title, :desc) # reverse alphabetical ordering
|
|
239
235
|
#
|
|
240
|
-
# You may only order by a single attribute. If you call order twice in the
|
|
236
|
+
# You may only order by a single attribute. If you call order twice in the
|
|
241
237
|
# chain, the last call gets presedence:
|
|
242
238
|
#
|
|
243
|
-
#
|
|
239
|
+
# Book.order(:title).order(:price)
|
|
244
240
|
#
|
|
245
241
|
# In this example the books will be ordered by :price and the order(:title)
|
|
246
242
|
# is lost.
|
|
247
243
|
#
|
|
248
|
-
#
|
|
244
|
+
# ### Limit
|
|
249
245
|
#
|
|
250
|
-
# Just call
|
|
246
|
+
# Just call `limit` with an integer argument. This sets the maximum
|
|
251
247
|
# number of records to retrieve:
|
|
252
248
|
#
|
|
253
|
-
#
|
|
249
|
+
# Book.limit(2)
|
|
254
250
|
#
|
|
255
|
-
#
|
|
251
|
+
# ### Delayed Execution
|
|
256
252
|
#
|
|
257
|
-
# It should be noted that all finds are lazy (except
|
|
253
|
+
# It should be noted that all finds are lazy (except `first`). This
|
|
258
254
|
# means the value returned is not an array of records, rather a handle
|
|
259
255
|
# to a {Scope} object that will return records when you enumerate over them.
|
|
260
256
|
#
|
|
@@ -262,49 +258,53 @@ module AWS
|
|
|
262
258
|
# In the following example no request is made until the call to
|
|
263
259
|
# each_with_index.
|
|
264
260
|
#
|
|
265
|
-
#
|
|
266
|
-
#
|
|
261
|
+
# all_books = Books.all
|
|
262
|
+
# ten_books = all_books.limit(10)
|
|
267
263
|
#
|
|
268
|
-
#
|
|
269
|
-
#
|
|
270
|
-
#
|
|
264
|
+
# ten_books.each_with_index do |book,n|
|
|
265
|
+
# puts "#{n + 1} : #{book.title}"
|
|
266
|
+
# end
|
|
271
267
|
#
|
|
272
268
|
class Model
|
|
273
269
|
|
|
270
|
+
require 'aws/record/model/attributes'
|
|
271
|
+
require 'aws/record/model/finder_methods'
|
|
272
|
+
require 'aws/record/model/scope'
|
|
273
|
+
|
|
274
274
|
extend AbstractBase
|
|
275
275
|
|
|
276
276
|
class << self
|
|
277
277
|
|
|
278
278
|
# Creates the SimpleDB domain that is configured for this class.
|
|
279
279
|
#
|
|
280
|
-
#
|
|
281
|
-
#
|
|
280
|
+
# class Product < AWS::Record::Model
|
|
281
|
+
# end
|
|
282
282
|
#
|
|
283
|
-
#
|
|
283
|
+
# Product.create_table #=> 'Product'
|
|
284
284
|
#
|
|
285
285
|
# If you share a single AWS account with multiple applications, you
|
|
286
286
|
# can provide a domain prefix for your model classes.
|
|
287
287
|
#
|
|
288
|
-
#
|
|
288
|
+
# AWS::Record.domain_prefix = 'myapp-'
|
|
289
289
|
#
|
|
290
|
-
#
|
|
290
|
+
# Product.create_table #=> 'myapp-Product'
|
|
291
291
|
#
|
|
292
292
|
# If you have set a model shard name, this is used in place of the
|
|
293
293
|
# class name.
|
|
294
294
|
#
|
|
295
|
-
#
|
|
296
|
-
#
|
|
297
|
-
#
|
|
298
|
-
#
|
|
295
|
+
# AWS::Record.domain_prefix = 'prod-'
|
|
296
|
+
# class Product < AWS::Record::Model
|
|
297
|
+
# set_shard_name 'products'
|
|
298
|
+
# end
|
|
299
299
|
#
|
|
300
|
-
#
|
|
300
|
+
# Product.create_table #=> 'prod-products'
|
|
301
301
|
#
|
|
302
302
|
# If you shard you data across multiple domains, you can specify the
|
|
303
303
|
# shard name:
|
|
304
304
|
#
|
|
305
|
-
#
|
|
306
|
-
#
|
|
307
|
-
#
|
|
305
|
+
# # create two domains, with the given names
|
|
306
|
+
# Product.create_domain 'products-1'
|
|
307
|
+
# Product.create_domain 'products-2'
|
|
308
308
|
#
|
|
309
309
|
# @param [optional,String] shard_name Defaults to the class name.
|
|
310
310
|
#
|
|
@@ -332,7 +332,7 @@ module AWS
|
|
|
332
332
|
|
|
333
333
|
end
|
|
334
334
|
|
|
335
|
-
# @return [SimpleDB::Item] Returns a reference to the item as stored in
|
|
335
|
+
# @return [SimpleDB::Item] Returns a reference to the item as stored in
|
|
336
336
|
# simple db.
|
|
337
337
|
# @private
|
|
338
338
|
private
|