aws-sdk 1.0.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.
Files changed (205) hide show
  1. data/.yardopts +6 -0
  2. data/LICENSE.txt +171 -0
  3. data/NOTICE.txt +2 -0
  4. data/README.rdoc +189 -0
  5. data/lib/aws-sdk.rb +14 -0
  6. data/lib/aws.rb +63 -0
  7. data/lib/aws/api_config.rb +45 -0
  8. data/lib/aws/api_config/.document +0 -0
  9. data/lib/aws/api_config/EC2-2011-02-28.yml +2314 -0
  10. data/lib/aws/api_config/SNS-2010-03-31.yml +171 -0
  11. data/lib/aws/api_config/SQS-2009-02-01.yml +161 -0
  12. data/lib/aws/api_config/SimpleDB-2009-04-15.yml +278 -0
  13. data/lib/aws/api_config/SimpleEmailService-2010-12-01.yml +147 -0
  14. data/lib/aws/api_config_transform.rb +32 -0
  15. data/lib/aws/async_handle.rb +90 -0
  16. data/lib/aws/authorize_v2.rb +37 -0
  17. data/lib/aws/authorize_v3.rb +37 -0
  18. data/lib/aws/base_client.rb +524 -0
  19. data/lib/aws/cacheable.rb +92 -0
  20. data/lib/aws/common.rb +228 -0
  21. data/lib/aws/configurable.rb +36 -0
  22. data/lib/aws/configuration.rb +272 -0
  23. data/lib/aws/configured_client_methods.rb +81 -0
  24. data/lib/aws/configured_grammars.rb +65 -0
  25. data/lib/aws/configured_option_grammars.rb +46 -0
  26. data/lib/aws/configured_xml_grammars.rb +47 -0
  27. data/lib/aws/default_signer.rb +38 -0
  28. data/lib/aws/ec2.rb +321 -0
  29. data/lib/aws/ec2/attachment.rb +149 -0
  30. data/lib/aws/ec2/attachment_collection.rb +57 -0
  31. data/lib/aws/ec2/availability_zone.rb +80 -0
  32. data/lib/aws/ec2/availability_zone_collection.rb +47 -0
  33. data/lib/aws/ec2/block_device_mappings.rb +53 -0
  34. data/lib/aws/ec2/client.rb +54 -0
  35. data/lib/aws/ec2/client/xml.rb +127 -0
  36. data/lib/aws/ec2/collection.rb +39 -0
  37. data/lib/aws/ec2/config_transform.rb +63 -0
  38. data/lib/aws/ec2/elastic_ip.rb +107 -0
  39. data/lib/aws/ec2/elastic_ip_collection.rb +85 -0
  40. data/lib/aws/ec2/errors.rb +29 -0
  41. data/lib/aws/ec2/filtered_collection.rb +65 -0
  42. data/lib/aws/ec2/has_permissions.rb +46 -0
  43. data/lib/aws/ec2/image.rb +245 -0
  44. data/lib/aws/ec2/image_collection.rb +235 -0
  45. data/lib/aws/ec2/instance.rb +515 -0
  46. data/lib/aws/ec2/instance_collection.rb +276 -0
  47. data/lib/aws/ec2/key_pair.rb +86 -0
  48. data/lib/aws/ec2/key_pair_collection.rb +102 -0
  49. data/lib/aws/ec2/permission_collection.rb +177 -0
  50. data/lib/aws/ec2/region.rb +81 -0
  51. data/lib/aws/ec2/region_collection.rb +55 -0
  52. data/lib/aws/ec2/request.rb +27 -0
  53. data/lib/aws/ec2/reserved_instances.rb +50 -0
  54. data/lib/aws/ec2/reserved_instances_collection.rb +44 -0
  55. data/lib/aws/ec2/reserved_instances_offering.rb +55 -0
  56. data/lib/aws/ec2/reserved_instances_offering_collection.rb +43 -0
  57. data/lib/aws/ec2/resource.rb +340 -0
  58. data/lib/aws/ec2/resource_tag_collection.rb +218 -0
  59. data/lib/aws/ec2/security_group.rb +246 -0
  60. data/lib/aws/ec2/security_group/ip_permission.rb +70 -0
  61. data/lib/aws/ec2/security_group/ip_permission_collection.rb +59 -0
  62. data/lib/aws/ec2/security_group_collection.rb +132 -0
  63. data/lib/aws/ec2/snapshot.rb +138 -0
  64. data/lib/aws/ec2/snapshot_collection.rb +90 -0
  65. data/lib/aws/ec2/tag.rb +88 -0
  66. data/lib/aws/ec2/tag_collection.rb +114 -0
  67. data/lib/aws/ec2/tagged_collection.rb +48 -0
  68. data/lib/aws/ec2/tagged_item.rb +87 -0
  69. data/lib/aws/ec2/volume.rb +190 -0
  70. data/lib/aws/ec2/volume_collection.rb +95 -0
  71. data/lib/aws/errors.rb +129 -0
  72. data/lib/aws/http/builtin_handler.rb +69 -0
  73. data/lib/aws/http/curb_handler.rb +123 -0
  74. data/lib/aws/http/handler.rb +77 -0
  75. data/lib/aws/http/httparty_handler.rb +61 -0
  76. data/lib/aws/http/request.rb +136 -0
  77. data/lib/aws/http/request_param.rb +63 -0
  78. data/lib/aws/http/response.rb +75 -0
  79. data/lib/aws/ignore_result_element.rb +38 -0
  80. data/lib/aws/indifferent_hash.rb +86 -0
  81. data/lib/aws/inflection.rb +46 -0
  82. data/lib/aws/lazy_error_classes.rb +64 -0
  83. data/lib/aws/meta_utils.rb +43 -0
  84. data/lib/aws/model.rb +57 -0
  85. data/lib/aws/naming.rb +32 -0
  86. data/lib/aws/option_grammar.rb +544 -0
  87. data/lib/aws/policy.rb +912 -0
  88. data/lib/aws/rails.rb +209 -0
  89. data/lib/aws/record.rb +79 -0
  90. data/lib/aws/record/attribute.rb +94 -0
  91. data/lib/aws/record/attribute_macros.rb +288 -0
  92. data/lib/aws/record/attributes/boolean.rb +49 -0
  93. data/lib/aws/record/attributes/datetime.rb +86 -0
  94. data/lib/aws/record/attributes/float.rb +48 -0
  95. data/lib/aws/record/attributes/integer.rb +68 -0
  96. data/lib/aws/record/attributes/sortable_float.rb +60 -0
  97. data/lib/aws/record/attributes/sortable_integer.rb +95 -0
  98. data/lib/aws/record/attributes/string.rb +69 -0
  99. data/lib/aws/record/base.rb +728 -0
  100. data/lib/aws/record/conversion.rb +38 -0
  101. data/lib/aws/record/dirty_tracking.rb +286 -0
  102. data/lib/aws/record/errors.rb +153 -0
  103. data/lib/aws/record/exceptions.rb +48 -0
  104. data/lib/aws/record/finder_methods.rb +262 -0
  105. data/lib/aws/record/naming.rb +31 -0
  106. data/lib/aws/record/scope.rb +157 -0
  107. data/lib/aws/record/validations.rb +653 -0
  108. data/lib/aws/record/validator.rb +237 -0
  109. data/lib/aws/record/validators/acceptance.rb +51 -0
  110. data/lib/aws/record/validators/block.rb +38 -0
  111. data/lib/aws/record/validators/confirmation.rb +43 -0
  112. data/lib/aws/record/validators/count.rb +108 -0
  113. data/lib/aws/record/validators/exclusion.rb +43 -0
  114. data/lib/aws/record/validators/format.rb +57 -0
  115. data/lib/aws/record/validators/inclusion.rb +56 -0
  116. data/lib/aws/record/validators/length.rb +107 -0
  117. data/lib/aws/record/validators/numericality.rb +138 -0
  118. data/lib/aws/record/validators/presence.rb +45 -0
  119. data/lib/aws/resource_cache.rb +39 -0
  120. data/lib/aws/response.rb +113 -0
  121. data/lib/aws/response_cache.rb +50 -0
  122. data/lib/aws/s3.rb +109 -0
  123. data/lib/aws/s3/access_control_list.rb +252 -0
  124. data/lib/aws/s3/acl_object.rb +266 -0
  125. data/lib/aws/s3/bucket.rb +320 -0
  126. data/lib/aws/s3/bucket_collection.rb +122 -0
  127. data/lib/aws/s3/bucket_version_collection.rb +85 -0
  128. data/lib/aws/s3/client.rb +999 -0
  129. data/lib/aws/s3/client/xml.rb +190 -0
  130. data/lib/aws/s3/data_options.rb +99 -0
  131. data/lib/aws/s3/errors.rb +43 -0
  132. data/lib/aws/s3/multipart_upload.rb +318 -0
  133. data/lib/aws/s3/multipart_upload_collection.rb +78 -0
  134. data/lib/aws/s3/object_collection.rb +159 -0
  135. data/lib/aws/s3/object_metadata.rb +67 -0
  136. data/lib/aws/s3/object_upload_collection.rb +83 -0
  137. data/lib/aws/s3/object_version.rb +141 -0
  138. data/lib/aws/s3/object_version_collection.rb +78 -0
  139. data/lib/aws/s3/paginated_collection.rb +94 -0
  140. data/lib/aws/s3/policy.rb +76 -0
  141. data/lib/aws/s3/prefix_and_delimiter_collection.rb +56 -0
  142. data/lib/aws/s3/prefixed_collection.rb +84 -0
  143. data/lib/aws/s3/presigned_post.rb +504 -0
  144. data/lib/aws/s3/request.rb +198 -0
  145. data/lib/aws/s3/s3_object.rb +794 -0
  146. data/lib/aws/s3/tree.rb +116 -0
  147. data/lib/aws/s3/tree/branch_node.rb +71 -0
  148. data/lib/aws/s3/tree/child_collection.rb +108 -0
  149. data/lib/aws/s3/tree/leaf_node.rb +99 -0
  150. data/lib/aws/s3/tree/node.rb +22 -0
  151. data/lib/aws/s3/tree/parent.rb +90 -0
  152. data/lib/aws/s3/uploaded_part.rb +82 -0
  153. data/lib/aws/s3/uploaded_part_collection.rb +86 -0
  154. data/lib/aws/service_interface.rb +60 -0
  155. data/lib/aws/simple_db.rb +202 -0
  156. data/lib/aws/simple_db/attribute.rb +159 -0
  157. data/lib/aws/simple_db/attribute_collection.rb +227 -0
  158. data/lib/aws/simple_db/client.rb +52 -0
  159. data/lib/aws/simple_db/client/options.rb +34 -0
  160. data/lib/aws/simple_db/client/xml.rb +68 -0
  161. data/lib/aws/simple_db/consistent_read_option.rb +42 -0
  162. data/lib/aws/simple_db/delete_attributes.rb +64 -0
  163. data/lib/aws/simple_db/domain.rb +118 -0
  164. data/lib/aws/simple_db/domain_collection.rb +116 -0
  165. data/lib/aws/simple_db/domain_metadata.rb +112 -0
  166. data/lib/aws/simple_db/errors.rb +46 -0
  167. data/lib/aws/simple_db/expect_condition_option.rb +45 -0
  168. data/lib/aws/simple_db/item.rb +84 -0
  169. data/lib/aws/simple_db/item_collection.rb +594 -0
  170. data/lib/aws/simple_db/item_data.rb +70 -0
  171. data/lib/aws/simple_db/put_attributes.rb +62 -0
  172. data/lib/aws/simple_db/request.rb +27 -0
  173. data/lib/aws/simple_email_service.rb +373 -0
  174. data/lib/aws/simple_email_service/client.rb +39 -0
  175. data/lib/aws/simple_email_service/client/options.rb +24 -0
  176. data/lib/aws/simple_email_service/client/xml.rb +38 -0
  177. data/lib/aws/simple_email_service/email_address_collection.rb +66 -0
  178. data/lib/aws/simple_email_service/errors.rb +29 -0
  179. data/lib/aws/simple_email_service/quotas.rb +64 -0
  180. data/lib/aws/simple_email_service/request.rb +27 -0
  181. data/lib/aws/sns.rb +69 -0
  182. data/lib/aws/sns/client.rb +37 -0
  183. data/lib/aws/sns/client/options.rb +24 -0
  184. data/lib/aws/sns/client/xml.rb +38 -0
  185. data/lib/aws/sns/errors.rb +29 -0
  186. data/lib/aws/sns/policy.rb +49 -0
  187. data/lib/aws/sns/request.rb +27 -0
  188. data/lib/aws/sns/subscription.rb +100 -0
  189. data/lib/aws/sns/subscription_collection.rb +84 -0
  190. data/lib/aws/sns/topic.rb +384 -0
  191. data/lib/aws/sns/topic_collection.rb +70 -0
  192. data/lib/aws/sns/topic_subscription_collection.rb +58 -0
  193. data/lib/aws/sqs.rb +70 -0
  194. data/lib/aws/sqs/client.rb +38 -0
  195. data/lib/aws/sqs/client/xml.rb +36 -0
  196. data/lib/aws/sqs/errors.rb +33 -0
  197. data/lib/aws/sqs/policy.rb +50 -0
  198. data/lib/aws/sqs/queue.rb +507 -0
  199. data/lib/aws/sqs/queue_collection.rb +105 -0
  200. data/lib/aws/sqs/received_message.rb +184 -0
  201. data/lib/aws/sqs/received_sns_message.rb +112 -0
  202. data/lib/aws/sqs/request.rb +44 -0
  203. data/lib/aws/xml_grammar.rb +923 -0
  204. data/rails/init.rb +15 -0
  205. metadata +298 -0
@@ -0,0 +1,116 @@
1
+ # Copyright 2011 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 'aws/model'
15
+ require 'aws/s3/tree/parent'
16
+ require 'aws/s3/tree/leaf_node'
17
+ require 'aws/s3/tree/branch_node'
18
+ require 'aws/s3/tree/child_collection'
19
+
20
+ module AWS
21
+ class S3
22
+
23
+ # A utility class that supports exploring an S3 {Bucket} like a
24
+ # tree.
25
+ #
26
+ # Frequently objects stored in S3 have keys that look like a filesystem
27
+ # directory structure.
28
+ #
29
+ # Given you have a bucket with the following keys:
30
+ #
31
+ # README.txt
32
+ # videos/wedding.mpg
33
+ # videos/family_reunion.mpg
34
+ # photos/2010/house.jpg
35
+ # photos/2011/fall/leaves.jpg
36
+ # photos/2011/summer/vacation.jpg
37
+ # photos/2011/summer/family.jpg
38
+ #
39
+ # You might like to explore the contents of this bucket as a tree:
40
+ #
41
+ # tree = bucket.as_tree
42
+ #
43
+ # directories = tree.children.select(&:branch?).collect(&:prefix)
44
+ # #=> ['photos', 'videos']
45
+ #
46
+ # files = tree.children.select(&:leaf?).collect(&:key)
47
+ # #=> ['README.txt']
48
+ #
49
+ # If you want to start further down, pass a prefix to {Bucket#as_tree}:
50
+ #
51
+ # tree = bucket.as_tree(:prefix => 'photos/2011')
52
+ #
53
+ # directories = tree.children.select(&:branch?).collect(&:prefix)
54
+ # #=> ['photos/20011/fall', 'photos/20011/summer']
55
+ #
56
+ # files = tree.children.select(&:leaf?).collect(&:key)
57
+ # #=> []
58
+ #
59
+ # All non-leaf nodes ({Tree} and {Tree::BranchNode} instances)
60
+ # have a {Tree::Parent#children} method that provides access to
61
+ # the next level of the tree, and all nodes ({Tree},
62
+ # {Tree::BranchNode}, and {Tree::LeafNode}) have a {#parent}
63
+ # method that returns the parent node. In our examples above, the
64
+ # non-leaf nodes are common prefixes to multiple keys
65
+ # (directories) and leaf nodes are object keys.
66
+ #
67
+ # You can continue crawling the tree using the +children+
68
+ # collection on each branch node, which will contain the branch
69
+ # nodes and leaf nodes below it.
70
+ #
71
+ # You can construct a Tree object using the +as_tree+ method of
72
+ # any of the following classes:
73
+ #
74
+ # * {Bucket} or {ObjectCollection} (for {S3Object} leaf nodes)
75
+ #
76
+ # * {BucketVersionCollection} (for {ObjectVersion} leaf nodes)
77
+ #
78
+ # * {MultipartUploadCollection} (for {MultipartUpload} leaf nodes)
79
+ #
80
+ # The methods to explore the tree are the same for each kind of
81
+ # leaf node, but {Tree::LeafNode#member} will return a different
82
+ # type of object depending on which kind of collection the tree is
83
+ # using.
84
+ class Tree
85
+
86
+ include Parent
87
+
88
+ # @param [ObjectCollection, BucketVersionCollection,
89
+ # MultipartUploadCollection] collection The collection whose
90
+ # members will be explored using the tree.
91
+ #
92
+ # @param [Hash] options Additional options for constructing the
93
+ # tree.
94
+ #
95
+ # @option options [String] :prefix (nil) Set prefix to choose
96
+ # where the top of the tree will be. A value of +nil+ means
97
+ # that the tree will include all objects in the collection.
98
+ #
99
+ # @option options [String] :delimiter ('/') The string that
100
+ # separates each level of the tree. This is usually a
101
+ # directory separator.
102
+ #
103
+ # @option options [Boolean] :append (true) If true, the delimiter is
104
+ # appended to the prefix when the prefix does not already end
105
+ # with the delimiter.
106
+ def initialize collection, options = {}
107
+ super
108
+ end
109
+
110
+ # @return The parent node in the tree. In the case of a Tree,
111
+ # the parent is always nil.
112
+ def parent; nil; end
113
+
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,71 @@
1
+ # Copyright 2011 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 'aws/model'
15
+ require 'aws/s3/tree/parent'
16
+
17
+ module AWS
18
+ class S3
19
+ class Tree
20
+
21
+ # Represents a branch in an {S3::Tree}. From a branch node you
22
+ # can descend deeper into the tree using {Parent#children} or go
23
+ # back to the parent node using {#parent}.
24
+ #
25
+ # When enumerating nodes in an S3 tree keys grouped by a common
26
+ # prefix are represented as a branch node.
27
+ #
28
+ # Branch nodes are often treated like directories.
29
+ #
30
+ # @see Tree
31
+ # @note Generally you do not need to create branch nodes.
32
+ class BranchNode < Node
33
+
34
+ include Parent
35
+
36
+ # @private
37
+ def initialize parent, collection, options = {}
38
+ @parent = parent
39
+ super(collection,
40
+ options.merge(:prefix => collection.prefix))
41
+ end
42
+
43
+ # @return [Tree, BranchNode] The parent node in the tree.
44
+ attr_reader :parent
45
+
46
+ # @return [true]
47
+ def branch?
48
+ true
49
+ end
50
+
51
+ # @return [false]
52
+ def leaf?
53
+ false
54
+ end
55
+
56
+ # Returns a new Tree object that starts at this branch node.
57
+ # The returned tree will have the same prefix, delimiter and
58
+ # append mode as the tree the branch belongs to.
59
+ #
60
+ # @return [Tree]
61
+ def as_tree
62
+ Tree.new(collection,
63
+ :prefix => prefix,
64
+ :delimiter => delimiter,
65
+ :append => append?)
66
+ end
67
+
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,108 @@
1
+ # Copyright 2011 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 'aws/model'
15
+ require 'aws/s3/tree/leaf_node'
16
+ require 'aws/s3/tree/branch_node'
17
+
18
+ module AWS
19
+ class S3
20
+ class Tree
21
+
22
+ class ChildCollection
23
+
24
+ include Model
25
+ include Enumerable
26
+
27
+ # @private
28
+ def initialize parent, collection, options = {}
29
+
30
+ options = {
31
+ :prefix => nil,
32
+ :delimiter => '/',
33
+ :append => true,
34
+ }.merge(options)
35
+
36
+ @parent = parent
37
+ @collection = collection
38
+ @prefix = options[:prefix]
39
+ @delimiter = options[:delimiter]
40
+ @append = options[:append]
41
+
42
+ super
43
+
44
+ end
45
+
46
+ # @return [Tree, BranchNode] The parent node in the tree.
47
+ attr_reader :parent
48
+
49
+ # @return [ObjectCollection, ObjectVersionCollection,
50
+ # MultipartUploadCollection] Returns the collection this
51
+ # tree is based on.
52
+ attr_reader :collection
53
+
54
+ # A tree may have a prefix of where in the bucket to be based from.
55
+ # @return [String,nil]
56
+ attr_reader :prefix
57
+
58
+ # When looking at S3 keys as a tree, the delimiter defines what
59
+ # string pattern seperates each level of the tree. The delimiter
60
+ # defaults to '/' (like in a file system).
61
+ # @return [String]
62
+ attr_reader :delimiter
63
+
64
+ # @return [Boolean] Returns true if the tree is set to auto-append
65
+ # the delimiter to the prefix when the prefix does not end with
66
+ # the delimiter.
67
+ def append?
68
+ @append
69
+ end
70
+
71
+ # Yields up branches and leaves.
72
+ #
73
+ # A branch node represents a common prefix (like a directory)
74
+ # and a leaf node represents a key (S3 object).
75
+ #
76
+ # @yield [tree_node] Yields up a mixture of branches and leafs.
77
+ # @yieldparam [BranchNode,LeafNode] tree_node A branch or a leaf.
78
+ # @return [nil]
79
+ def each &block
80
+ collection = self.collection
81
+ if prefix = prefix_with_delim
82
+ collection = collection.with_prefix(prefix)
83
+ end
84
+ collection.each(:delimiter => delimiter) do |member|
85
+ case
86
+ when member.respond_to?(:key)
87
+ yield LeafNode.new(parent, member)
88
+ when member.respond_to?(:prefix)
89
+ yield BranchNode.new(parent, member,
90
+ :delimiter => delimiter,
91
+ :append => append?)
92
+ end
93
+ end
94
+ nil
95
+ end
96
+
97
+ protected
98
+ def prefix_with_delim
99
+ return prefix unless append?
100
+ return nil if prefix.nil?
101
+ prefix =~ /#{delimiter}$/ ? prefix : "#{prefix}#{delimiter}"
102
+ end
103
+
104
+ end
105
+
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,99 @@
1
+ # Copyright 2011 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 'aws/s3/tree/node'
15
+ require 'aws/s3/s3_object'
16
+ require 'aws/s3/object_version'
17
+ require 'aws/s3/multipart_upload'
18
+
19
+ module AWS
20
+ class S3
21
+ class Tree
22
+
23
+ # Represents a leaf in an {S3::Tree}.
24
+ #
25
+ # When enumerating nodes in an S3 tree, keys are yielded
26
+ # as leaf nodes (they have no children beneath them).
27
+ #
28
+ # @see Tree
29
+ # @note Generally you do not need to create leaf nodes
30
+ class LeafNode < Node
31
+
32
+ # @private
33
+ def initialize parent, member
34
+ @parent = parent
35
+ @member = member
36
+ super()
37
+ end
38
+
39
+ # @return [Tree, BranchNode] The parent node in the tree.
40
+ attr_reader :parent
41
+
42
+ # @return [mixed] Returns the object this leaf node represents.
43
+ # @see #object
44
+ # @see #version
45
+ # @see #upload
46
+ attr_reader :member
47
+
48
+ # @return [String] the key this leaf node represents.
49
+ def key
50
+ @member.key
51
+ end
52
+
53
+ # @return [false]
54
+ def branch?
55
+ false
56
+ end
57
+
58
+ # @return [true]
59
+ def leaf?
60
+ true
61
+ end
62
+
63
+ # @return [S3Object] The object this leaf node represents.
64
+ def object
65
+ if @member.kind_of?(S3Object)
66
+ @member
67
+ else
68
+ @member.object
69
+ end
70
+ end
71
+
72
+ # @return [ObjectVersion] Returns the object version this leaf
73
+ # node represents.
74
+ def version
75
+ if @member.kind_of?(ObjectVersion)
76
+ @member
77
+ else
78
+ raise "This leaf does not represent a version"
79
+ end
80
+ end
81
+
82
+ # @return [MultipartUpload] Returns the object version this leaf
83
+ # node represents.
84
+ def upload
85
+ if @member.kind_of?(MultipartUpload)
86
+ @member
87
+ else
88
+ raise "This leaf does not represent an upload"
89
+ end
90
+ end
91
+
92
+ def inspect
93
+ "<#{self.class}:#{@member.bucket.name}:#{key}>"
94
+ end
95
+
96
+ end
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,22 @@
1
+ # Copyright 2011 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
+ class S3
16
+ class Tree
17
+ # @private
18
+ class Node
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,90 @@
1
+ # Copyright 2011 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 'aws/model'
15
+ require 'aws/s3/tree/node'
16
+
17
+ module AWS
18
+ class S3
19
+
20
+ class Tree
21
+
22
+ # Common methods for tree nodes that are parents to other nodes
23
+ # ({Tree} and {BranchNode}).
24
+ module Parent
25
+
26
+ include Model
27
+
28
+ # @private
29
+ def initialize collection, options = {}
30
+
31
+ options = {
32
+ :prefix => nil,
33
+ :delimiter => '/',
34
+ :append => true,
35
+ }.merge(options)
36
+
37
+ @collection = collection
38
+ @prefix = options[:prefix]
39
+ @delimiter = options[:delimiter]
40
+ @append = options[:append]
41
+
42
+ super
43
+
44
+ end
45
+
46
+ # @return [ObjectCollection, BucketVersionCollection,
47
+ # MultipartUploadCollection] The collection whose members
48
+ # will be explored using the tree.
49
+ attr_reader :collection
50
+
51
+ # A tree may have a prefix of where in the bucket to be based
52
+ # from. A value of +nil+ means that the tree will include all
53
+ # objects in the collection.
54
+ #
55
+ # @return [String,nil]
56
+ attr_reader :prefix
57
+
58
+ # When looking at S3 keys as a tree, the delimiter defines what
59
+ # string pattern seperates each level of the tree. The delimiter
60
+ # defaults to '/' (like in a file system).
61
+ #
62
+ # @return [String]
63
+ attr_reader :delimiter
64
+
65
+ # @return [Boolean] Returns true if the tree is set to auto-append
66
+ # the delimiter to the prefix when the prefix does not end with
67
+ # the delimiter.
68
+ def append?
69
+ @append
70
+ end
71
+
72
+ # @return [Tree::ChildCollection] A collection representing all
73
+ # the child nodes of this node. These may be either
74
+ # {Tree::BranchNode} objects or {Tree::LeafNode} objects.
75
+ def children
76
+ Tree::ChildCollection.new(self, collection,
77
+ :delimiter => delimiter,
78
+ :prefix => prefix,
79
+ :append => append?)
80
+ end
81
+
82
+ def inspect
83
+ "<#{self.class}:#{collection.bucket.name}:#{prefix}>"
84
+ end
85
+
86
+ end
87
+
88
+ end
89
+ end
90
+ end