html/classes/S33r/S3Object.html in s33r-0.4.1 vs html/classes/S33r/S3Object.html in s33r-0.4.2
- old
+ new
@@ -53,12 +53,12 @@
<td class="class-name-in-header">S33r::S3Object</td>
</tr>
<tr class="top-aligned-row">
<td><strong>In:</strong></td>
<td>
- <a href="../../files/lib/s33r/bucket_listing_rb.html">
- lib/s33r/bucket_listing.rb
+ <a href="../../files/lib/s33r/s3_obj_rb.html">
+ lib/s33r/s3_obj.rb
</a>
<br />
</td>
</tr>
@@ -76,28 +76,29 @@
<div id="contextContent">
- <div id="description">
- <p>
-Representation of an object stored in a bucket.
-</p>
- </div>
-
</div>
<div id="method-list">
<h3 class="section-bar">Methods</h3>
<div class="name-list">
- <a href="#M000088">delete</a>
+ <a href="#M000096">delete</a>
+ <a href="#M000089">from_file</a>
+ <a href="#M000093">from_response</a>
+ <a href="#M000091">from_xml_node</a>
+ <a href="#M000090">from_xml_string</a>
+ <a href="#M000095">load</a>
<a href="#M000087">new</a>
- <a href="#M000090">set_from_node</a>
- <a href="#M000089">set_from_xml_string</a>
+ <a href="#M000094">parse_response</a>
+ <a href="#M000092">parse_xml_node</a>
+ <a href="#M000097">save</a>
+ <a href="#M000088">set_properties</a>
</div>
</div>
</div>
@@ -114,183 +115,490 @@
<h3 class="section-bar">Attributes</h3>
<div class="name-list">
<table>
<tr class="top-aligned-row context-row">
+ <td class="context-item-name">content_type</td>
+ <td class="context-item-value"> [RW] </td>
+ <td class="context-item-desc"></td>
+ </tr>
+ <tr class="top-aligned-row context-row">
<td class="context-item-name">etag</td>
- <td class="context-item-value"> [R] </td>
+ <td class="context-item-value"> [RW] </td>
<td class="context-item-desc"></td>
</tr>
<tr class="top-aligned-row context-row">
<td class="context-item-name">key</td>
- <td class="context-item-value"> [R] </td>
+ <td class="context-item-value"> [RW] </td>
<td class="context-item-desc"></td>
</tr>
<tr class="top-aligned-row context-row">
<td class="context-item-name">last_modified</td>
- <td class="context-item-value"> [R] </td>
+ <td class="context-item-value"> [RW] </td>
<td class="context-item-desc"></td>
</tr>
<tr class="top-aligned-row context-row">
- <td class="context-item-name">named_bucket</td>
- <td class="context-item-value"> [R] </td>
+ <td class="context-item-name">meta</td>
+ <td class="context-item-value"> [RW] </td>
+ <td class="context-item-desc">
+Metadata set by x-amz-meta- style headers. Note that the bit after
+x-amz-meta- is stored for each key, rather than the full key.
+
+</td>
+ </tr>
+ <tr class="top-aligned-row context-row">
+ <td class="context-item-name">mime_type</td>
+ <td class="context-item-value"> [RW] </td>
<td class="context-item-desc"></td>
</tr>
<tr class="top-aligned-row context-row">
<td class="context-item-name">named_bucket</td>
- <td class="context-item-value"> [W] </td>
+ <td class="context-item-value"> [RW] </td>
<td class="context-item-desc"></td>
</tr>
<tr class="top-aligned-row context-row">
<td class="context-item-name">owner</td>
- <td class="context-item-value"> [R] </td>
+ <td class="context-item-value"> [RW] </td>
<td class="context-item-desc"></td>
</tr>
<tr class="top-aligned-row context-row">
<td class="context-item-name">size</td>
- <td class="context-item-value"> [R] </td>
+ <td class="context-item-value"> [RW] </td>
<td class="context-item-desc"></td>
</tr>
<tr class="top-aligned-row context-row">
<td class="context-item-name">storage_class</td>
- <td class="context-item-value"> [R] </td>
+ <td class="context-item-value"> [RW] </td>
<td class="context-item-desc"></td>
</tr>
+ <tr class="top-aligned-row context-row">
+ <td class="context-item-name">value</td>
+ <td class="context-item-value"> [RW] </td>
+ <td class="context-item-desc"></td>
+ </tr>
</table>
</div>
</div>
<!-- if method_list -->
<div id="methods">
<h3 class="section-bar">Public Class methods</h3>
+ <div id="method-M000089" class="method-detail">
+ <a name="M000089"></a>
+
+ <div class="method-heading">
+ <a href="#M000089" class="method-signature">
+ <span class="method-name">from_file</span><span class="method-args">(key, filename)</span>
+ </a>
+ </div>
+
+ <div class="method-description">
+ <p>
+To create an object which reads the content in from a file; this is not
+very efficient - it’s actually better to use <a
+href="NamedBucket.html#M000111">NamedBucket.put_file</a>, as this will
+stream out of a file to S3, rather than load the file in memory first.
+</p>
+ <p><a class="source-toggle" href="#"
+ onclick="toggleCode('M000089-source');return false;">[Source]</a></p>
+ <div class="method-source-code" id="M000089-source">
+<pre>
+ <span class="ruby-comment cmt"># File lib/s33r/s3_obj.rb, line 43</span>
+43: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">from_file</span>(<span class="ruby-identifier">key</span>, <span class="ruby-identifier">filename</span>)
+44: <span class="ruby-identifier">mime_type</span> = <span class="ruby-identifier">guess_mime_type</span>(<span class="ruby-identifier">filename</span>)
+45: <span class="ruby-identifier">content_type</span> = <span class="ruby-identifier">mime_type</span>.<span class="ruby-identifier">simplified</span>
+46: <span class="ruby-identifier">value</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">filename</span>).<span class="ruby-identifier">read</span>
+47: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">key</span>, { <span class="ruby-identifier">:content_type</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">content_type</span> }, {}, <span class="ruby-identifier">value</span>)
+48: <span class="ruby-keyword kw">end</span>
+</pre>
+ </div>
+ </div>
+ </div>
+
+ <div id="method-M000093" class="method-detail">
+ <a name="M000093"></a>
+
+ <div class="method-heading">
+ <a href="#M000093" class="method-signature">
+ <span class="method-name">from_response</span><span class="method-args">(key, resp)</span>
+ </a>
+ </div>
+
+ <div class="method-description">
+ <p>
+Create a new instance from a HTTP response. This is useful if you do a GET
+for a resource key and want to convert the response into an object; NB the
+response doesn’t necessarily contain all the metadata you might want
+- you need to do a HEAD for that.
+</p>
+<p>
+<tt>key</tt> is the key for the resource (not part of the response).
+</p>
+<p>
+Note that if the resp returns nil, a blank object is created.
+</p>
+ <p><a class="source-toggle" href="#"
+ onclick="toggleCode('M000093-source');return false;">[Source]</a></p>
+ <div class="method-source-code" id="M000093-source">
+<pre>
+ <span class="ruby-comment cmt"># File lib/s33r/s3_obj.rb, line 93</span>
+ 93: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">from_response</span>(<span class="ruby-identifier">key</span>, <span class="ruby-identifier">resp</span>)
+ 94: <span class="ruby-identifier">result</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">parse_response</span>(<span class="ruby-identifier">resp</span>)
+ 95: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">result</span>
+ 96: <span class="ruby-identifier">metadata</span>, <span class="ruby-identifier">amz_meta</span>, <span class="ruby-identifier">value</span> = <span class="ruby-identifier">result</span>
+ 97: <span class="ruby-keyword kw">else</span>
+ 98: <span class="ruby-identifier">metadata</span> = {}
+ 99: <span class="ruby-identifier">amz_meta</span> = {}
+100: <span class="ruby-identifier">value</span> = <span class="ruby-keyword kw">nil</span>
+101: <span class="ruby-keyword kw">end</span>
+102: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">key</span>, <span class="ruby-identifier">metadata</span>, <span class="ruby-identifier">amz_meta</span>, <span class="ruby-identifier">value</span>)
+103: <span class="ruby-keyword kw">end</span>
+</pre>
+ </div>
+ </div>
+ </div>
+
+ <div id="method-M000091" class="method-detail">
+ <a name="M000091"></a>
+
+ <div class="method-heading">
+ <a href="#M000091" class="method-signature">
+ <span class="method-name">from_xml_node</span><span class="method-args">(doc)</span>
+ </a>
+ </div>
+
+ <div class="method-description">
+ <p>
+Create a new instance from an <a href="../XML.html">XML</a> document.
+</p>
+ <p><a class="source-toggle" href="#"
+ onclick="toggleCode('M000091-source');return false;">[Source]</a></p>
+ <div class="method-source-code" id="M000091-source">
+<pre>
+ <span class="ruby-comment cmt"># File lib/s33r/s3_obj.rb, line 59</span>
+59: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">from_xml_node</span>(<span class="ruby-identifier">doc</span>)
+60: <span class="ruby-identifier">metadata</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">parse_xml_node</span>(<span class="ruby-identifier">doc</span>)
+61: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">metadata</span>[<span class="ruby-identifier">:key</span>], <span class="ruby-identifier">metadata</span>)
+62: <span class="ruby-keyword kw">end</span>
+</pre>
+ </div>
+ </div>
+ </div>
+
+ <div id="method-M000090" class="method-detail">
+ <a name="M000090"></a>
+
+ <div class="method-heading">
+ <a href="#M000090" class="method-signature">
+ <span class="method-name">from_xml_string</span><span class="method-args">(xml_str)</span>
+ </a>
+ </div>
+
+ <div class="method-description">
+ <p>
+Set properties of the object from an <a href="../XML.html">XML</a> string.
+</p>
+<p>
+<tt>xml_str</tt> should be a string representing a full <a
+href="../XML.html">XML</a> document, containing a <Contents> element
+as its root element.
+</p>
+ <p><a class="source-toggle" href="#"
+ onclick="toggleCode('M000090-source');return false;">[Source]</a></p>
+ <div class="method-source-code" id="M000090-source">
+<pre>
+ <span class="ruby-comment cmt"># File lib/s33r/s3_obj.rb, line 54</span>
+54: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">from_xml_string</span>(<span class="ruby-identifier">xml_str</span>)
+55: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">from_xml_node</span>(<span class="ruby-constant">XML</span>.<span class="ruby-identifier">get_xml_doc</span>(<span class="ruby-identifier">xml_str</span>))
+56: <span class="ruby-keyword kw">end</span>
+</pre>
+ </div>
+ </div>
+ </div>
+
<div id="method-M000087" class="method-detail">
<a name="M000087"></a>
<div class="method-heading">
<a href="#M000087" class="method-signature">
- <span class="method-name">new</span><span class="method-args">(node=nil, named_bucket=nil)</span>
+ <span class="method-name">new</span><span class="method-args">(key, metadata={}, amz_meta={}, value=nil)</span>
</a>
</div>
<div class="method-description">
- <p>
-Create from a node.
-</p>
<p><a class="source-toggle" href="#"
onclick="toggleCode('M000087-source');return false;">[Source]</a></p>
<div class="method-source-code" id="M000087-source">
<pre>
- <span class="ruby-comment cmt"># File lib/s33r/bucket_listing.rb, line 112</span>
-112: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">node</span>=<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">named_bucket</span>=<span class="ruby-keyword kw">nil</span>)
-113: <span class="ruby-ivar">@named_bucket</span> = <span class="ruby-identifier">named_bucket</span>
-114: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">set_from_node</span>(<span class="ruby-identifier">node</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">node</span>.<span class="ruby-identifier">nil?</span>
-115: <span class="ruby-keyword kw">end</span>
+ <span class="ruby-comment cmt"># File lib/s33r/s3_obj.rb, line 13</span>
+13: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">key</span>, <span class="ruby-identifier">metadata</span>={}, <span class="ruby-identifier">amz_meta</span>={}, <span class="ruby-identifier">value</span>=<span class="ruby-keyword kw">nil</span>)
+14: <span class="ruby-ivar">@key</span> = <span class="ruby-identifier">key</span>
+15: <span class="ruby-ivar">@meta</span> = <span class="ruby-identifier">amz_meta</span>
+16: <span class="ruby-ivar">@value</span> = <span class="ruby-identifier">value</span>
+17: <span class="ruby-identifier">set_properties</span>(<span class="ruby-identifier">metadata</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">metadata</span>.<span class="ruby-identifier">empty?</span>
+18: <span class="ruby-keyword kw">end</span>
</pre>
</div>
</div>
</div>
+ <div id="method-M000094" class="method-detail">
+ <a name="M000094"></a>
+
+ <div class="method-heading">
+ <a href="#M000094" class="method-signature">
+ <span class="method-name">parse_response</span><span class="method-args">(resp)</span>
+ </a>
+ </div>
+
+ <div class="method-description">
+ <p>
+Parse the response returned by GET on a resource key within a bucket.
+</p>
+<p>
+<tt>resp</tt> is a <a href="../Net/HTTPResponse.html">Net::HTTPResponse</a>
+instance.
+</p>
+<p>
+Returns an array [<tt>metadata</tt>, +response.body+]; or nil if the object
+doesn’t exist.
+</p>
+ <p><a class="source-toggle" href="#"
+ onclick="toggleCode('M000094-source');return false;">[Source]</a></p>
+ <div class="method-source-code" id="M000094-source">
+<pre>
+ <span class="ruby-comment cmt"># File lib/s33r/s3_obj.rb, line 112</span>
+112: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">parse_response</span>(<span class="ruby-identifier">resp</span>)
+113: <span class="ruby-identifier">resp_headers</span> = <span class="ruby-identifier">resp</span>.<span class="ruby-identifier">to_hash</span>
+114:
+115: <span class="ruby-comment cmt"># If there's no etag, there's no content in the resource.</span>
+116: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">resp_headers</span>[<span class="ruby-value str">'etag'</span>]
+117: <span class="ruby-identifier">metadata</span> = {}
+118: <span class="ruby-identifier">metadata</span>[<span class="ruby-identifier">:last_modified</span>] = <span class="ruby-identifier">resp_headers</span>[<span class="ruby-value str">'last-modified'</span>][<span class="ruby-value">0</span>]
+119: <span class="ruby-identifier">metadata</span>[<span class="ruby-identifier">:etag</span>] = <span class="ruby-identifier">resp_headers</span>[<span class="ruby-value str">'etag'</span>][<span class="ruby-value">0</span>]
+120: <span class="ruby-identifier">metadata</span>[<span class="ruby-identifier">:size</span>] = <span class="ruby-identifier">resp_headers</span>[<span class="ruby-value str">'content-length'</span>][<span class="ruby-value">0</span>]
+121: <span class="ruby-identifier">metadata</span>[<span class="ruby-identifier">:content_type</span>] = <span class="ruby-identifier">resp_headers</span>[<span class="ruby-value str">'content-type'</span>][<span class="ruby-value">0</span>]
+122:
+123: <span class="ruby-comment cmt"># x-amz-meta- response headers.</span>
+124: <span class="ruby-identifier">interesting_header</span> = <span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">new</span>(<span class="ruby-constant">METADATA_PREFIX</span>)
+125: <span class="ruby-identifier">amz_meta</span> = {}
+126: <span class="ruby-identifier">resp</span>.<span class="ruby-identifier">each_header</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">key</span>, <span class="ruby-identifier">value</span><span class="ruby-operator">|</span>
+127: <span class="ruby-identifier">amz_meta</span>[<span class="ruby-identifier">key</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-identifier">interesting_header</span>, <span class="ruby-value str">''</span>)] = <span class="ruby-identifier">value</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">interesting_header</span> <span class="ruby-operator">=~</span> <span class="ruby-identifier">key</span>
+128: <span class="ruby-keyword kw">end</span>
+129:
+130: <span class="ruby-comment cmt"># The actual content of the S3 object.</span>
+131: <span class="ruby-identifier">value</span> = <span class="ruby-identifier">resp</span>.<span class="ruby-identifier">body</span>
+132:
+133: [<span class="ruby-identifier">metadata</span>, <span class="ruby-identifier">amz_meta</span>, <span class="ruby-identifier">value</span>]
+134: <span class="ruby-keyword kw">else</span>
+135: <span class="ruby-keyword kw">nil</span>
+136: <span class="ruby-keyword kw">end</span>
+137: <span class="ruby-keyword kw">end</span>
+</pre>
+ </div>
+ </div>
+ </div>
+
+ <div id="method-M000092" class="method-detail">
+ <a name="M000092"></a>
+
+ <div class="method-heading">
+ <a href="#M000092" class="method-signature">
+ <span class="method-name">parse_xml_node</span><span class="method-args">(doc)</span>
+ </a>
+ </div>
+
+ <div class="method-description">
+ <p>
+Get properties of the object from an <a href="../XML.html">XML</a>
+document, e.g. as returned in a bucket listing.
+</p>
+<p>
+<tt>doc</tt>: <a href="../XML/Document.html">XML::Document</a> instance to
+parse to get properties for this object.
+</p>
+<p>
+Returns the metadata relating to the object, as stored on S3.
+</p>
+ <p><a class="source-toggle" href="#"
+ onclick="toggleCode('M000092-source');return false;">[Source]</a></p>
+ <div class="method-source-code" id="M000092-source">
+<pre>
+ <span class="ruby-comment cmt"># File lib/s33r/s3_obj.rb, line 70</span>
+70: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">parse_xml_node</span>(<span class="ruby-identifier">doc</span>)
+71: <span class="ruby-identifier">metadata</span> = {}
+72: <span class="ruby-identifier">metadata</span>[<span class="ruby-identifier">:key</span>] = <span class="ruby-identifier">doc</span>.<span class="ruby-identifier">xget</span>(<span class="ruby-value str">'Key'</span>)
+73: <span class="ruby-identifier">metadata</span>[<span class="ruby-identifier">:last_modified</span>] = <span class="ruby-identifier">doc</span>.<span class="ruby-identifier">xget</span>(<span class="ruby-value str">'LastModified'</span>)
+74: <span class="ruby-identifier">metadata</span>[<span class="ruby-identifier">:etag</span>] = <span class="ruby-identifier">doc</span>.<span class="ruby-identifier">xget</span>(<span class="ruby-value str">'ETag'</span>)
+75: <span class="ruby-identifier">metadata</span>[<span class="ruby-identifier">:size</span>] = <span class="ruby-identifier">doc</span>.<span class="ruby-identifier">xget</span>(<span class="ruby-value str">'Size'</span>)
+76:
+77: <span class="ruby-comment cmt"># Build representation of the owner.</span>
+78: <span class="ruby-identifier">user_xml_doc</span> = <span class="ruby-identifier">doc</span>.<span class="ruby-identifier">find</span>(<span class="ruby-value str">'Owner'</span>).<span class="ruby-identifier">to_a</span>.<span class="ruby-identifier">first</span>
+79: <span class="ruby-identifier">metadata</span>[<span class="ruby-identifier">:owner</span>] = <span class="ruby-constant">S3ACL</span><span class="ruby-operator">::</span><span class="ruby-constant">CanonicalUser</span>.<span class="ruby-identifier">from_xml</span>(<span class="ruby-identifier">user_xml_doc</span>)
+80:
+81: <span class="ruby-identifier">metadata</span>
+82: <span class="ruby-keyword kw">end</span>
+</pre>
+ </div>
+ </div>
+ </div>
+
<h3 class="section-bar">Public Instance methods</h3>
- <div id="method-M000088" class="method-detail">
- <a name="M000088"></a>
+ <div id="method-M000096" class="method-detail">
+ <a name="M000096"></a>
<div class="method-heading">
- <a href="#M000088" class="method-signature">
+ <a href="#M000096" class="method-signature">
<span class="method-name">delete</span><span class="method-args">()</span>
</a>
</div>
<div class="method-description">
<p>
-Remove this object from associated <a
+Remove this object from its associated <a
href="NamedBucket.html">NamedBucket</a>.
</p>
+<p>
+Returns false if this object is not associated with a bucket; otherwise
+returns the response from S3.
+</p>
<p><a class="source-toggle" href="#"
- onclick="toggleCode('M000088-source');return false;">[Source]</a></p>
- <div class="method-source-code" id="M000088-source">
+ onclick="toggleCode('M000096-source');return false;">[Source]</a></p>
+ <div class="method-source-code" id="M000096-source">
<pre>
- <span class="ruby-comment cmt"># File lib/s33r/bucket_listing.rb, line 118</span>
-118: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">delete</span>
-119: <span class="ruby-ivar">@named_bucket</span>.<span class="ruby-identifier">delete_key</span>(<span class="ruby-ivar">@key</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@named_bucket</span>.<span class="ruby-identifier">nil?</span>
-120: <span class="ruby-keyword kw">end</span>
+ <span class="ruby-comment cmt"># File lib/s33r/s3_obj.rb, line 163</span>
+163: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">delete</span>
+164: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@named_bucket</span>.<span class="ruby-identifier">nil?</span>
+165: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
+166: <span class="ruby-keyword kw">else</span>
+167: <span class="ruby-ivar">@named_bucket</span>.<span class="ruby-identifier">delete_resource</span>(<span class="ruby-ivar">@key</span>)
+168: <span class="ruby-keyword kw">end</span>
+169: <span class="ruby-keyword kw">end</span>
</pre>
</div>
</div>
</div>
- <div id="method-M000090" class="method-detail">
- <a name="M000090"></a>
+ <div id="method-M000095" class="method-detail">
+ <a name="M000095"></a>
<div class="method-heading">
- <a href="#M000090" class="method-signature">
- <span class="method-name">set_from_node</span><span class="method-args">(doc)</span>
+ <a href="#M000095" class="method-signature">
+ <span class="method-name">load</span><span class="method-args">()</span>
</a>
</div>
<div class="method-description">
<p>
-Set properties of the object from an <a href="../XML.html">XML</a>
-document.
+Load content into this object from S3; will perform an HTTP request to
+"refresh" the object (providing the object has an association
+with a bucket it can use for piggybacking).
</p>
<p>
-<tt>doc</tt>: <a href="../XML/Document.html">XML::Document</a> instance to
-parse to get properties for this object.
+Returns false if value cannot be retrieved.
</p>
<p><a class="source-toggle" href="#"
- onclick="toggleCode('M000090-source');return false;">[Source]</a></p>
- <div class="method-source-code" id="M000090-source">
+ onclick="toggleCode('M000095-source');return false;">[Source]</a></p>
+ <div class="method-source-code" id="M000095-source">
<pre>
- <span class="ruby-comment cmt"># File lib/s33r/bucket_listing.rb, line 133</span>
-133: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">set_from_node</span>(<span class="ruby-identifier">doc</span>)
-134: <span class="ruby-ivar">@key</span> = <span class="ruby-identifier">doc</span>.<span class="ruby-identifier">xget</span>(<span class="ruby-value str">'Key'</span>)
-135: <span class="ruby-ivar">@last_modified</span> = <span class="ruby-constant">DateTime</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">doc</span>.<span class="ruby-identifier">xget</span>(<span class="ruby-value str">'LastModified'</span>))
-136: <span class="ruby-ivar">@etag</span> = <span class="ruby-identifier">doc</span>.<span class="ruby-identifier">xget</span>(<span class="ruby-value str">'ETag'</span>).<span class="ruby-identifier">gsub</span>(<span class="ruby-value str">"\""</span>, <span class="ruby-value str">""</span>)
-137: <span class="ruby-ivar">@size</span> = <span class="ruby-identifier">doc</span>.<span class="ruby-identifier">xget</span>(<span class="ruby-value str">'Size'</span>).<span class="ruby-identifier">to_i</span>
-138:
-139: <span class="ruby-comment cmt"># Build representation of the owner.</span>
-140: <span class="ruby-identifier">user_xml_doc</span> = <span class="ruby-identifier">doc</span>.<span class="ruby-identifier">find</span>(<span class="ruby-value str">'Owner'</span>).<span class="ruby-identifier">to_a</span>.<span class="ruby-identifier">first</span>
-141: <span class="ruby-ivar">@owner</span> = <span class="ruby-constant">S3ACL</span><span class="ruby-operator">::</span><span class="ruby-constant">CanonicalUser</span>.<span class="ruby-identifier">from_xml</span>(<span class="ruby-identifier">user_xml_doc</span>)
-142:
-143: <span class="ruby-comment cmt"># TODO: if setting from a full object listing (GET on a resource key),</span>
-144: <span class="ruby-comment cmt"># do additional field setting here (e.g. x-amz-meta- headers)</span>
-145: <span class="ruby-comment cmt"># and assign the response body to some data field; detect whether</span>
-146: <span class="ruby-comment cmt"># these fields exist before attempting to set properties</span>
-147: <span class="ruby-keyword kw">end</span>
+ <span class="ruby-comment cmt"># File lib/s33r/s3_obj.rb, line 144</span>
+144: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">load</span>
+145: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@named_bucket</span> <span class="ruby-keyword kw">and</span> <span class="ruby-ivar">@named_bucket</span>.<span class="ruby-identifier">key_exists?</span>(<span class="ruby-ivar">@key</span>)
+146: <span class="ruby-identifier">resp</span> = <span class="ruby-ivar">@named_bucket</span>.<span class="ruby-identifier">get_raw</span>(<span class="ruby-ivar">@key</span>)
+147: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">resp</span>.<span class="ruby-identifier">ok?</span>
+148: <span class="ruby-ivar">@value</span> = <span class="ruby-identifier">resp</span>.<span class="ruby-identifier">body</span>
+149: <span class="ruby-ivar">@content_type</span> = <span class="ruby-identifier">resp</span>.<span class="ruby-identifier">to_hash</span>[<span class="ruby-value str">'content-type'</span>]
+150: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>
+151: <span class="ruby-keyword kw">else</span>
+152: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
+153: <span class="ruby-keyword kw">end</span>
+154: <span class="ruby-keyword kw">else</span>
+155: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
+156: <span class="ruby-keyword kw">end</span>
+157: <span class="ruby-keyword kw">end</span>
</pre>
</div>
</div>
</div>
- <div id="method-M000089" class="method-detail">
- <a name="M000089"></a>
+ <div id="method-M000097" class="method-detail">
+ <a name="M000097"></a>
<div class="method-heading">
- <a href="#M000089" class="method-signature">
- <span class="method-name">set_from_xml_string</span><span class="method-args">(xml_str)</span>
+ <a href="#M000097" class="method-signature">
+ <span class="method-name">save</span><span class="method-args">()</span>
</a>
</div>
<div class="method-description">
<p>
-Set properties of the object from an <a href="../XML.html">XML</a> string.
+Save this object back into its bucket.
</p>
<p>
-<tt>xml_str</tt> should be a string representing a full <a
-href="../XML.html">XML</a> document, containing a <Contents> element
-as its root element.
+Only works if the object has an associated <a
+href="NamedBucket.html">NamedBucket</a>; returns false if it doesn’t.
</p>
<p><a class="source-toggle" href="#"
- onclick="toggleCode('M000089-source');return false;">[Source]</a></p>
- <div class="method-source-code" id="M000089-source">
+ onclick="toggleCode('M000097-source');return false;">[Source]</a></p>
+ <div class="method-source-code" id="M000097-source">
<pre>
- <span class="ruby-comment cmt"># File lib/s33r/bucket_listing.rb, line 126</span>
-126: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">set_from_xml_string</span>(<span class="ruby-identifier">xml_str</span>)
-127: <span class="ruby-identifier">set_from_node</span>(<span class="ruby-constant">XML</span>.<span class="ruby-identifier">get_xml_doc</span>(<span class="ruby-identifier">xml_str</span>))
-128: <span class="ruby-keyword kw">end</span>
+ <span class="ruby-comment cmt"># File lib/s33r/s3_obj.rb, line 175</span>
+175: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">save</span>
+176: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@named_bucket</span>.<span class="ruby-identifier">nil?</span>
+177: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
+178: <span class="ruby-keyword kw">else</span>
+179: <span class="ruby-identifier">headers</span> = {}
+180: <span class="ruby-identifier">headers</span>[<span class="ruby-value str">"Content-Type"</span>] = <span class="ruby-ivar">@content_type</span> <span class="ruby-operator">||</span> <span class="ruby-value str">''</span>
+181: <span class="ruby-identifier">headers</span> = <span class="ruby-identifier">metadata_headers</span>(<span class="ruby-identifier">headers</span>, <span class="ruby-identifier">meta</span>)
+182: <span class="ruby-ivar">@named_bucket</span>.<span class="ruby-identifier">put_stream</span>(<span class="ruby-ivar">@value</span>, <span class="ruby-ivar">@key</span>, <span class="ruby-identifier">headers</span>)
+183: <span class="ruby-keyword kw">end</span>
+184: <span class="ruby-keyword kw">end</span>
+</pre>
+ </div>
+ </div>
+ </div>
+
+ <div id="method-M000088" class="method-detail">
+ <a name="M000088"></a>
+
+ <div class="method-heading">
+ <a href="#M000088" class="method-signature">
+ <span class="method-name">set_properties</span><span class="method-args">(metadata)</span>
+ </a>
+ </div>
+
+ <div class="method-description">
+ <p>
+Set the properties of the object from some metadata name-value pairs.
+</p>
+<p>
+<tt>metadata</tt> is a hash of properties and their values, used to set the
+corresponding properties on the object.
+</p>
+<p>
+<tt>value</tt> is the data associated with the object on S3.
+</p>
+ <p><a class="source-toggle" href="#"
+ onclick="toggleCode('M000088-source');return false;">[Source]</a></p>
+ <div class="method-source-code" id="M000088-source">
+<pre>
+ <span class="ruby-comment cmt"># File lib/s33r/s3_obj.rb, line 26</span>
+26: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">set_properties</span>(<span class="ruby-identifier">metadata</span>)
+27: <span class="ruby-comment cmt"># required properties</span>
+28: <span class="ruby-ivar">@etag</span> = <span class="ruby-identifier">metadata</span>[<span class="ruby-identifier">:etag</span>].<span class="ruby-identifier">gsub</span>(<span class="ruby-value str">"\""</span>, <span class="ruby-value str">""</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">metadata</span>[<span class="ruby-identifier">:etag</span>]
+29: <span class="ruby-ivar">@last_modified</span> = <span class="ruby-constant">DateTime</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">metadata</span>[<span class="ruby-identifier">:last_modified</span>]) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">metadata</span>[<span class="ruby-identifier">:last_modified</span>]
+30: <span class="ruby-ivar">@size</span> = <span class="ruby-identifier">metadata</span>[<span class="ruby-identifier">:size</span>].<span class="ruby-identifier">to_i</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">metadata</span>[<span class="ruby-identifier">:size</span>]
+31:
+32: <span class="ruby-comment cmt"># only set if creating object from XML (not available otherwise)</span>
+33: <span class="ruby-ivar">@owner</span> = <span class="ruby-identifier">metadata</span>[<span class="ruby-identifier">:owner</span>]
+34:
+35: <span class="ruby-comment cmt"># only set if creating object from HTTP response</span>
+36: <span class="ruby-ivar">@content_type</span> = <span class="ruby-identifier">metadata</span>[<span class="ruby-identifier">:content_type</span>]
+37: <span class="ruby-keyword kw">end</span>
</pre>
</div>
</div>
</div>
\ No newline at end of file