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>&nbsp;&nbsp; + <a href="#M000096">delete</a>&nbsp;&nbsp; + <a href="#M000089">from_file</a>&nbsp;&nbsp; + <a href="#M000093">from_response</a>&nbsp;&nbsp; + <a href="#M000091">from_xml_node</a>&nbsp;&nbsp; + <a href="#M000090">from_xml_string</a>&nbsp;&nbsp; + <a href="#M000095">load</a>&nbsp;&nbsp; <a href="#M000087">new</a>&nbsp;&nbsp; - <a href="#M000090">set_from_node</a>&nbsp;&nbsp; - <a href="#M000089">set_from_xml_string</a>&nbsp;&nbsp; + <a href="#M000094">parse_response</a>&nbsp;&nbsp; + <a href="#M000092">parse_xml_node</a>&nbsp;&nbsp; + <a href="#M000097">save</a>&nbsp;&nbsp; + <a href="#M000088">set_properties</a>&nbsp;&nbsp; </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">&nbsp;[RW]&nbsp;</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">&nbsp;[R]&nbsp;</td> + <td class="context-item-value">&nbsp;[RW]&nbsp;</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">&nbsp;[R]&nbsp;</td> + <td class="context-item-value">&nbsp;[RW]&nbsp;</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">&nbsp;[R]&nbsp;</td> + <td class="context-item-value">&nbsp;[RW]&nbsp;</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">&nbsp;[R]&nbsp;</td> + <td class="context-item-name">meta</td> + <td class="context-item-value">&nbsp;[RW]&nbsp;</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">&nbsp;[RW]&nbsp;</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">&nbsp;[W]&nbsp;</td> + <td class="context-item-value">&nbsp;[RW]&nbsp;</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">&nbsp;[R]&nbsp;</td> + <td class="context-item-value">&nbsp;[RW]&nbsp;</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">&nbsp;[R]&nbsp;</td> + <td class="context-item-value">&nbsp;[RW]&nbsp;</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">&nbsp;[R]&nbsp;</td> + <td class="context-item-value">&nbsp;[RW]&nbsp;</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">&nbsp;[RW]&nbsp;</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&#8217;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">&gt;</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&#8217;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 &lt;Contents&gt; 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&#8217;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 +&quot;refresh&quot; 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">&quot;\&quot;&quot;</span>, <span class="ruby-value str">&quot;&quot;</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 &lt;Contents&gt; element -as its root element. +Only works if the object has an associated <a +href="NamedBucket.html">NamedBucket</a>; returns false if it doesn&#8217;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">&quot;Content-Type&quot;</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">&quot;\&quot;&quot;</span>, <span class="ruby-value str">&quot;&quot;</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