Class: AWS::S3::Tree
- Inherits:
-
Object
- Object
- AWS::S3::Tree
- Includes:
- Parent
- Defined in:
- lib/aws/s3/tree.rb,
lib/aws/s3/tree/node.rb,
lib/aws/s3/tree/parent.rb,
lib/aws/s3/tree/leaf_node.rb,
lib/aws/s3/tree/branch_node.rb,
lib/aws/s3/tree/child_collection.rb
Overview
A utility class that supports exploring an S3 Bucket like a tree.
Frequently objects stored in S3 have keys that look like a filesystem directory structure.
Given you have a bucket with the following keys:
README.txt
videos/wedding.mpg
videos/family_reunion.mpg
photos/2010/house.jpg
photos/2011/fall/leaves.jpg
photos/2011/summer/vacation.jpg
photos/2011/summer/family.jpg
You might like to explore the contents of this bucket as a tree:
tree = bucket.as_tree
directories = tree.children.select(&:branch?).collect(&:prefix)
#=> ['photos', 'videos']
files = tree.children.select(&:leaf?).collect(&:key)
#=> ['README.txt']
If you want to start further down, pass a prefix to Bucket#as_tree:
tree = bucket.as_tree(:prefix => 'photos/2011')
directories = tree.children.select(&:branch?).collect(&:prefix)
#=> ['photos/20011/fall', 'photos/20011/summer']
files = tree.children.select(&:leaf?).collect(&:key)
#=> []
All non-leaf nodes (Tree and BranchNode instances) have a Parent#children method that provides access to the next level of the tree, and all nodes (Tree, BranchNode, and LeafNode) have a #parent method that returns the parent node. In our examples above, the non-leaf nodes are common prefixes to multiple keys (directories) and leaf nodes are object keys.
You can continue crawling the tree using the children
collection on each branch node, which will contain the branch nodes and leaf nodes below it.
You can construct a Tree object using the as_tree
method of any of the following classes:
-
Bucket or ObjectCollection (for S3Object leaf nodes)
-
BucketVersionCollection (for ObjectVersion leaf nodes)
-
MultipartUploadCollection (for MultipartUpload leaf nodes)
The methods to explore the tree are the same for each kind of leaf node, but LeafNode#member will return a different type of object depending on which kind of collection the tree is using.
Defined Under Namespace
Modules: Parent Classes: BranchNode, ChildCollection, LeafNode, Node
Instance Attribute Summary
Attributes included from Parent
#collection, #delimiter, #prefix
Attributes included from Core::Model
Instance Method Summary collapse
-
#initialize(collection, options = {}) ⇒ Tree
constructor
A new instance of Tree.
-
#parent ⇒ Object
The parent node in the tree.
Methods included from Parent
Methods included from Core::Model
#client, #config_prefix, #inspect
Constructor Details
#initialize(collection, options = {}) ⇒ Tree
Returns a new instance of Tree.
108 109 110 |
# File 'lib/aws/s3/tree.rb', line 108 def initialize collection, = {} super end |
Instance Method Details
#parent ⇒ Object
Returns The parent node in the tree. In the case of a Tree, the parent is always nil.
114 |
# File 'lib/aws/s3/tree.rb', line 114 def parent; nil; end |