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,384 @@
|
|
|
1
|
+
# Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
|
4
|
+
# may not use this file except in compliance with the License. A copy of
|
|
5
|
+
# the License is located at
|
|
6
|
+
#
|
|
7
|
+
# http://aws.amazon.com/apache2.0/
|
|
8
|
+
#
|
|
9
|
+
# or in the "license" file accompanying this file. This file is
|
|
10
|
+
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
|
11
|
+
# ANY KIND, either express or implied. See the License for the specific
|
|
12
|
+
# language governing permissions and limitations under the License.
|
|
13
|
+
|
|
14
|
+
require 'date'
|
|
15
|
+
|
|
16
|
+
module AWS
|
|
17
|
+
module Record
|
|
18
|
+
module Attributes
|
|
19
|
+
|
|
20
|
+
# Base class for all of the AWS::Record attributes.
|
|
21
|
+
class BaseAttr
|
|
22
|
+
|
|
23
|
+
# @param [Symbol] name Name of this attribute. It should be a name that
|
|
24
|
+
# is safe to use as a method.
|
|
25
|
+
# @param [Hash] options
|
|
26
|
+
# @option options [String] :persist_as Defaults to the name of the
|
|
27
|
+
# attribute. You can pass a string to specify what the attribute
|
|
28
|
+
# will be named in the backend storage.
|
|
29
|
+
# @option options [Boolean] :set (false) When true this attribute can
|
|
30
|
+
# accept multiple unique values.
|
|
31
|
+
def initialize name, options = {}
|
|
32
|
+
@name = name.to_s
|
|
33
|
+
@options = options.dup
|
|
34
|
+
if options[:set] and !self.class.allow_set?
|
|
35
|
+
raise ArgumentError, "invalid option :set for #{self.class}"
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# @return [String] The name of this attribute
|
|
40
|
+
attr_reader :name
|
|
41
|
+
|
|
42
|
+
# @return [Hash] Attribute options passed to the constructor.
|
|
43
|
+
attr_reader :options
|
|
44
|
+
|
|
45
|
+
# @return [Boolean] Returns true if this attribute can have
|
|
46
|
+
# multiple values.
|
|
47
|
+
def set?
|
|
48
|
+
options[:set] ? true : false
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# @return Returns the default value for this attribute.
|
|
52
|
+
def default_value
|
|
53
|
+
options[:default_value]
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# @return [String] Returns the name this attribute will use
|
|
57
|
+
# in the storage backend.
|
|
58
|
+
def persist_as
|
|
59
|
+
(options[:persist_as] || @name).to_s
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# @param [Mixed] raw_value A single value to type cast.
|
|
63
|
+
# @return [Mixed] Returns the type casted value.
|
|
64
|
+
def type_cast raw_value
|
|
65
|
+
self.class.type_cast(raw_value, options)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# @param [String] serialized_value The serialized string value.
|
|
69
|
+
# @return [Mixed] Returns a deserialized type-casted value.
|
|
70
|
+
def deserialize serialized_value
|
|
71
|
+
self.class.deserialize(serialized_value, options)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Takes the type casted value and serializes it
|
|
75
|
+
# @param [Mixed] type_casted_value A single value to serialize.
|
|
76
|
+
# @return [Mixed] Returns the serialized value.
|
|
77
|
+
def serialize type_casted_value
|
|
78
|
+
self.class.serialize(type_casted_value, options)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# @param [String] serialized_value The raw value returned from AWS.
|
|
82
|
+
# @return [Mixed] Returns the type-casted deserialized value.
|
|
83
|
+
def self.deserialize serialized_value, options = {}
|
|
84
|
+
self.type_cast(serialized_value, options)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# @return [Boolean] Returns true if this attribute type can be used
|
|
88
|
+
# with the +:set => true+ option. Certain attirbutes can not
|
|
89
|
+
# be represented with multiple values (like BooleanAttr).
|
|
90
|
+
def self.allow_set?
|
|
91
|
+
raise NotImplementedError
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# @private
|
|
95
|
+
protected
|
|
96
|
+
def self.expect klass, value, &block
|
|
97
|
+
unless value.is_a?(klass)
|
|
98
|
+
raise ArgumentError, "expected a #{klass}, got #{value.class}"
|
|
99
|
+
end
|
|
100
|
+
yield if block_given?
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
class StringAttr < BaseAttr
|
|
106
|
+
|
|
107
|
+
# Returns the value cast to a string. Empty strings are returned as
|
|
108
|
+
# nil by default. Type casting is done by calling #to_s on the value.
|
|
109
|
+
#
|
|
110
|
+
# string_attr.type_cast(123)
|
|
111
|
+
# # => '123'
|
|
112
|
+
#
|
|
113
|
+
# string_attr.type_cast('')
|
|
114
|
+
# # => nil
|
|
115
|
+
#
|
|
116
|
+
# string_attr.type_cast('', :preserve_empty_strings => true)
|
|
117
|
+
# # => ''
|
|
118
|
+
#
|
|
119
|
+
# @param [Mixed] raw_value
|
|
120
|
+
# @param [Hash] options
|
|
121
|
+
# @option options [Boolean] :preserve_empty_strings (false) When true,
|
|
122
|
+
# empty strings are preserved and not cast to nil.
|
|
123
|
+
# @return [String,nil] The type casted value.
|
|
124
|
+
def self.type_cast raw_value, options = {}
|
|
125
|
+
case raw_value
|
|
126
|
+
when nil then nil
|
|
127
|
+
when '' then options[:preserve_empty_strings] ? '' : nil
|
|
128
|
+
when String then raw_value
|
|
129
|
+
else raw_value.to_s
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# Returns a serialized representation of the string value suitable for
|
|
134
|
+
# storing in SimpleDB.
|
|
135
|
+
# @param [String] string
|
|
136
|
+
# @param [Hash] options
|
|
137
|
+
# @return [String] The serialized string.
|
|
138
|
+
def self.serialize string, options = {}
|
|
139
|
+
unless string.is_a?(String)
|
|
140
|
+
msg = "expected a String value, got #{string.class}"
|
|
141
|
+
raise ArgumentError, msg
|
|
142
|
+
end
|
|
143
|
+
string
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
# @private
|
|
147
|
+
def self.allow_set?
|
|
148
|
+
true
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
class BooleanAttr < BaseAttr
|
|
154
|
+
|
|
155
|
+
def self.type_cast raw_value, options = {}
|
|
156
|
+
case raw_value
|
|
157
|
+
when nil then nil
|
|
158
|
+
when '' then nil
|
|
159
|
+
when false, 'false', '0', 0 then false
|
|
160
|
+
else true
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
def self.serialize boolean, options = {}
|
|
165
|
+
case boolean
|
|
166
|
+
when false then 0
|
|
167
|
+
when true then 1
|
|
168
|
+
else
|
|
169
|
+
msg = "expected a boolean value, got #{boolean.class}"
|
|
170
|
+
raise ArgumentError, msg
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
# @private
|
|
175
|
+
def self.allow_set?
|
|
176
|
+
false
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
class IntegerAttr < BaseAttr
|
|
182
|
+
|
|
183
|
+
# Returns value cast to an integer. Empty strings are cast to
|
|
184
|
+
# nil by default. Type casting is done by calling #to_i on the value.
|
|
185
|
+
#
|
|
186
|
+
# int_attribute.type_cast('123')
|
|
187
|
+
# #=> 123
|
|
188
|
+
#
|
|
189
|
+
# int_attribute.type_cast('')
|
|
190
|
+
# #=> nil
|
|
191
|
+
#
|
|
192
|
+
# @param [Mixed] raw_value The value to type cast to an integer.
|
|
193
|
+
# @return [Integer,nil] Returns the type casted integer or nil
|
|
194
|
+
def self.type_cast raw_value, options = {}
|
|
195
|
+
case raw_value
|
|
196
|
+
when nil then nil
|
|
197
|
+
when '' then nil
|
|
198
|
+
when Integer then raw_value
|
|
199
|
+
else
|
|
200
|
+
raw_value.respond_to?(:to_i) ?
|
|
201
|
+
raw_value.to_i :
|
|
202
|
+
raw_value.to_s.to_i
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
# Returns a serialized representation of the integer value suitable for
|
|
207
|
+
# storing in SimpleDB.
|
|
208
|
+
#
|
|
209
|
+
# attribute.serialize(123)
|
|
210
|
+
# #=> '123'
|
|
211
|
+
#
|
|
212
|
+
# @param [Integer] integer The number to serialize.
|
|
213
|
+
# @param [Hash] options
|
|
214
|
+
# @return [String] A serialized representation of the integer.
|
|
215
|
+
def self.serialize integer, options = {}
|
|
216
|
+
expect(Integer, integer) { integer }
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
# @private
|
|
220
|
+
def self.allow_set?
|
|
221
|
+
true
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
class FloatAttr < BaseAttr
|
|
227
|
+
|
|
228
|
+
def self.type_cast raw_value, options = {}
|
|
229
|
+
case raw_value
|
|
230
|
+
when nil then nil
|
|
231
|
+
when '' then nil
|
|
232
|
+
when Float then raw_value
|
|
233
|
+
else
|
|
234
|
+
raw_value.respond_to?(:to_f) ?
|
|
235
|
+
raw_value.to_f :
|
|
236
|
+
raw_value.to_s.to_f
|
|
237
|
+
end
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
def self.serialize float, options = {}
|
|
241
|
+
expect(Float, float) { float }
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
# @private
|
|
245
|
+
def self.allow_set?
|
|
246
|
+
true
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
class DateAttr < BaseAttr
|
|
252
|
+
|
|
253
|
+
# Returns value cast to a Date object. Empty strings are cast to
|
|
254
|
+
# nil. Values are cast first to strings and then passed to
|
|
255
|
+
# Date.parse. Integers are treated as timestamps.
|
|
256
|
+
#
|
|
257
|
+
# date_attribute.type_cast('2000-01-02T10:11:12Z')
|
|
258
|
+
# #=> #<Date: 4903091/2,0,2299161>
|
|
259
|
+
#
|
|
260
|
+
# date_attribute.type_cast(1306170146)
|
|
261
|
+
# #<Date: 4911409/2,0,2299161>
|
|
262
|
+
#
|
|
263
|
+
# date_attribute.type_cast('')
|
|
264
|
+
# #=> nil
|
|
265
|
+
#
|
|
266
|
+
# date_attribute.type_cast(nil)
|
|
267
|
+
# #=> nil
|
|
268
|
+
#
|
|
269
|
+
# @param [Mixed] raw_value The value to cast to a Date object.
|
|
270
|
+
# @param [Hash] options
|
|
271
|
+
# @return [Date,nil]
|
|
272
|
+
def self.type_cast raw_value, options = {}
|
|
273
|
+
case raw_value
|
|
274
|
+
when nil then nil
|
|
275
|
+
when '' then nil
|
|
276
|
+
when Date then raw_value
|
|
277
|
+
when Integer then
|
|
278
|
+
begin
|
|
279
|
+
Date.parse(Time.at(raw_value).to_s) # assumed timestamp
|
|
280
|
+
rescue
|
|
281
|
+
nil
|
|
282
|
+
end
|
|
283
|
+
else
|
|
284
|
+
begin
|
|
285
|
+
Date.parse(raw_value.to_s) # Time, DateTime or String
|
|
286
|
+
rescue
|
|
287
|
+
nil
|
|
288
|
+
end
|
|
289
|
+
end
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
# Returns a Date object encoded as a string (suitable for sorting).
|
|
293
|
+
#
|
|
294
|
+
# attribute.serialize(DateTime.parse('2001-01-01'))
|
|
295
|
+
# #=> '2001-01-01'
|
|
296
|
+
#
|
|
297
|
+
# @param [Date] date The date to serialize.
|
|
298
|
+
#
|
|
299
|
+
# @param [Hash] options
|
|
300
|
+
#
|
|
301
|
+
# @return [String] Returns the date object serialized to a string
|
|
302
|
+
# ('YYYY-MM-DD').
|
|
303
|
+
#
|
|
304
|
+
def self.serialize date, options = {}
|
|
305
|
+
unless date.is_a?(Date)
|
|
306
|
+
raise ArgumentError, "expected a Date value, got #{date.class}"
|
|
307
|
+
end
|
|
308
|
+
date.strftime('%Y-%m-%d')
|
|
309
|
+
end
|
|
310
|
+
|
|
311
|
+
# @private
|
|
312
|
+
def self.allow_set?
|
|
313
|
+
true
|
|
314
|
+
end
|
|
315
|
+
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
class DateTimeAttr < BaseAttr
|
|
319
|
+
|
|
320
|
+
# Returns value cast to a DateTime object. Empty strings are cast to
|
|
321
|
+
# nil. Values are cast first to strings and then passed to
|
|
322
|
+
# DateTime.parse. Integers are treated as timestamps.
|
|
323
|
+
#
|
|
324
|
+
# datetime_attribute.type_cast('2000-01-02')
|
|
325
|
+
# #=> #<DateTime: 4903091/2,0,2299161>
|
|
326
|
+
#
|
|
327
|
+
# datetime_attribute.type_cast(1306170146)
|
|
328
|
+
# #<DateTime: 106086465073/43200,-7/24,2299161>
|
|
329
|
+
#
|
|
330
|
+
# datetime_attribute.type_cast('')
|
|
331
|
+
# #=> nil
|
|
332
|
+
#
|
|
333
|
+
# datetime_attribute.type_cast(nil)
|
|
334
|
+
# #=> nil
|
|
335
|
+
#
|
|
336
|
+
# @param [Mixed] raw_value The value to cast to a DateTime object.
|
|
337
|
+
# @param [Hash] options
|
|
338
|
+
# @return [DateTime,nil]
|
|
339
|
+
def self.type_cast raw_value, options = {}
|
|
340
|
+
case raw_value
|
|
341
|
+
when nil then nil
|
|
342
|
+
when '' then nil
|
|
343
|
+
when DateTime then raw_value
|
|
344
|
+
when Integer then
|
|
345
|
+
begin
|
|
346
|
+
DateTime.parse(Time.at(raw_value).to_s) # timestamp
|
|
347
|
+
rescue
|
|
348
|
+
nil
|
|
349
|
+
end
|
|
350
|
+
else
|
|
351
|
+
begin
|
|
352
|
+
DateTime.parse(raw_value.to_s) # Time, Date or String
|
|
353
|
+
rescue
|
|
354
|
+
nil
|
|
355
|
+
end
|
|
356
|
+
end
|
|
357
|
+
end
|
|
358
|
+
|
|
359
|
+
# Returns a DateTime object encoded as a string (suitable for sorting).
|
|
360
|
+
#
|
|
361
|
+
# attribute.serialize(DateTime.parse('2001-01-01'))
|
|
362
|
+
# #=> '2001-01-01T00:00:00:Z)
|
|
363
|
+
#
|
|
364
|
+
# @param [DateTime] datetime The datetime object to serialize.
|
|
365
|
+
# @param [Hash] options
|
|
366
|
+
# @return [String] Returns the datetime object serialized to a string
|
|
367
|
+
# in ISO8601 format (e.g. '2011-01-02T10:11:12Z')
|
|
368
|
+
def self.serialize datetime, options = {}
|
|
369
|
+
unless datetime.is_a?(DateTime)
|
|
370
|
+
msg = "expected a DateTime value, got #{datetime.class}"
|
|
371
|
+
raise ArgumentError, msg
|
|
372
|
+
end
|
|
373
|
+
datetime.strftime('%Y-%m-%dT%H:%M:%S%Z')
|
|
374
|
+
end
|
|
375
|
+
|
|
376
|
+
# @private
|
|
377
|
+
def self.allow_set?
|
|
378
|
+
true
|
|
379
|
+
end
|
|
380
|
+
|
|
381
|
+
end
|
|
382
|
+
end
|
|
383
|
+
end
|
|
384
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
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
|
+
|
|
17
|
+
# @private
|
|
18
|
+
module Conversion
|
|
19
|
+
|
|
20
|
+
# @private
|
|
21
|
+
def to_model
|
|
22
|
+
self
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# @private
|
|
26
|
+
def to_key
|
|
27
|
+
persisted? ? [id] : nil
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# @private
|
|
31
|
+
def to_param
|
|
32
|
+
persisted? ? to_key.join('-') : nil
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,285 @@
|
|
|
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
|
+
|
|
17
|
+
# Provides a way to track changes in your records.
|
|
18
|
+
#
|
|
19
|
+
# my_book = Book['bookid']
|
|
20
|
+
#
|
|
21
|
+
# my_book.changed? #=> false
|
|
22
|
+
# my_book.title #=> "My Book"
|
|
23
|
+
# my_book.title = "My Awesome Book"
|
|
24
|
+
# my_book.changed? #=> true
|
|
25
|
+
#
|
|
26
|
+
# You can inspect further and get a list of changed attributes
|
|
27
|
+
#
|
|
28
|
+
# my_book.changed #=> ['title']
|
|
29
|
+
#
|
|
30
|
+
# Or you can get a more detailed description of the changes. {#changes}
|
|
31
|
+
# returns a hash of changed attributes (keys) with their old and new
|
|
32
|
+
# values.
|
|
33
|
+
#
|
|
34
|
+
# my_book.changes
|
|
35
|
+
# #=> { 'title' => ['My Book', 'My Awesome Book']
|
|
36
|
+
#
|
|
37
|
+
# For every configured attribute you also get a handful of methods
|
|
38
|
+
# for inspecting changes on that attribute. Given the following
|
|
39
|
+
# attribute:
|
|
40
|
+
#
|
|
41
|
+
# string_attr :title
|
|
42
|
+
#
|
|
43
|
+
# You can now call any of the following methods:
|
|
44
|
+
#
|
|
45
|
+
# * title_changed?
|
|
46
|
+
# * title_change
|
|
47
|
+
# * title_was
|
|
48
|
+
# * reset_title!
|
|
49
|
+
# * title_will_change!
|
|
50
|
+
#
|
|
51
|
+
# Given the title change from above:
|
|
52
|
+
#
|
|
53
|
+
# my_book.title_changed? #=> true
|
|
54
|
+
# my_book.title_change #=> ['My Book', 'My Awesome Book']
|
|
55
|
+
# my_book.title_was #=> ['My Book']
|
|
56
|
+
#
|
|
57
|
+
# my_book.reset_title!
|
|
58
|
+
# my_book.title #=> 'My Book'
|
|
59
|
+
#
|
|
60
|
+
# == In-Place Editing
|
|
61
|
+
#
|
|
62
|
+
# Dirty tracking works by comparing incoming attribute values upon
|
|
63
|
+
# assignment against the value that was there previously. If you
|
|
64
|
+
# use functions against the value that modify it (like gsub!)
|
|
65
|
+
# you must notify your record about the coming change.
|
|
66
|
+
#
|
|
67
|
+
# my_book.title #=> 'My Book'
|
|
68
|
+
# my_book.title_will_change!
|
|
69
|
+
# my_book.title.gsub!(/My/, 'Your')
|
|
70
|
+
# my_book.title_change #=> ['My Book', 'Your Book']
|
|
71
|
+
#
|
|
72
|
+
# == Partial Updates
|
|
73
|
+
#
|
|
74
|
+
# Dirty tracking makes it possible to only persist those attributes
|
|
75
|
+
# that have changed since they were loaded. This speeds up requests
|
|
76
|
+
# against AWS when saving data.
|
|
77
|
+
#
|
|
78
|
+
module DirtyTracking
|
|
79
|
+
|
|
80
|
+
# Returns true if this model has unsaved changes.
|
|
81
|
+
#
|
|
82
|
+
# b = Book.new(:title => 'My Book')
|
|
83
|
+
# b.changed?
|
|
84
|
+
# #=> true
|
|
85
|
+
#
|
|
86
|
+
# New objects and objects freshly loaded should not have any changes:
|
|
87
|
+
#
|
|
88
|
+
# b = Book.new
|
|
89
|
+
# b.changed? #=> false
|
|
90
|
+
#
|
|
91
|
+
# b = Book.first
|
|
92
|
+
# b.changed? #=> false
|
|
93
|
+
#
|
|
94
|
+
# @return [Boolean] Returns true if any of the attributes have
|
|
95
|
+
# unsaved changes.
|
|
96
|
+
def changed?
|
|
97
|
+
!orig_values.empty?
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# Returns an array of attribute names that have changes.
|
|
101
|
+
#
|
|
102
|
+
# book.changed #=> []
|
|
103
|
+
# person.title = 'New Title'
|
|
104
|
+
# book.changed #=> ['title']
|
|
105
|
+
#
|
|
106
|
+
# @return [Array] Returns an array of attribute names that have
|
|
107
|
+
# unsaved changes.
|
|
108
|
+
def changed
|
|
109
|
+
orig_values.keys
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
# Returns the changed attributes in a hash. Keys are attribute names,
|
|
113
|
+
# values are two value arrays. The first value is the previous
|
|
114
|
+
# attribute value, the second is the current attribute value.
|
|
115
|
+
#
|
|
116
|
+
# book.title = 'New Title'
|
|
117
|
+
# book.changes
|
|
118
|
+
# #=> { 'title' => ['Old Title', 'New Title'] }
|
|
119
|
+
#
|
|
120
|
+
# @return [Hash] Returns a hash of attribute changes.
|
|
121
|
+
def changes
|
|
122
|
+
changed.inject({}) do |changes, attr_name|
|
|
123
|
+
changes[attr_name] = attribute_change(attr_name)
|
|
124
|
+
changes
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
# Returns true if the named attribute has unsaved changes.
|
|
129
|
+
#
|
|
130
|
+
# This is an attribute method. The following two expressions
|
|
131
|
+
# are equivilent:
|
|
132
|
+
#
|
|
133
|
+
# book.title_changed?
|
|
134
|
+
# book.attribute_changed?(:title)
|
|
135
|
+
#
|
|
136
|
+
# @param [String] attribute_name Name of the attribute to check
|
|
137
|
+
# for changes.
|
|
138
|
+
#
|
|
139
|
+
# @return [Boolean] Returns true if the named attribute
|
|
140
|
+
# has unsaved changes.
|
|
141
|
+
# @private
|
|
142
|
+
private
|
|
143
|
+
def attribute_changed? attribute_name
|
|
144
|
+
orig_values.keys.include?(attribute_name)
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
# Returns an array of the old value and the new value for
|
|
148
|
+
# attributes that have unsaved changes, returns nil otherwise.
|
|
149
|
+
#
|
|
150
|
+
# This is an attribute method. The following two expressions
|
|
151
|
+
# are equivilent:
|
|
152
|
+
#
|
|
153
|
+
# book.title_change
|
|
154
|
+
# book.attribute_change(:title)
|
|
155
|
+
#
|
|
156
|
+
# @example Asking for changes on an unchanged attribute
|
|
157
|
+
#
|
|
158
|
+
# book = Book.new
|
|
159
|
+
# book.title_change #=> nil
|
|
160
|
+
#
|
|
161
|
+
# @example Getting changed attributes on a new object
|
|
162
|
+
#
|
|
163
|
+
# book = Book.new(:title => 'My Book')
|
|
164
|
+
# book.title_change #=> [nil, 'My Book']
|
|
165
|
+
#
|
|
166
|
+
# @example Getting changed attributes on a loaded object
|
|
167
|
+
#
|
|
168
|
+
# book = Book.first
|
|
169
|
+
# book.title = 'New Title'
|
|
170
|
+
# book.title_change #=> ['Old Title', 'New Title']
|
|
171
|
+
#
|
|
172
|
+
# @param [String] attribute_name Name of the attribute to fetch
|
|
173
|
+
# a change for.
|
|
174
|
+
# @return [Boolean] Returns true if the named attribute
|
|
175
|
+
# has unsaved changes.
|
|
176
|
+
# @private
|
|
177
|
+
private
|
|
178
|
+
def attribute_change attribute_name
|
|
179
|
+
self.class.attribute_for(attribute_name) do |attribute|
|
|
180
|
+
if orig_values.has_key?(attribute.name)
|
|
181
|
+
[orig_values[attribute.name], __send__(attribute.name)]
|
|
182
|
+
else
|
|
183
|
+
nil
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
# Returns the previous value for changed attributes, or the current
|
|
189
|
+
# value for unchanged attributes.
|
|
190
|
+
#
|
|
191
|
+
# This is an attribute method. The following two expressions
|
|
192
|
+
# are equivilent:
|
|
193
|
+
#
|
|
194
|
+
# book.title_was
|
|
195
|
+
# book.attribute_was(:title)
|
|
196
|
+
#
|
|
197
|
+
# @example Returns the previous value for changed attributes:
|
|
198
|
+
#
|
|
199
|
+
# book = Book.where(:title => 'My Book').first
|
|
200
|
+
# book.title = 'New Title'
|
|
201
|
+
# book.title_was #=> 'My Book'
|
|
202
|
+
#
|
|
203
|
+
# @example Returns the current value for unchanged attributes:
|
|
204
|
+
#
|
|
205
|
+
# book = Book.where(:title => 'My Book').first
|
|
206
|
+
# book.title_was #=> 'My Book'
|
|
207
|
+
#
|
|
208
|
+
# @return Returns the previous value for changed attributes
|
|
209
|
+
# or the current value for unchanged attributes.
|
|
210
|
+
# @private
|
|
211
|
+
private
|
|
212
|
+
def attribute_was attribute_name
|
|
213
|
+
self.class.attribute_for(attribute_name) do |attribute|
|
|
214
|
+
name = attribute.name
|
|
215
|
+
orig_values.has_key?(name) ? orig_values[name] : __send__(name)
|
|
216
|
+
end
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
# Reverts any changes to the attribute, restoring its original value.
|
|
220
|
+
# @param [String] attribute_name Name of the attribute to reset.
|
|
221
|
+
# @return [nil]
|
|
222
|
+
# @private
|
|
223
|
+
private
|
|
224
|
+
def reset_attribute! attribute_name
|
|
225
|
+
__send__("#{attribute_name}=", attribute_was(attribute_name))
|
|
226
|
+
nil
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
# Indicate to the record that you are about to edit an attribute
|
|
230
|
+
# in place.
|
|
231
|
+
# @param [String] attribute_name Name of the attribute that will
|
|
232
|
+
# be changed.
|
|
233
|
+
# @return [nil]
|
|
234
|
+
# @private
|
|
235
|
+
private
|
|
236
|
+
def attribute_will_change! attribute_name
|
|
237
|
+
self.class.attribute_for(attribute_name) do |attribute|
|
|
238
|
+
name = attribute.name
|
|
239
|
+
unless orig_values.has_key?(name)
|
|
240
|
+
was = __send__(name)
|
|
241
|
+
begin
|
|
242
|
+
# booleans, nil, etc all #respond_to?(:clone), but they raise
|
|
243
|
+
# a TypeError when you attempt to dup them.
|
|
244
|
+
orig_values[name] = was.clone
|
|
245
|
+
rescue TypeError
|
|
246
|
+
orig_values[name] = was
|
|
247
|
+
end
|
|
248
|
+
end
|
|
249
|
+
end
|
|
250
|
+
nil
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
private
|
|
254
|
+
def orig_values
|
|
255
|
+
@_orig_values ||= {}
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
private
|
|
259
|
+
def clear_change! attribute_name
|
|
260
|
+
orig_values.delete(attribute_name)
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
private
|
|
264
|
+
def ignore_changes &block
|
|
265
|
+
begin
|
|
266
|
+
@_ignore_changes = true
|
|
267
|
+
yield
|
|
268
|
+
ensure
|
|
269
|
+
@_ignore_changes = false
|
|
270
|
+
end
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
private
|
|
274
|
+
def if_tracking_changes &block
|
|
275
|
+
yield unless @_ignore_changes
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
private
|
|
279
|
+
def clear_changes!
|
|
280
|
+
orig_values.clear
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
end
|
|
284
|
+
end
|
|
285
|
+
end
|