s33r 0.3.1 → 0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (120) hide show
  1. data/examples/cli/acl_x.rb +41 -0
  2. data/examples/cli/logging_x.rb +20 -0
  3. data/{bin → examples/cli}/s3cli.rb +13 -20
  4. data/examples/fores33r/README +183 -0
  5. data/examples/fores33r/Rakefile +10 -0
  6. data/examples/fores33r/app/controllers/application.rb +4 -0
  7. data/examples/fores33r/app/controllers/browser_controller.rb +68 -0
  8. data/examples/fores33r/app/helpers/application_helper.rb +8 -0
  9. data/examples/fores33r/app/views/browser/index.rhtml +14 -0
  10. data/examples/fores33r/app/views/browser/show_bucket.rhtml +14 -0
  11. data/examples/fores33r/app/views/layouts/application.rhtml +29 -0
  12. data/examples/fores33r/config/boot.rb +44 -0
  13. data/examples/fores33r/config/database.yml +35 -0
  14. data/examples/fores33r/config/environment.rb +64 -0
  15. data/examples/fores33r/config/environments/development.rb +21 -0
  16. data/examples/fores33r/config/environments/production.rb +18 -0
  17. data/examples/fores33r/config/environments/test.rb +19 -0
  18. data/examples/fores33r/config/routes.rb +23 -0
  19. data/examples/fores33r/doc/README_FOR_APP +2 -0
  20. data/examples/fores33r/log/development.log +5507 -0
  21. data/examples/fores33r/log/production.log +0 -0
  22. data/examples/fores33r/log/server.log +0 -0
  23. data/examples/fores33r/log/test.log +0 -0
  24. data/examples/fores33r/public/404.html +8 -0
  25. data/examples/fores33r/public/500.html +8 -0
  26. data/examples/fores33r/public/dispatch.cgi +10 -0
  27. data/examples/fores33r/public/dispatch.fcgi +24 -0
  28. data/examples/fores33r/public/dispatch.rb +10 -0
  29. data/examples/fores33r/public/favicon.ico +0 -0
  30. data/examples/fores33r/public/images/rails.png +0 -0
  31. data/examples/fores33r/public/javascripts/application.js +2 -0
  32. data/examples/fores33r/public/javascripts/controls.js +815 -0
  33. data/examples/fores33r/public/javascripts/dragdrop.js +913 -0
  34. data/examples/fores33r/public/javascripts/effects.js +958 -0
  35. data/examples/fores33r/public/javascripts/prototype.js +2006 -0
  36. data/examples/fores33r/public/robots.txt +1 -0
  37. data/examples/fores33r/public/stylesheets/core.css +37 -0
  38. data/examples/fores33r/script/about +3 -0
  39. data/examples/fores33r/script/breakpointer +3 -0
  40. data/examples/fores33r/script/console +3 -0
  41. data/examples/fores33r/script/destroy +3 -0
  42. data/examples/fores33r/script/generate +3 -0
  43. data/examples/fores33r/script/performance/benchmarker +3 -0
  44. data/examples/fores33r/script/performance/profiler +3 -0
  45. data/examples/fores33r/script/plugin +3 -0
  46. data/examples/fores33r/script/process/reaper +3 -0
  47. data/examples/fores33r/script/process/spawner +3 -0
  48. data/examples/fores33r/script/runner +3 -0
  49. data/examples/fores33r/script/server +3 -0
  50. data/examples/fores33r/test/test_helper.rb +28 -0
  51. data/examples/fores33r/tmp/sessions/ruby_sess.39d37e054d21d545 +0 -0
  52. data/examples/fores33r/tmp/sessions/ruby_sess.acf71fc73aa74983 +0 -0
  53. data/examples/fores33r/tmp/sessions/ruby_sess.c1697b7d6670f3cd +0 -0
  54. data/examples/s3.yaml +11 -0
  55. data/html/classes/Net/HTTPGenericRequest.html +32 -32
  56. data/html/classes/Net/HTTPResponse.html +20 -19
  57. data/html/classes/S33r.html +422 -190
  58. data/html/classes/S33r/BucketListing.html +107 -70
  59. data/html/classes/S33r/Client.html +888 -414
  60. data/html/classes/S33r/LoggingResource.html +222 -0
  61. data/html/classes/S33r/NamedBucket.html +149 -150
  62. data/html/classes/S33r/OrderlyXmlMarkup.html +165 -0
  63. data/html/classes/S33r/S33rException.html +3 -0
  64. data/html/classes/S33r/S33rException/BucketNotLogTargetable.html +119 -0
  65. data/html/classes/S33r/S33rException/InvalidPermission.html +111 -0
  66. data/html/classes/S33r/S33rException/InvalidS3GroupType.html +111 -0
  67. data/html/classes/S33r/S3ACL.html +125 -0
  68. data/html/classes/S33r/S3ACL/ACLDoc.html +521 -0
  69. data/html/classes/S33r/{S3User.html → S3ACL/AmazonCustomer.html} +27 -30
  70. data/html/classes/S33r/S3ACL/CanonicalUser.html +212 -0
  71. data/html/classes/S33r/S3ACL/Grant.html +403 -0
  72. data/html/classes/S33r/S3ACL/Grantee.html +239 -0
  73. data/html/classes/S33r/S3ACL/Group.html +178 -0
  74. data/html/classes/S33r/S3Object.html +53 -50
  75. data/html/classes/S33r/Sync.html +6 -6
  76. data/html/classes/XML.html +4 -2
  77. data/html/created.rid +1 -1
  78. data/html/files/README_txt.html +82 -28
  79. data/html/files/lib/s33r/bucket_listing_rb.html +1 -8
  80. data/html/files/lib/s33r/builder_rb.html +108 -0
  81. data/html/files/lib/s33r/client_rb.html +2 -1
  82. data/html/files/lib/s33r/core_rb.html +2 -1
  83. data/html/files/lib/s33r/libxml_extensions_rb.html +1 -1
  84. data/html/files/lib/s33r/logging_rb.html +109 -0
  85. data/html/files/lib/s33r/named_bucket_rb.html +1 -1
  86. data/html/files/lib/s33r/s33r_exception_rb.html +1 -1
  87. data/html/files/lib/s33r/s33r_http_rb.html +1 -1
  88. data/html/files/lib/s33r/s3_acl_rb.html +109 -0
  89. data/html/fr_class_index.html +12 -1
  90. data/html/fr_file_index.html +3 -0
  91. data/html/fr_method_index.html +101 -57
  92. data/lib/s33r/bucket_listing.rb +21 -22
  93. data/lib/s33r/builder.rb +20 -0
  94. data/lib/s33r/client.rb +240 -42
  95. data/lib/s33r/core.rb +106 -36
  96. data/lib/s33r/libxml_extensions.rb +2 -2
  97. data/lib/s33r/logging.rb +43 -0
  98. data/lib/s33r/named_bucket.rb +16 -17
  99. data/lib/s33r/s33r_exception.rb +11 -0
  100. data/lib/s33r/s33r_http.rb +2 -1
  101. data/lib/s33r/s3_acl.rb +337 -0
  102. data/test/cases/spec_acl.rb +146 -0
  103. data/test/cases/spec_all_buckets.rb +28 -0
  104. data/test/cases/spec_bucket_listing.rb +2 -2
  105. data/test/cases/spec_client.rb +45 -18
  106. data/test/cases/spec_core.rb +0 -9
  107. data/test/cases/spec_namedbucket.rb +3 -3
  108. data/test/files/acl.xml +47 -0
  109. data/test/files/acl_grant1.xml +7 -0
  110. data/test/files/acl_grant2.xml +6 -0
  111. data/test/files/acl_grant3.xml +6 -0
  112. data/test/files/acl_grant4.xml +6 -0
  113. data/test/files/all_buckets.xml +21 -0
  114. data/test/files/bucket_listing.xml +138 -1
  115. data/test/files/client_config.yml +0 -1
  116. data/test/files/logging_acl.xml +34 -0
  117. data/test/files/namedbucket_config.yml +1 -5
  118. data/test/files/namedbucket_config2.yml +1 -5
  119. data/test/test_setup.rb +1 -0
  120. metadata +132 -7
@@ -0,0 +1 @@
1
+ # See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file
@@ -0,0 +1,37 @@
1
+ * {
2
+ font-family: "Trebuchet MS", "Lucida Grande", "Verdana", arial, helvetica, sans-serif;
3
+ }
4
+ #left_pane {
5
+ float: left;
6
+ width: 20%;
7
+ background-color: #EEEEEE;
8
+ font-size: 1em;
9
+ }
10
+ #left_pane p {
11
+ padding-left: 1em;
12
+ }
13
+ #main_pane {
14
+ float: right;
15
+ width: 78%;
16
+ padding-left: 2%;
17
+ }
18
+ #main_pane h2 {
19
+ margin-top: 0em;
20
+ }
21
+ #flash {
22
+ color: green;
23
+ }
24
+ .bucket_name {
25
+ color: blue;
26
+ }
27
+ form {
28
+ border: 1px #808080 dotted;
29
+ padding: 5px;
30
+ font-size: 80%;
31
+ }
32
+ .menu_link {
33
+ font-size: 90%;
34
+ }
35
+ a {
36
+ text-decoration: none;
37
+ }
@@ -0,0 +1,3 @@
1
+ #!/opt/lampp/bin/ruby
2
+ require File.dirname(__FILE__) + '/../config/boot'
3
+ require 'commands/about'
@@ -0,0 +1,3 @@
1
+ #!/opt/lampp/bin/ruby
2
+ require File.dirname(__FILE__) + '/../config/boot'
3
+ require 'commands/breakpointer'
@@ -0,0 +1,3 @@
1
+ #!/opt/lampp/bin/ruby
2
+ require File.dirname(__FILE__) + '/../config/boot'
3
+ require 'commands/console'
@@ -0,0 +1,3 @@
1
+ #!/opt/lampp/bin/ruby
2
+ require File.dirname(__FILE__) + '/../config/boot'
3
+ require 'commands/destroy'
@@ -0,0 +1,3 @@
1
+ #!/opt/lampp/bin/ruby
2
+ require File.dirname(__FILE__) + '/../config/boot'
3
+ require 'commands/generate'
@@ -0,0 +1,3 @@
1
+ #!/opt/lampp/bin/ruby
2
+ require File.dirname(__FILE__) + '/../../config/boot'
3
+ require 'commands/performance/benchmarker'
@@ -0,0 +1,3 @@
1
+ #!/opt/lampp/bin/ruby
2
+ require File.dirname(__FILE__) + '/../../config/boot'
3
+ require 'commands/performance/profiler'
@@ -0,0 +1,3 @@
1
+ #!/opt/lampp/bin/ruby
2
+ require File.dirname(__FILE__) + '/../config/boot'
3
+ require 'commands/plugin'
@@ -0,0 +1,3 @@
1
+ #!/opt/lampp/bin/ruby
2
+ require File.dirname(__FILE__) + '/../../config/boot'
3
+ require 'commands/process/reaper'
@@ -0,0 +1,3 @@
1
+ #!/opt/lampp/bin/ruby
2
+ require File.dirname(__FILE__) + '/../../config/boot'
3
+ require 'commands/process/spawner'
@@ -0,0 +1,3 @@
1
+ #!/opt/lampp/bin/ruby
2
+ require File.dirname(__FILE__) + '/../config/boot'
3
+ require 'commands/runner'
@@ -0,0 +1,3 @@
1
+ #!/opt/lampp/bin/ruby
2
+ require File.dirname(__FILE__) + '/../config/boot'
3
+ require 'commands/server'
@@ -0,0 +1,28 @@
1
+ ENV["RAILS_ENV"] = "test"
2
+ require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
3
+ require 'test_help'
4
+
5
+ class Test::Unit::TestCase
6
+ # Transactional fixtures accelerate your tests by wrapping each test method
7
+ # in a transaction that's rolled back on completion. This ensures that the
8
+ # test database remains unchanged so your fixtures don't have to be reloaded
9
+ # between every test method. Fewer database queries means faster tests.
10
+ #
11
+ # Read Mike Clark's excellent walkthrough at
12
+ # http://clarkware.com/cgi/blosxom/2005/10/24#Rails10FastTesting
13
+ #
14
+ # Every Active Record database supports transactions except MyISAM tables
15
+ # in MySQL. Turn off transactional fixtures in this case; however, if you
16
+ # don't care one way or the other, switching from MyISAM to InnoDB tables
17
+ # is recommended.
18
+ self.use_transactional_fixtures = true
19
+
20
+ # Instantiated fixtures are slow, but give you @david where otherwise you
21
+ # would need people(:david). If you don't want to migrate your existing
22
+ # test cases which use the @david style and don't mind the speed hit (each
23
+ # instantiated fixtures translates to a database query per test method),
24
+ # then set this back to true.
25
+ self.use_instantiated_fixtures = false
26
+
27
+ # Add more helper methods to be used by all tests here...
28
+ end
data/examples/s3.yaml ADDED
@@ -0,0 +1,11 @@
1
+ # note you can use ERB code in this file
2
+ aws_access_key: 'yourkey'
3
+ aws_secret_access_key: 'yoursecretkey'
4
+ options:
5
+ default_expires: '12th November 2033'
6
+ use_ssl: true
7
+ dump_requests: false
8
+ default_prefix: 'someprefix'
9
+ default_bucket: 'somebucket'
10
+ from_email: 'elliot@example.com'
11
+ to_email: 'elliot@example.com'
@@ -157,18 +157,18 @@ to <a href="../S33r/Client.html">S33r::Client</a> constructor.
157
157
  onclick="toggleCode('M000003-source');return false;">[Source]</a></p>
158
158
  <div class="method-source-code" id="M000003-source">
159
159
  <pre>
160
- <span class="ruby-comment cmt"># File lib/s33r/s33r_http.rb, line 46</span>
161
- 46: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span>
162
- 47: <span class="ruby-identifier">str</span> = <span class="ruby-value str">&quot;*******\n&quot;</span> <span class="ruby-operator">+</span>
163
- 48: <span class="ruby-node">&quot;#{self.class::METHOD} #{@path} HTTP/1.1\n&quot;</span> <span class="ruby-operator">+</span>
164
- 49: <span class="ruby-node">&quot;Host: #{S33r::HOST}\n&quot;</span>
165
- 50:
166
- 51: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">each_capitalized</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>
167
- 52: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;#{key}: #{value}\n&quot;</span>
168
- 53: <span class="ruby-keyword kw">end</span>
169
- 54: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;*******\n\n&quot;</span>
170
- 55: <span class="ruby-identifier">str</span>
171
- 56: <span class="ruby-keyword kw">end</span>
160
+ <span class="ruby-comment cmt"># File lib/s33r/s33r_http.rb, line 47</span>
161
+ 47: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span>
162
+ 48: <span class="ruby-identifier">str</span> = <span class="ruby-value str">&quot;*******\n&quot;</span> <span class="ruby-operator">+</span>
163
+ 49: <span class="ruby-node">&quot;#{self.class::METHOD} #{@path} HTTP/1.1\n&quot;</span> <span class="ruby-operator">+</span>
164
+ 50: <span class="ruby-node">&quot;Host: #{S33r::HOST}\n&quot;</span>
165
+ 51:
166
+ 52: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">each_capitalized</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>
167
+ 53: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;#{key}: #{value}\n&quot;</span>
168
+ 54: <span class="ruby-keyword kw">end</span>
169
+ 55: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;*******\n\n&quot;</span>
170
+ 56: <span class="ruby-identifier">str</span>
171
+ 57: <span class="ruby-keyword kw">end</span>
172
172
  </pre>
173
173
  </div>
174
174
  </div>
@@ -193,26 +193,26 @@ Minor alterations to original source to enable variable chunk sizes.
193
193
  onclick="toggleCode('M000004-source');return false;">[Source]</a></p>
194
194
  <div class="method-source-code" id="M000004-source">
195
195
  <pre>
196
- <span class="ruby-comment cmt"># File lib/s33r/s33r_http.rb, line 60</span>
197
- 60: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">send_request_with_body_stream</span>(<span class="ruby-identifier">sock</span>, <span class="ruby-identifier">ver</span>, <span class="ruby-identifier">path</span>, <span class="ruby-identifier">f</span>) <span class="ruby-comment cmt"># :doc:</span>
198
- 61: <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-value str">&quot;Content-Length not given and Transfer-Encoding is not `chunked'&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">content_length</span>() <span class="ruby-keyword kw">or</span> <span class="ruby-identifier">chunked?</span>
199
- 62: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">content_type</span>()
200
- 63: <span class="ruby-identifier">warn</span> <span class="ruby-value str">'net/http: warning: Content-Type did not set; using application/x-www-form-urlencoded'</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">$VERBOSE</span>
201
- 64: <span class="ruby-identifier">set_content_type</span> <span class="ruby-value str">'application/x-www-form-urlencoded'</span>
202
- 65: <span class="ruby-keyword kw">end</span>
203
- 66: <span class="ruby-ivar">@chunk_size</span> <span class="ruby-operator">||=</span> <span class="ruby-value">1024</span>
204
- 67: <span class="ruby-identifier">write_header</span> <span class="ruby-identifier">sock</span>, <span class="ruby-identifier">ver</span>, <span class="ruby-identifier">path</span>
205
- 68: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">chunked?</span>
206
- 69: <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">s</span> = <span class="ruby-identifier">f</span>.<span class="ruby-identifier">read</span>(<span class="ruby-ivar">@chunk_size</span>)
207
- 70: <span class="ruby-identifier">sock</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">sprintf</span>(<span class="ruby-value str">&quot;%x\r\n&quot;</span>, <span class="ruby-identifier">s</span>.<span class="ruby-identifier">length</span>) <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">s</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;\r\n&quot;</span>)
208
- 71: <span class="ruby-keyword kw">end</span>
209
- 72: <span class="ruby-identifier">sock</span>.<span class="ruby-identifier">write</span> <span class="ruby-value str">&quot;0\r\n\r\n&quot;</span>
210
- 73: <span class="ruby-keyword kw">else</span>
211
- 74: <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">s</span> = <span class="ruby-identifier">f</span>.<span class="ruby-identifier">read</span>(<span class="ruby-ivar">@chunk_size</span>)
212
- 75: <span class="ruby-identifier">sock</span>.<span class="ruby-identifier">write</span> <span class="ruby-identifier">s</span>
213
- 76: <span class="ruby-keyword kw">end</span>
214
- 77: <span class="ruby-keyword kw">end</span>
215
- 78: <span class="ruby-keyword kw">end</span>
196
+ <span class="ruby-comment cmt"># File lib/s33r/s33r_http.rb, line 61</span>
197
+ 61: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">send_request_with_body_stream</span>(<span class="ruby-identifier">sock</span>, <span class="ruby-identifier">ver</span>, <span class="ruby-identifier">path</span>, <span class="ruby-identifier">f</span>) <span class="ruby-comment cmt"># :doc:</span>
198
+ 62: <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-value str">&quot;Content-Length not given and Transfer-Encoding is not `chunked'&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">content_length</span>() <span class="ruby-keyword kw">or</span> <span class="ruby-identifier">chunked?</span>
199
+ 63: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">content_type</span>()
200
+ 64: <span class="ruby-identifier">warn</span> <span class="ruby-value str">'net/http: warning: Content-Type did not set; using application/x-www-form-urlencoded'</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">$VERBOSE</span>
201
+ 65: <span class="ruby-identifier">set_content_type</span> <span class="ruby-value str">'application/x-www-form-urlencoded'</span>
202
+ 66: <span class="ruby-keyword kw">end</span>
203
+ 67: <span class="ruby-ivar">@chunk_size</span> <span class="ruby-operator">||=</span> <span class="ruby-value">1024</span>
204
+ 68: <span class="ruby-identifier">write_header</span> <span class="ruby-identifier">sock</span>, <span class="ruby-identifier">ver</span>, <span class="ruby-identifier">path</span>
205
+ 69: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">chunked?</span>
206
+ 70: <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">s</span> = <span class="ruby-identifier">f</span>.<span class="ruby-identifier">read</span>(<span class="ruby-ivar">@chunk_size</span>)
207
+ 71: <span class="ruby-identifier">sock</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">sprintf</span>(<span class="ruby-value str">&quot;%x\r\n&quot;</span>, <span class="ruby-identifier">s</span>.<span class="ruby-identifier">length</span>) <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">s</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;\r\n&quot;</span>)
208
+ 72: <span class="ruby-keyword kw">end</span>
209
+ 73: <span class="ruby-identifier">sock</span>.<span class="ruby-identifier">write</span> <span class="ruby-value str">&quot;0\r\n\r\n&quot;</span>
210
+ 74: <span class="ruby-keyword kw">else</span>
211
+ 75: <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">s</span> = <span class="ruby-identifier">f</span>.<span class="ruby-identifier">read</span>(<span class="ruby-ivar">@chunk_size</span>)
212
+ 76: <span class="ruby-identifier">sock</span>.<span class="ruby-identifier">write</span> <span class="ruby-identifier">s</span>
213
+ 77: <span class="ruby-keyword kw">end</span>
214
+ 78: <span class="ruby-keyword kw">end</span>
215
+ 79: <span class="ruby-keyword kw">end</span>
216
216
  </pre>
217
217
  </div>
218
218
  </div>
@@ -152,9 +152,10 @@ Adds some convenience functions for checking response status.
152
152
  <pre>
153
153
  <span class="ruby-comment cmt"># File lib/s33r/s33r_http.rb, line 11</span>
154
154
  11: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">check_s3_availability</span>
155
- 12: <span class="ruby-identifier">raise</span> <span class="ruby-constant">S33rException</span><span class="ruby-operator">::</span><span class="ruby-constant">S3FallenOver</span>, <span class="ruby-node">&quot;S3 has fallen over! (got a #{code} code in response)&quot;</span> \
156
- 13: <span class="ruby-keyword kw">if</span> (<span class="ruby-value">500</span><span class="ruby-operator">..</span><span class="ruby-value">503</span>).<span class="ruby-identifier">include?</span> <span class="ruby-identifier">code</span>.<span class="ruby-identifier">to_i</span>
157
- 14: <span class="ruby-keyword kw">end</span>
155
+ 12: <span class="ruby-keyword kw">if</span> (<span class="ruby-value">500</span><span class="ruby-operator">..</span><span class="ruby-value">503</span>).<span class="ruby-identifier">include?</span> <span class="ruby-identifier">code</span>.<span class="ruby-identifier">to_i</span>
156
+ 13: <span class="ruby-identifier">raise</span> <span class="ruby-constant">S33rException</span><span class="ruby-operator">::</span><span class="ruby-constant">S3FallenOver</span>, <span class="ruby-node">&quot;S3 has fallen over! (got a #{code} code in response)&quot;</span>
157
+ 14: <span class="ruby-keyword kw">end</span>
158
+ 15: <span class="ruby-keyword kw">end</span>
158
159
  </pre>
159
160
  </div>
160
161
  </div>
@@ -174,10 +175,10 @@ Adds some convenience functions for checking response status.
174
175
  onclick="toggleCode('M000008-source');return false;">[Source]</a></p>
175
176
  <div class="method-source-code" id="M000008-source">
176
177
  <pre>
177
- <span class="ruby-comment cmt"># File lib/s33r/s33r_http.rb, line 24</span>
178
- 24: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">not_found</span>
179
- 25: <span class="ruby-identifier">code</span> = <span class="ruby-value str">'404'</span>
180
- 26: <span class="ruby-keyword kw">end</span>
178
+ <span class="ruby-comment cmt"># File lib/s33r/s33r_http.rb, line 25</span>
179
+ 25: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">not_found</span>
180
+ 26: <span class="ruby-identifier">code</span> = <span class="ruby-value str">'404'</span>
181
+ 27: <span class="ruby-keyword kw">end</span>
181
182
  </pre>
182
183
  </div>
183
184
  </div>
@@ -197,10 +198,10 @@ Adds some convenience functions for checking response status.
197
198
  onclick="toggleCode('M000006-source');return false;">[Source]</a></p>
198
199
  <div class="method-source-code" id="M000006-source">
199
200
  <pre>
200
- <span class="ruby-comment cmt"># File lib/s33r/s33r_http.rb, line 16</span>
201
- 16: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">ok?</span>
202
- 17: <span class="ruby-identifier">success</span>
203
- 18: <span class="ruby-keyword kw">end</span>
201
+ <span class="ruby-comment cmt"># File lib/s33r/s33r_http.rb, line 17</span>
202
+ 17: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">ok?</span>
203
+ 18: <span class="ruby-identifier">success</span>
204
+ 19: <span class="ruby-keyword kw">end</span>
204
205
  </pre>
205
206
  </div>
206
207
  </div>
@@ -220,10 +221,10 @@ Adds some convenience functions for checking response status.
220
221
  onclick="toggleCode('M000007-source');return false;">[Source]</a></p>
221
222
  <div class="method-source-code" id="M000007-source">
222
223
  <pre>
223
- <span class="ruby-comment cmt"># File lib/s33r/s33r_http.rb, line 20</span>
224
- 20: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">success</span>
225
- 21: <span class="ruby-identifier">code</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'200'</span>
226
- 22: <span class="ruby-keyword kw">end</span>
224
+ <span class="ruby-comment cmt"># File lib/s33r/s33r_http.rb, line 21</span>
225
+ 21: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">success</span>
226
+ 22: <span class="ruby-identifier">code</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'200'</span>
227
+ 23: <span class="ruby-keyword kw">end</span>
227
228
  </pre>
228
229
  </div>
229
230
  </div>
@@ -243,10 +244,10 @@ Adds some convenience functions for checking response status.
243
244
  onclick="toggleCode('M000009-source');return false;">[Source]</a></p>
244
245
  <div class="method-source-code" id="M000009-source">
245
246
  <pre>
246
- <span class="ruby-comment cmt"># File lib/s33r/s33r_http.rb, line 28</span>
247
- 28: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span>
248
- 29: <span class="ruby-identifier">body</span>
249
- 30: <span class="ruby-keyword kw">end</span>
247
+ <span class="ruby-comment cmt"># File lib/s33r/s33r_http.rb, line 29</span>
248
+ 29: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span>
249
+ 30: <span class="ruby-identifier">body</span>
250
+ 31: <span class="ruby-keyword kw">end</span>
250
251
  </pre>
251
252
  </div>
252
253
  </div>
@@ -62,10 +62,18 @@
62
62
  <a href="../files/lib/s33r/client_rb.html">
63
63
  lib/s33r/client.rb
64
64
  </a>
65
+ <br />
66
+ <a href="../files/lib/s33r/builder_rb.html">
67
+ lib/s33r/builder.rb
68
+ </a>
65
69
  <br />
66
70
  <a href="../files/lib/s33r/bucket_listing_rb.html">
67
71
  lib/s33r/bucket_listing.rb
68
72
  </a>
73
+ <br />
74
+ <a href="../files/lib/s33r/s3_acl_rb.html">
75
+ lib/s33r/s3_acl.rb
76
+ </a>
69
77
  <br />
70
78
  <a href="../files/lib/s33r/core_rb.html">
71
79
  lib/s33r/core.rb
@@ -78,6 +86,10 @@
78
86
  <a href="../files/lib/s33r/s33r_exception_rb.html">
79
87
  lib/s33r/s33r_exception.rb
80
88
  </a>
89
+ <br />
90
+ <a href="../files/lib/s33r/logging_rb.html">
91
+ lib/s33r/logging.rb
92
+ </a>
81
93
  <br />
82
94
  </td>
83
95
  </tr>
@@ -130,11 +142,16 @@ their license:
130
142
  <a href="#M000049">generate_querystring</a>&nbsp;&nbsp;
131
143
  <a href="#M000043">generate_signature</a>&nbsp;&nbsp;
132
144
  <a href="#M000047">guess_mime_type</a>&nbsp;&nbsp;
133
- <a href="#M000053">keys_to_symbols</a>&nbsp;&nbsp;
145
+ <a href="#M000056">keys_to_symbols</a>&nbsp;&nbsp;
134
146
  <a href="#M000045">metadata_headers</a>&nbsp;&nbsp;
135
- <a href="#M000052">s3_authenticated_url</a>&nbsp;&nbsp;
136
- <a href="#M000051">s3_public_url</a>&nbsp;&nbsp;
137
- <a href="#M000050">url_join</a>&nbsp;&nbsp;
147
+ <a href="#M000057">parse_expiry</a>&nbsp;&nbsp;
148
+ <a href="#M000058">remove_namespace</a>&nbsp;&nbsp;
149
+ <a href="#M000050">s3_acl_path</a>&nbsp;&nbsp;
150
+ <a href="#M000055">s3_authenticated_url</a>&nbsp;&nbsp;
151
+ <a href="#M000051">s3_logging_path</a>&nbsp;&nbsp;
152
+ <a href="#M000054">s3_path</a>&nbsp;&nbsp;
153
+ <a href="#M000053">s3_public_url</a>&nbsp;&nbsp;
154
+ <a href="#M000052">s3_url</a>&nbsp;&nbsp;
138
155
  </div>
139
156
  </div>
140
157
 
@@ -156,12 +173,14 @@ their license:
156
173
  <h3 class="section-bar">Classes and Modules</h3>
157
174
 
158
175
  Module <a href="S33r/S33rException.html" class="link">S33r::S33rException</a><br />
176
+ Module <a href="S33r/S3ACL.html" class="link">S33r::S3ACL</a><br />
159
177
  Module <a href="S33r/Sync.html" class="link">S33r::Sync</a><br />
160
178
  Class <a href="S33r/BucketListing.html" class="link">S33r::BucketListing</a><br />
161
179
  Class <a href="S33r/Client.html" class="link">S33r::Client</a><br />
180
+ Class <a href="S33r/LoggingResource.html" class="link">S33r::LoggingResource</a><br />
162
181
  Class <a href="S33r/NamedBucket.html" class="link">S33r::NamedBucket</a><br />
182
+ Class <a href="S33r/OrderlyXmlMarkup.html" class="link">S33r::OrderlyXmlMarkup</a><br />
163
183
  Class <a href="S33r/S3Object.html" class="link">S33r::S3Object</a><br />
164
- Class <a href="S33r/S3User.html" class="link">S33r::S3User</a><br />
165
184
 
166
185
  </div>
167
186
 
@@ -196,7 +215,8 @@ Class <a href="S33r/S3User.html" class="link">S33r::S3User</a><br />
196
215
  <td class="context-item-value">1048576</td>
197
216
  <td width="3em">&nbsp;</td>
198
217
  <td class="context-item-desc">
199
- Size of each chunk (in bytes) to be sent per request when putting files.
218
+ Size of each chunk (in bytes) to be sent per request when putting files
219
+ (1Mb).
200
220
 
201
221
  </td>
202
222
  </tr>
@@ -229,6 +249,11 @@ Headers which must be included with every request to S3.
229
249
  <td class="context-item-name">CANNED_ACLS</td>
230
250
  <td>=</td>
231
251
  <td class="context-item-value">['private', 'public-read', 'public-read-write', 'authenticated-read']</td>
252
+ <td width="3em">&nbsp;</td>
253
+ <td class="context-item-desc">
254
+ Canned ACLs made available by S3.
255
+
256
+ </td>
232
257
  </tr>
233
258
  <tr class="top-aligned-row context-row">
234
259
  <td class="context-item-name">METHOD_VERBS</td>
@@ -261,6 +286,61 @@ Default number of seconds an authenticated URL will last for (15 minutes).
261
286
 
262
287
  </td>
263
288
  </tr>
289
+ <tr class="top-aligned-row context-row">
290
+ <td class="context-item-name">RESPONSE_NAMESPACE_URI</td>
291
+ <td>=</td>
292
+ <td class="context-item-value">&quot;http://s3.amazonaws.com/doc/2006-03-01/&quot;</td>
293
+ <td width="3em">&nbsp;</td>
294
+ <td class="context-item-desc">
295
+ The namespace used for response body <a href="XML.html">XML</a> documents.
296
+
297
+ </td>
298
+ </tr>
299
+ <tr class="top-aligned-row context-row">
300
+ <td class="context-item-name">PERMISSIONS</td>
301
+ <td>=</td>
302
+ <td class="context-item-value">{ :read =&gt; 'READ', # permission to read :write =&gt; 'WRITE', # permission to write :read_acl =&gt; 'READ_ACP', # permission to read ACL settings :all =&gt; 'FULL_CONTROL'</td>
303
+ <td width="3em">&nbsp;</td>
304
+ <td class="context-item-desc">
305
+ Permissions which can be set within a &lt;Grant&gt; (see <a
306
+ href="http://docs.amazonwebservices.com/AmazonS3/2006-03-01/UsingPermissions.html">docs.amazonwebservices.com/AmazonS3/2006-03-01/UsingPermissions.html</a>).
307
+
308
+ <p>
309
+ NB I&#8217;ve missed out the WRITE_ACP permission as this is functionally
310
+ equivalent to FULL_CONTROL.
311
+ </p>
312
+ </td>
313
+ </tr>
314
+ <tr class="top-aligned-row context-row">
315
+ <td class="context-item-name">NAMESPACE</td>
316
+ <td>=</td>
317
+ <td class="context-item-value">'xsi'</td>
318
+ <td width="3em">&nbsp;</td>
319
+ <td class="context-item-desc">
320
+ Used for generating ACL <a href="XML.html">XML</a> documents.
321
+
322
+ </td>
323
+ </tr>
324
+ <tr class="top-aligned-row context-row">
325
+ <td class="context-item-name">NAMESPACE_URI</td>
326
+ <td>=</td>
327
+ <td class="context-item-value">'http://www.w3.org/2001/XMLSchema-instance'</td>
328
+ </tr>
329
+ <tr class="top-aligned-row context-row">
330
+ <td class="context-item-name">GRANTEE_TYPES</td>
331
+ <td>=</td>
332
+ <td class="context-item-value">{ :amazon_customer =&gt; 'AmazonCustomerByEmail', :canonical_user =&gt; 'CanonicalUser', :group =&gt; 'Group'</td>
333
+ </tr>
334
+ <tr class="top-aligned-row context-row">
335
+ <td class="context-item-name">S3_GROUP_TYPES</td>
336
+ <td>=</td>
337
+ <td class="context-item-value">{ :all_users =&gt; 'global/AllUsers', :authenticated_users =&gt; 'global/AuthenticatedUsers', :log_delivery =&gt; 's3/LogDelivery'</td>
338
+ </tr>
339
+ <tr class="top-aligned-row context-row">
340
+ <td class="context-item-name">GROUP_ACL_URI_BASE</td>
341
+ <td>=</td>
342
+ <td class="context-item-value">'http://acs.amazonaws.com/groups/'</td>
343
+ </tr>
264
344
  </table>
265
345
  </div>
266
346
  </div>
@@ -274,31 +354,107 @@ Default number of seconds an authenticated URL will last for (15 minutes).
274
354
  <div id="methods">
275
355
  <h3 class="section-bar">Public Class methods</h3>
276
356
 
277
- <div id="method-M000053" class="method-detail">
278
- <a name="M000053"></a>
357
+ <div id="method-M000056" class="method-detail">
358
+ <a name="M000056"></a>
279
359
 
280
360
  <div class="method-heading">
281
- <a href="#M000053" class="method-signature">
361
+ <a href="#M000056" class="method-signature">
282
362
  <span class="method-name">keys_to_symbols</span><span class="method-args">(hsh)</span>
283
363
  </a>
284
364
  </div>
285
365
 
286
366
  <div class="method-description">
287
367
  <p>
288
- Turn keys in a hash hsh into symbols. Returns a hash with
289
- &#8216;symbolised&#8217; keys.
368
+ Turn keys in a hash <tt>hsh</tt> into symbols.
369
+ </p>
370
+ <p>
371
+ Returns a hash with &#8216;symbolised&#8217; keys.
290
372
  </p>
291
373
  <p><a class="source-toggle" href="#"
292
- onclick="toggleCode('M000053-source');return false;">[Source]</a></p>
293
- <div class="method-source-code" id="M000053-source">
374
+ onclick="toggleCode('M000056-source');return false;">[Source]</a></p>
375
+ <div class="method-source-code" id="M000056-source">
376
+ <pre>
377
+ <span class="ruby-comment cmt"># File lib/s33r/core.rb, line 255</span>
378
+ 255: <span class="ruby-keyword kw">def</span> <span class="ruby-constant">S33r</span>.<span class="ruby-identifier">keys_to_symbols</span>(<span class="ruby-identifier">hsh</span>)
379
+ 256: <span class="ruby-identifier">symbolised</span> = <span class="ruby-identifier">hsh</span>.<span class="ruby-identifier">inject</span>({}) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">symbolised</span>, <span class="ruby-identifier">key_value</span><span class="ruby-operator">|</span>
380
+ 257: <span class="ruby-identifier">symbolised</span>.<span class="ruby-identifier">merge</span>({<span class="ruby-identifier">key_value</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">to_sym</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">key_value</span>[<span class="ruby-value">1</span>]})
381
+ 258: <span class="ruby-keyword kw">end</span>
382
+ 259: <span class="ruby-identifier">symbolised</span>
383
+ 260: <span class="ruby-keyword kw">end</span>
384
+ </pre>
385
+ </div>
386
+ </div>
387
+ </div>
388
+
389
+ <div id="method-M000057" class="method-detail">
390
+ <a name="M000057"></a>
391
+
392
+ <div class="method-heading">
393
+ <a href="#M000057" class="method-signature">
394
+ <span class="method-name">parse_expiry</span><span class="method-args">(expires)</span>
395
+ </a>
396
+ </div>
397
+
398
+ <div class="method-description">
399
+ <p>
400
+ Parse an expiry date to seconds since the epoch.
401
+ </p>
402
+ <p>
403
+ <tt>expires</tt> can be set to &#8216;forever&#8217; to get a time 20 years
404
+ in the future; &#8216;default&#8217; to use the current time +
405
+ DEFAULT_EXPIRY_SECS; or to a specific date (parseable by ParseDate); or to
406
+ an integer representing seconds since the epoch.
407
+ </p>
408
+ <p>
409
+ TODO: testing for this
410
+ </p>
411
+ <p><a class="source-toggle" href="#"
412
+ onclick="toggleCode('M000057-source');return false;">[Source]</a></p>
413
+ <div class="method-source-code" id="M000057-source">
414
+ <pre>
415
+ <span class="ruby-comment cmt"># File lib/s33r/core.rb, line 270</span>
416
+ 270: <span class="ruby-keyword kw">def</span> <span class="ruby-constant">S33r</span>.<span class="ruby-identifier">parse_expiry</span>(<span class="ruby-identifier">expires</span>)
417
+ 271: <span class="ruby-identifier">base_expires</span> = <span class="ruby-constant">Time</span>.<span class="ruby-identifier">now</span>.<span class="ruby-identifier">to_i</span>
418
+ 272: <span class="ruby-keyword kw">if</span> <span class="ruby-value str">'forever'</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">expires</span>
419
+ 273: <span class="ruby-comment cmt"># 20 years (same as forever in computer terms)</span>
420
+ 274: <span class="ruby-identifier">expires</span> = <span class="ruby-identifier">base_expires</span> <span class="ruby-operator">+</span> (<span class="ruby-value">60</span> <span class="ruby-operator">*</span> <span class="ruby-value">60</span> <span class="ruby-operator">*</span> <span class="ruby-value">24</span> <span class="ruby-operator">*</span> <span class="ruby-value">365.25</span> <span class="ruby-operator">*</span> <span class="ruby-value">20</span>).<span class="ruby-identifier">to_i</span>
421
+ 275: <span class="ruby-keyword kw">elsif</span> <span class="ruby-value str">'default'</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">expires</span>
422
+ 276: <span class="ruby-comment cmt"># default to DEFAULT_EXPIRY_SECS seconds from now if expires not set</span>
423
+ 277: <span class="ruby-identifier">expires</span> = <span class="ruby-identifier">base_expires</span> <span class="ruby-operator">+</span> <span class="ruby-constant">DEFAULT_EXPIRY_SECS</span>
424
+ 278: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">expires</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">String</span>)
425
+ 279: <span class="ruby-identifier">datetime_parts</span> = <span class="ruby-constant">ParseDate</span>.<span class="ruby-identifier">parsedate</span>(<span class="ruby-identifier">expires</span>)
426
+ 280: <span class="ruby-identifier">expires</span> = <span class="ruby-constant">Time</span>.<span class="ruby-identifier">gm</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">datetime_parts</span>).<span class="ruby-identifier">to_i</span>
427
+ 281: <span class="ruby-keyword kw">end</span>
428
+ 282: <span class="ruby-identifier">expires</span>
429
+ 283: <span class="ruby-keyword kw">end</span>
430
+ </pre>
431
+ </div>
432
+ </div>
433
+ </div>
434
+
435
+ <div id="method-M000058" class="method-detail">
436
+ <a name="M000058"></a>
437
+
438
+ <div class="method-heading">
439
+ <a href="#M000058" class="method-signature">
440
+ <span class="method-name">remove_namespace</span><span class="method-args">(xml_in)</span>
441
+ </a>
442
+ </div>
443
+
444
+ <div class="method-description">
445
+ <p>
446
+ Remove the namespace declaration from S3 <a href="XML.html">XML</a>
447
+ response bodies (libxml isn&#8217;t fond of it).
448
+ </p>
449
+ <p><a class="source-toggle" href="#"
450
+ onclick="toggleCode('M000058-source');return false;">[Source]</a></p>
451
+ <div class="method-source-code" id="M000058-source">
294
452
  <pre>
295
- <span class="ruby-comment cmt"># File lib/s33r/core.rb, line 215</span>
296
- 215: <span class="ruby-keyword kw">def</span> <span class="ruby-constant">S33r</span>.<span class="ruby-identifier">keys_to_symbols</span>(<span class="ruby-identifier">hsh</span>)
297
- 216: <span class="ruby-identifier">symbolised</span> = <span class="ruby-identifier">hsh</span>.<span class="ruby-identifier">inject</span>({}) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">symbolised</span>, <span class="ruby-identifier">key_value</span><span class="ruby-operator">|</span>
298
- 217: <span class="ruby-identifier">symbolised</span>.<span class="ruby-identifier">merge</span>({<span class="ruby-identifier">key_value</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">to_sym</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">key_value</span>[<span class="ruby-value">1</span>]})
299
- 218: <span class="ruby-keyword kw">end</span>
300
- 219: <span class="ruby-identifier">symbolised</span>
301
- 220: <span class="ruby-keyword kw">end</span>
453
+ <span class="ruby-comment cmt"># File lib/s33r/core.rb, line 287</span>
454
+ 287: <span class="ruby-keyword kw">def</span> <span class="ruby-constant">S33r</span>.<span class="ruby-identifier">remove_namespace</span>(<span class="ruby-identifier">xml_in</span>)
455
+ 288: <span class="ruby-identifier">namespace</span> = <span class="ruby-constant">RESPONSE_NAMESPACE_URI</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-value str">'/'</span>, <span class="ruby-value str">'\/'</span>)
456
+ 289: <span class="ruby-identifier">xml_in</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-node">/ xmlns=&quot;#{namespace}&quot;/</span>, <span class="ruby-value str">''</span>)
457
+ 290: <span class="ruby-keyword kw">end</span>
302
458
  </pre>
303
459
  </div>
304
460
  </div>
@@ -318,29 +474,29 @@ Turn keys in a hash hsh into symbols. Returns a hash with
318
474
  <div class="method-description">
319
475
  <p>
320
476
  Build the headers required with every S3 request (Date and Content-Type);
321
- options hash can contain extra header settings, as follows: :date and
322
- :content_type are required headers, and set to defaults if not supplied
477
+ options hash can contain extra header settings; +:date+ and +:content_type+
478
+ are required headers, and set to defaults if not supplied
323
479
  </p>
324
480
  <p><a class="source-toggle" href="#"
325
481
  onclick="toggleCode('M000044-source');return false;">[Source]</a></p>
326
482
  <div class="method-source-code" id="M000044-source">
327
483
  <pre>
328
- <span class="ruby-comment cmt"># File lib/s33r/core.rb, line 111</span>
329
- 111: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_default_headers</span>(<span class="ruby-identifier">headers</span>, <span class="ruby-identifier">options</span>={})
330
- 112: <span class="ruby-comment cmt"># set the default headers required by AWS</span>
331
- 113: <span class="ruby-identifier">missing_headers</span> = <span class="ruby-constant">REQUIRED_HEADERS</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">headers</span>.<span class="ruby-identifier">keys</span>
332
- 114:
333
- 115: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">missing_headers</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-value str">'Content-Type'</span>)
334
- 116: <span class="ruby-identifier">headers</span>[<span class="ruby-value str">'Content-Type'</span>] = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:content_type</span>] <span class="ruby-operator">||</span> <span class="ruby-value str">''</span>
335
- 117: <span class="ruby-keyword kw">end</span>
336
- 118:
337
- 119: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">missing_headers</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-value str">'Date'</span>)
338
- 120: <span class="ruby-identifier">date</span> = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:date</span>] <span class="ruby-operator">||</span> <span class="ruby-constant">Time</span>.<span class="ruby-identifier">now</span>
339
- 121: <span class="ruby-identifier">headers</span>[<span class="ruby-value str">'Date'</span>] = <span class="ruby-identifier">date</span>.<span class="ruby-identifier">httpdate</span>
340
- 122: <span class="ruby-keyword kw">end</span>
341
- 123:
342
- 124: <span class="ruby-identifier">headers</span>
343
- 125: <span class="ruby-keyword kw">end</span>
484
+ <span class="ruby-comment cmt"># File lib/s33r/core.rb, line 144</span>
485
+ 144: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_default_headers</span>(<span class="ruby-identifier">headers</span>, <span class="ruby-identifier">options</span>={})
486
+ 145: <span class="ruby-comment cmt"># set the default headers required by AWS</span>
487
+ 146: <span class="ruby-identifier">missing_headers</span> = <span class="ruby-constant">REQUIRED_HEADERS</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">headers</span>.<span class="ruby-identifier">keys</span>
488
+ 147:
489
+ 148: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">missing_headers</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-value str">'Content-Type'</span>)
490
+ 149: <span class="ruby-identifier">headers</span>[<span class="ruby-value str">'Content-Type'</span>] = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:content_type</span>] <span class="ruby-operator">||</span> <span class="ruby-value str">''</span>
491
+ 150: <span class="ruby-keyword kw">end</span>
492
+ 151:
493
+ 152: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">missing_headers</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-value str">'Date'</span>)
494
+ 153: <span class="ruby-identifier">date</span> = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:date</span>] <span class="ruby-operator">||</span> <span class="ruby-constant">Time</span>.<span class="ruby-identifier">now</span>
495
+ 154: <span class="ruby-identifier">headers</span>[<span class="ruby-value str">'Date'</span>] = <span class="ruby-identifier">date</span>.<span class="ruby-identifier">httpdate</span>
496
+ 155: <span class="ruby-keyword kw">end</span>
497
+ 156:
498
+ 157: <span class="ruby-identifier">headers</span>
499
+ 158: <span class="ruby-keyword kw">end</span>
344
500
  </pre>
345
501
  </div>
346
502
  </div>
@@ -363,12 +519,12 @@ Ensure that a bucket_name is well-formed (no leading or trailing slash).
363
519
  onclick="toggleCode('M000048-source');return false;">[Source]</a></p>
364
520
  <div class="method-source-code" id="M000048-source">
365
521
  <pre>
366
- <span class="ruby-comment cmt"># File lib/s33r/core.rb, line 156</span>
367
- 156: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">bucket_name_valid?</span>(<span class="ruby-identifier">bucket_name</span>)
368
- 157: <span class="ruby-keyword kw">if</span> (<span class="ruby-value str">'/'</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">bucket_name</span>[<span class="ruby-value">0</span>,<span class="ruby-value">1</span>] <span class="ruby-operator">||</span> <span class="ruby-value str">'/'</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">bucket_name</span>[<span class="ruby-value">-1</span>,<span class="ruby-value">1</span>])
369
- 158: <span class="ruby-identifier">raise</span> <span class="ruby-constant">S33rException</span><span class="ruby-operator">::</span><span class="ruby-constant">MalformedBucketName</span>, <span class="ruby-value str">&quot;Bucket name cannot have a leading or trailing slash&quot;</span>
370
- 159: <span class="ruby-keyword kw">end</span>
371
- 160: <span class="ruby-keyword kw">end</span>
522
+ <span class="ruby-comment cmt"># File lib/s33r/core.rb, line 190</span>
523
+ 190: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">bucket_name_valid?</span>(<span class="ruby-identifier">bucket_name</span>)
524
+ 191: <span class="ruby-keyword kw">if</span> (<span class="ruby-value str">'/'</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">bucket_name</span>[<span class="ruby-value">0</span>,<span class="ruby-value">1</span>] <span class="ruby-operator">||</span> <span class="ruby-value str">'/'</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">bucket_name</span>[<span class="ruby-value">-1</span>,<span class="ruby-value">1</span>])
525
+ 192: <span class="ruby-identifier">raise</span> <span class="ruby-constant">S33rException</span><span class="ruby-operator">::</span><span class="ruby-constant">MalformedBucketName</span>, <span class="ruby-value str">&quot;Bucket name cannot have a leading or trailing slash&quot;</span>
526
+ 193: <span class="ruby-keyword kw">end</span>
527
+ 194: <span class="ruby-keyword kw">end</span>
372
528
  </pre>
373
529
  </div>
374
530
  </div>
@@ -391,16 +547,16 @@ Add a canned ACL setter header.
391
547
  onclick="toggleCode('M000046-source');return false;">[Source]</a></p>
392
548
  <div class="method-source-code" id="M000046-source">
393
549
  <pre>
394
- <span class="ruby-comment cmt"># File lib/s33r/core.rb, line 137</span>
395
- 137: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">canned_acl_header</span>(<span class="ruby-identifier">canned_acl</span>, <span class="ruby-identifier">headers</span>={})
396
- 138: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">canned_acl</span>.<span class="ruby-identifier">nil?</span>
397
- 139: <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">CANNED_ACLS</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">canned_acl</span>)
398
- 140: <span class="ruby-identifier">raise</span> <span class="ruby-constant">S33rException</span><span class="ruby-operator">::</span><span class="ruby-constant">UnsupportedCannedACL</span>, <span class="ruby-node">&quot;The canned ACL #{canned_acl} is not supported&quot;</span>
399
- 141: <span class="ruby-keyword kw">end</span>
400
- 142: <span class="ruby-identifier">headers</span>[<span class="ruby-constant">AWS_HEADER_PREFIX</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'acl'</span>] = <span class="ruby-identifier">canned_acl</span>
401
- 143: <span class="ruby-keyword kw">end</span>
402
- 144: <span class="ruby-identifier">headers</span>
403
- 145: <span class="ruby-keyword kw">end</span>
550
+ <span class="ruby-comment cmt"># File lib/s33r/core.rb, line 171</span>
551
+ 171: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">canned_acl_header</span>(<span class="ruby-identifier">canned_acl</span>, <span class="ruby-identifier">headers</span>={})
552
+ 172: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">canned_acl</span>.<span class="ruby-identifier">nil?</span>
553
+ 173: <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">CANNED_ACLS</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">canned_acl</span>)
554
+ 174: <span class="ruby-identifier">raise</span> <span class="ruby-constant">S33rException</span><span class="ruby-operator">::</span><span class="ruby-constant">UnsupportedCannedACL</span>, <span class="ruby-node">&quot;The canned ACL #{canned_acl} is not supported&quot;</span>
555
+ 175: <span class="ruby-keyword kw">end</span>
556
+ 176: <span class="ruby-identifier">headers</span>[<span class="ruby-constant">AWS_HEADER_PREFIX</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'acl'</span>] = <span class="ruby-identifier">canned_acl</span>
557
+ 177: <span class="ruby-keyword kw">end</span>
558
+ 178: <span class="ruby-identifier">headers</span>
559
+ 179: <span class="ruby-keyword kw">end</span>
404
560
  </pre>
405
561
  </div>
406
562
  </div>
@@ -423,22 +579,22 @@ Get the value for the AWS authentication header.
423
579
  onclick="toggleCode('M000042-source');return false;">[Source]</a></p>
424
580
  <div class="method-source-code" id="M000042-source">
425
581
  <pre>
426
- <span class="ruby-comment cmt"># File lib/s33r/core.rb, line 85</span>
427
- 85: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generate_auth_header_value</span>(<span class="ruby-identifier">method</span>, <span class="ruby-identifier">path</span>, <span class="ruby-identifier">headers</span>, <span class="ruby-identifier">aws_access_key</span>, <span class="ruby-identifier">aws_secret_access_key</span>)
428
- 86: <span class="ruby-identifier">raise</span> <span class="ruby-constant">S33rException</span><span class="ruby-operator">::</span><span class="ruby-constant">MethodNotAvailable</span>, <span class="ruby-value str">&quot;Method %s not available&quot;</span> <span class="ruby-operator">%</span> <span class="ruby-identifier">method</span> <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-constant">METHOD_VERBS</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">method</span>)
429
- 87:
430
- 88: <span class="ruby-comment cmt"># check the headers needed for authentication have been set</span>
431
- 89: <span class="ruby-identifier">missing_headers</span> = <span class="ruby-constant">REQUIRED_HEADERS</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">headers</span>.<span class="ruby-identifier">keys</span>
432
- 90: <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span>(<span class="ruby-identifier">missing_headers</span>.<span class="ruby-identifier">empty?</span>)
433
- 91: <span class="ruby-identifier">raise</span> <span class="ruby-constant">S33rException</span><span class="ruby-operator">::</span><span class="ruby-constant">MissingRequiredHeaders</span>,
434
- 92: <span class="ruby-value str">&quot;Headers required for AWS auth value are missing: &quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">missing_headers</span>.<span class="ruby-identifier">join</span>(<span class="ruby-value str">', '</span>)
435
- 93: <span class="ruby-keyword kw">end</span>
436
- 94:
437
- 95: <span class="ruby-comment cmt"># get the AWS header</span>
438
- 96: <span class="ruby-identifier">canonical_string</span> = <span class="ruby-identifier">generate_canonical_string</span>(<span class="ruby-identifier">method</span>, <span class="ruby-identifier">path</span>, <span class="ruby-identifier">headers</span>)
439
- 97: <span class="ruby-identifier">signature</span> = <span class="ruby-identifier">generate_signature</span>(<span class="ruby-identifier">aws_secret_access_key</span>, <span class="ruby-identifier">canonical_string</span>)
440
- 98: <span class="ruby-constant">AWS_AUTH_HEADER_VALUE</span> <span class="ruby-operator">%</span> [<span class="ruby-identifier">aws_access_key</span>, <span class="ruby-identifier">signature</span>]
441
- 99: <span class="ruby-keyword kw">end</span>
582
+ <span class="ruby-comment cmt"># File lib/s33r/core.rb, line 118</span>
583
+ 118: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generate_auth_header_value</span>(<span class="ruby-identifier">method</span>, <span class="ruby-identifier">path</span>, <span class="ruby-identifier">headers</span>, <span class="ruby-identifier">aws_access_key</span>, <span class="ruby-identifier">aws_secret_access_key</span>)
584
+ 119: <span class="ruby-identifier">raise</span> <span class="ruby-constant">S33rException</span><span class="ruby-operator">::</span><span class="ruby-constant">MethodNotAvailable</span>, <span class="ruby-value str">&quot;Method %s not available&quot;</span> <span class="ruby-operator">%</span> <span class="ruby-identifier">method</span> <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-constant">METHOD_VERBS</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">method</span>)
585
+ 120:
586
+ 121: <span class="ruby-comment cmt"># check the headers needed for authentication have been set</span>
587
+ 122: <span class="ruby-identifier">missing_headers</span> = <span class="ruby-constant">REQUIRED_HEADERS</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">headers</span>.<span class="ruby-identifier">keys</span>
588
+ 123: <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span>(<span class="ruby-identifier">missing_headers</span>.<span class="ruby-identifier">empty?</span>)
589
+ 124: <span class="ruby-identifier">raise</span> <span class="ruby-constant">S33rException</span><span class="ruby-operator">::</span><span class="ruby-constant">MissingRequiredHeaders</span>,
590
+ 125: <span class="ruby-value str">&quot;Headers required for AWS auth value are missing: &quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">missing_headers</span>.<span class="ruby-identifier">join</span>(<span class="ruby-value str">', '</span>)
591
+ 126: <span class="ruby-keyword kw">end</span>
592
+ 127:
593
+ 128: <span class="ruby-comment cmt"># get the AWS header</span>
594
+ 129: <span class="ruby-identifier">canonical_string</span> = <span class="ruby-identifier">generate_canonical_string</span>(<span class="ruby-identifier">method</span>, <span class="ruby-identifier">path</span>, <span class="ruby-identifier">headers</span>)
595
+ 130: <span class="ruby-identifier">signature</span> = <span class="ruby-identifier">generate_signature</span>(<span class="ruby-identifier">aws_secret_access_key</span>, <span class="ruby-identifier">canonical_string</span>)
596
+ 131: <span class="ruby-constant">AWS_AUTH_HEADER_VALUE</span> <span class="ruby-operator">%</span> [<span class="ruby-identifier">aws_access_key</span>, <span class="ruby-identifier">signature</span>]
597
+ 132: <span class="ruby-keyword kw">end</span>
442
598
  </pre>
443
599
  </div>
444
600
  </div>
@@ -462,46 +618,48 @@ sample code.
462
618
  onclick="toggleCode('M000041-source');return false;">[Source]</a></p>
463
619
  <div class="method-source-code" id="M000041-source">
464
620
  <pre>
465
- <span class="ruby-comment cmt"># File lib/s33r/core.rb, line 44</span>
466
- 44: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generate_canonical_string</span>(<span class="ruby-identifier">method</span>, <span class="ruby-identifier">path</span>, <span class="ruby-identifier">headers</span>={}, <span class="ruby-identifier">expires</span>=<span class="ruby-keyword kw">nil</span>)
467
- 45: <span class="ruby-identifier">interesting_headers</span> = {}
468
- 46: <span class="ruby-identifier">headers</span>.<span class="ruby-identifier">each</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>
469
- 47: <span class="ruby-identifier">lk</span> = <span class="ruby-identifier">key</span>.<span class="ruby-identifier">downcase</span>
470
- 48: <span class="ruby-keyword kw">if</span> (<span class="ruby-constant">INTERESTING_HEADERS</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">lk</span>) <span class="ruby-keyword kw">or</span> <span class="ruby-identifier">lk</span> <span class="ruby-operator">=~</span> <span class="ruby-node">/^#{AWS_HEADER_PREFIX}/o</span>)
471
- 49: <span class="ruby-identifier">interesting_headers</span>[<span class="ruby-identifier">lk</span>] = <span class="ruby-identifier">value</span>
472
- 50: <span class="ruby-keyword kw">end</span>
473
- 51: <span class="ruby-keyword kw">end</span>
474
- 52:
475
- 53: <span class="ruby-comment cmt"># these fields get empty strings if they don't exist.</span>
476
- 54: <span class="ruby-identifier">interesting_headers</span>[<span class="ruby-value str">'content-type'</span>] <span class="ruby-operator">||=</span> <span class="ruby-value str">''</span>
477
- 55: <span class="ruby-identifier">interesting_headers</span>[<span class="ruby-value str">'content-md5'</span>] <span class="ruby-operator">||=</span> <span class="ruby-value str">''</span>
478
- 56:
479
- 57: <span class="ruby-comment cmt"># if you're using expires for query string auth, then it trumps date</span>
480
- 58: <span class="ruby-keyword kw">if</span> <span class="ruby-keyword kw">not</span> <span class="ruby-identifier">expires</span>.<span class="ruby-identifier">nil?</span>
481
- 59: <span class="ruby-identifier">interesting_headers</span>[<span class="ruby-value str">'date'</span>] = <span class="ruby-identifier">expires</span>
482
- 60: <span class="ruby-keyword kw">end</span>
483
- 61:
484
- 62: <span class="ruby-identifier">buf</span> = <span class="ruby-node">&quot;#{method}\n&quot;</span>
485
- 63: <span class="ruby-identifier">interesting_headers</span>.<span class="ruby-identifier">sort</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">a</span>, <span class="ruby-identifier">b</span><span class="ruby-operator">|</span> <span class="ruby-identifier">a</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">&lt;=&gt;</span> <span class="ruby-identifier">b</span>[<span class="ruby-value">0</span>] }.<span class="ruby-identifier">each</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>
486
- 64: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">key</span> <span class="ruby-operator">=~</span> <span class="ruby-node">/^#{AWS_HEADER_PREFIX}/o</span>
487
- 65: <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;#{key}:#{value}\n&quot;</span>
488
- 66: <span class="ruby-keyword kw">else</span>
489
- 67: <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;#{value}\n&quot;</span>
490
- 68: <span class="ruby-keyword kw">end</span>
491
- 69: <span class="ruby-keyword kw">end</span>
492
- 70:
493
- 71: <span class="ruby-comment cmt"># ignore everything after the question mark...</span>
494
- 72: <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">path</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/\?.*$/</span>, <span class="ruby-value str">''</span>)
495
- 73:
496
- 74: <span class="ruby-comment cmt"># ...unless there is an acl or torrent parameter</span>
497
- 75: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">path</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/[&amp;?]acl($|&amp;|=)/</span>
498
- 76: <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">'?acl'</span>
499
- 77: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">path</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/[&amp;?]torrent($|&amp;|=)/</span>
500
- 78: <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">'?torrent'</span>
501
- 79: <span class="ruby-keyword kw">end</span>
502
- 80:
503
- 81: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">buf</span>
504
- 82: <span class="ruby-keyword kw">end</span>
621
+ <span class="ruby-comment cmt"># File lib/s33r/core.rb, line 75</span>
622
+ 75: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generate_canonical_string</span>(<span class="ruby-identifier">method</span>, <span class="ruby-identifier">path</span>, <span class="ruby-identifier">headers</span>={}, <span class="ruby-identifier">expires</span>=<span class="ruby-keyword kw">nil</span>)
623
+ 76: <span class="ruby-identifier">interesting_headers</span> = {}
624
+ 77: <span class="ruby-identifier">headers</span>.<span class="ruby-identifier">each</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>
625
+ 78: <span class="ruby-identifier">lk</span> = <span class="ruby-identifier">key</span>.<span class="ruby-identifier">downcase</span>
626
+ 79: <span class="ruby-keyword kw">if</span> (<span class="ruby-constant">INTERESTING_HEADERS</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">lk</span>) <span class="ruby-keyword kw">or</span> <span class="ruby-identifier">lk</span> <span class="ruby-operator">=~</span> <span class="ruby-node">/^#{AWS_HEADER_PREFIX}/o</span>)
627
+ 80: <span class="ruby-identifier">interesting_headers</span>[<span class="ruby-identifier">lk</span>] = <span class="ruby-identifier">value</span>
628
+ 81: <span class="ruby-keyword kw">end</span>
629
+ 82: <span class="ruby-keyword kw">end</span>
630
+ 83:
631
+ 84: <span class="ruby-comment cmt"># These fields get empty strings if they don't exist.</span>
632
+ 85: <span class="ruby-identifier">interesting_headers</span>[<span class="ruby-value str">'content-type'</span>] <span class="ruby-operator">||=</span> <span class="ruby-value str">''</span>
633
+ 86: <span class="ruby-identifier">interesting_headers</span>[<span class="ruby-value str">'content-md5'</span>] <span class="ruby-operator">||=</span> <span class="ruby-value str">''</span>
634
+ 87:
635
+ 88: <span class="ruby-comment cmt"># If you're using expires for query string auth, then it trumps date.</span>
636
+ 89: <span class="ruby-keyword kw">if</span> <span class="ruby-keyword kw">not</span> <span class="ruby-identifier">expires</span>.<span class="ruby-identifier">nil?</span>
637
+ 90: <span class="ruby-identifier">interesting_headers</span>[<span class="ruby-value str">'date'</span>] = <span class="ruby-identifier">expires</span>
638
+ 91: <span class="ruby-keyword kw">end</span>
639
+ 92:
640
+ 93: <span class="ruby-identifier">buf</span> = <span class="ruby-node">&quot;#{method}\n&quot;</span>
641
+ 94: <span class="ruby-identifier">interesting_headers</span>.<span class="ruby-identifier">sort</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">a</span>, <span class="ruby-identifier">b</span><span class="ruby-operator">|</span> <span class="ruby-identifier">a</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">&lt;=&gt;</span> <span class="ruby-identifier">b</span>[<span class="ruby-value">0</span>] }.<span class="ruby-identifier">each</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>
642
+ 95: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">key</span> <span class="ruby-operator">=~</span> <span class="ruby-node">/^#{AWS_HEADER_PREFIX}/o</span>
643
+ 96: <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;#{key}:#{value}\n&quot;</span>
644
+ 97: <span class="ruby-keyword kw">else</span>
645
+ 98: <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;#{value}\n&quot;</span>
646
+ 99: <span class="ruby-keyword kw">end</span>
647
+ 100: <span class="ruby-keyword kw">end</span>
648
+ 101:
649
+ 102: <span class="ruby-comment cmt"># Ignore everything after the question mark...</span>
650
+ 103: <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">path</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/\?.*$/</span>, <span class="ruby-value str">''</span>)
651
+ 104:
652
+ 105: <span class="ruby-comment cmt"># ...unless there is an acl, logging or torrent parameter</span>
653
+ 106: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">path</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/[&amp;?]acl($|&amp;|=)/</span>
654
+ 107: <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">'?acl'</span>
655
+ 108: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">path</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/[&amp;?]torrent($|&amp;|=)/</span>
656
+ 109: <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">'?torrent'</span>
657
+ 110: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">path</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/[&amp;?]logging($|&amp;|=)/</span>
658
+ 111: <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">'?logging'</span>
659
+ 112: <span class="ruby-keyword kw">end</span>
660
+ 113:
661
+ 114: <span class="ruby-identifier">buf</span>
662
+ 115: <span class="ruby-keyword kw">end</span>
505
663
  </pre>
506
664
  </div>
507
665
  </div>
@@ -525,14 +683,14 @@ variable can be a string or symbol.
525
683
  onclick="toggleCode('M000049-source');return false;">[Source]</a></p>
526
684
  <div class="method-source-code" id="M000049-source">
527
685
  <pre>
528
- <span class="ruby-comment cmt"># File lib/s33r/core.rb, line 164</span>
529
- 164: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generate_querystring</span>(<span class="ruby-identifier">pairs</span>={})
530
- 165: <span class="ruby-identifier">str</span> = <span class="ruby-value str">''</span>
531
- 166: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">pairs</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
532
- 167: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;?&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">pairs</span>.<span class="ruby-identifier">map</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">key</span>, <span class="ruby-identifier">value</span><span class="ruby-operator">|</span> <span class="ruby-node">&quot;#{key}=#{CGI::escape(value.to_s)}&quot;</span> }.<span class="ruby-identifier">join</span>(<span class="ruby-value str">'&amp;'</span>)
533
- 168: <span class="ruby-keyword kw">end</span>
534
- 169: <span class="ruby-identifier">str</span>
535
- 170: <span class="ruby-keyword kw">end</span>
686
+ <span class="ruby-comment cmt"># File lib/s33r/core.rb, line 198</span>
687
+ 198: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generate_querystring</span>(<span class="ruby-identifier">pairs</span>={})
688
+ 199: <span class="ruby-identifier">str</span> = <span class="ruby-value str">''</span>
689
+ 200: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">pairs</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
690
+ 201: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;?&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">pairs</span>.<span class="ruby-identifier">map</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">key</span>, <span class="ruby-identifier">value</span><span class="ruby-operator">|</span> <span class="ruby-node">&quot;#{key}=#{CGI::escape(value.to_s)}&quot;</span> }.<span class="ruby-identifier">join</span>(<span class="ruby-value str">'&amp;'</span>)
691
+ 202: <span class="ruby-keyword kw">end</span>
692
+ 203: <span class="ruby-identifier">str</span>
693
+ 204: <span class="ruby-keyword kw">end</span>
536
694
  </pre>
537
695
  </div>
538
696
  </div>
@@ -556,11 +714,11 @@ sha1 sum, and then base64 encoding it.
556
714
  onclick="toggleCode('M000043-source');return false;">[Source]</a></p>
557
715
  <div class="method-source-code" id="M000043-source">
558
716
  <pre>
559
- <span class="ruby-comment cmt"># File lib/s33r/core.rb, line 103</span>
560
- 103: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generate_signature</span>(<span class="ruby-identifier">aws_secret_access_key</span>, <span class="ruby-identifier">str</span>)
561
- 104: <span class="ruby-identifier">digest</span> = <span class="ruby-constant">OpenSSL</span><span class="ruby-operator">::</span><span class="ruby-constant">HMAC</span><span class="ruby-operator">::</span><span class="ruby-identifier">digest</span>(<span class="ruby-constant">OpenSSL</span><span class="ruby-operator">::</span><span class="ruby-constant">Digest</span><span class="ruby-operator">::</span><span class="ruby-constant">Digest</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">&quot;SHA1&quot;</span>), <span class="ruby-identifier">aws_secret_access_key</span>, <span class="ruby-identifier">str</span>)
562
- 105: <span class="ruby-constant">Base64</span>.<span class="ruby-identifier">encode64</span>(<span class="ruby-identifier">digest</span>).<span class="ruby-identifier">strip</span>
563
- 106: <span class="ruby-keyword kw">end</span>
717
+ <span class="ruby-comment cmt"># File lib/s33r/core.rb, line 136</span>
718
+ 136: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generate_signature</span>(<span class="ruby-identifier">aws_secret_access_key</span>, <span class="ruby-identifier">str</span>)
719
+ 137: <span class="ruby-identifier">digest</span> = <span class="ruby-constant">OpenSSL</span><span class="ruby-operator">::</span><span class="ruby-constant">HMAC</span><span class="ruby-operator">::</span><span class="ruby-identifier">digest</span>(<span class="ruby-constant">OpenSSL</span><span class="ruby-operator">::</span><span class="ruby-constant">Digest</span><span class="ruby-operator">::</span><span class="ruby-constant">Digest</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">&quot;SHA1&quot;</span>), <span class="ruby-identifier">aws_secret_access_key</span>, <span class="ruby-identifier">str</span>)
720
+ 138: <span class="ruby-constant">Base64</span>.<span class="ruby-identifier">encode64</span>(<span class="ruby-identifier">digest</span>).<span class="ruby-identifier">strip</span>
721
+ 139: <span class="ruby-keyword kw">end</span>
564
722
  </pre>
565
723
  </div>
566
724
  </div>
@@ -584,12 +742,12 @@ guessed, &quot;text/plain&quot; is used.
584
742
  onclick="toggleCode('M000047-source');return false;">[Source]</a></p>
585
743
  <div class="method-source-code" id="M000047-source">
586
744
  <pre>
587
- <span class="ruby-comment cmt"># File lib/s33r/core.rb, line 149</span>
588
- 149: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">guess_mime_type</span>(<span class="ruby-identifier">file_name</span>)
589
- 150: <span class="ruby-identifier">mime_type</span> = <span class="ruby-constant">MIME</span><span class="ruby-operator">::</span><span class="ruby-constant">Types</span>.<span class="ruby-identifier">type_for</span>(<span class="ruby-identifier">file_name</span>)[<span class="ruby-value">0</span>]
590
- 151: <span class="ruby-identifier">mime_type</span> <span class="ruby-operator">||=</span> <span class="ruby-constant">MIME</span><span class="ruby-operator">::</span><span class="ruby-constant">Types</span>[<span class="ruby-value str">'text/plain'</span>][<span class="ruby-value">0</span>]
591
- 152: <span class="ruby-identifier">mime_type</span>
592
- 153: <span class="ruby-keyword kw">end</span>
745
+ <span class="ruby-comment cmt"># File lib/s33r/core.rb, line 183</span>
746
+ 183: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">guess_mime_type</span>(<span class="ruby-identifier">file_name</span>)
747
+ 184: <span class="ruby-identifier">mime_type</span> = <span class="ruby-constant">MIME</span><span class="ruby-operator">::</span><span class="ruby-constant">Types</span>.<span class="ruby-identifier">type_for</span>(<span class="ruby-identifier">file_name</span>)[<span class="ruby-value">0</span>]
748
+ 185: <span class="ruby-identifier">mime_type</span> <span class="ruby-operator">||=</span> <span class="ruby-constant">MIME</span><span class="ruby-operator">::</span><span class="ruby-constant">Types</span>[<span class="ruby-value str">'text/plain'</span>][<span class="ruby-value">0</span>]
749
+ 186: <span class="ruby-identifier">mime_type</span>
750
+ 187: <span class="ruby-keyword kw">end</span>
593
751
  </pre>
594
752
  </div>
595
753
  </div>
@@ -606,56 +764,90 @@ guessed, &quot;text/plain&quot; is used.
606
764
 
607
765
  <div class="method-description">
608
766
  <p>
609
- Add metadata headers, correctly prefixing them first. Returns headers with
610
- the metadata headers appended.
767
+ Add metadata headers, correctly prefixing them first.
768
+ </p>
769
+ <p>
770
+ Returns headers with the metadata headers appended.
611
771
  </p>
612
772
  <p><a class="source-toggle" href="#"
613
773
  onclick="toggleCode('M000045-source');return false;">[Source]</a></p>
614
774
  <div class="method-source-code" id="M000045-source">
615
775
  <pre>
616
- <span class="ruby-comment cmt"># File lib/s33r/core.rb, line 129</span>
617
- 129: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">metadata_headers</span>(<span class="ruby-identifier">headers</span>, <span class="ruby-identifier">metadata</span>={})
618
- 130: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">metadata</span>.<span class="ruby-identifier">empty?</span>
619
- 131: <span class="ruby-identifier">metadata</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">key</span>, <span class="ruby-identifier">value</span><span class="ruby-operator">|</span> <span class="ruby-identifier">headers</span>[<span class="ruby-constant">METADATA_PREFIX</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">key</span>] = <span class="ruby-identifier">value</span> }
620
- 132: <span class="ruby-keyword kw">end</span>
621
- 133: <span class="ruby-identifier">headers</span>
622
- 134: <span class="ruby-keyword kw">end</span>
776
+ <span class="ruby-comment cmt"># File lib/s33r/core.rb, line 163</span>
777
+ 163: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">metadata_headers</span>(<span class="ruby-identifier">headers</span>, <span class="ruby-identifier">metadata</span>={})
778
+ 164: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">metadata</span>.<span class="ruby-identifier">empty?</span>
779
+ 165: <span class="ruby-identifier">metadata</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">key</span>, <span class="ruby-identifier">value</span><span class="ruby-operator">|</span> <span class="ruby-identifier">headers</span>[<span class="ruby-constant">METADATA_PREFIX</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">key</span>] = <span class="ruby-identifier">value</span> }
780
+ 166: <span class="ruby-keyword kw">end</span>
781
+ 167: <span class="ruby-identifier">headers</span>
782
+ 168: <span class="ruby-keyword kw">end</span>
623
783
  </pre>
624
784
  </div>
625
785
  </div>
626
786
  </div>
627
787
 
628
- <div id="method-M000052" class="method-detail">
629
- <a name="M000052"></a>
788
+ <div id="method-M000050" class="method-detail">
789
+ <a name="M000050"></a>
630
790
 
631
791
  <div class="method-heading">
632
- <a href="#M000052" class="method-signature">
633
- <span class="method-name">s3_authenticated_url</span><span class="method-args">(aws_access_key, aws_secret_access_key, bucket_name, resource_key, expires)</span>
792
+ <a href="#M000050" class="method-signature">
793
+ <span class="method-name">s3_acl_path</span><span class="method-args">(bucket_name, resource_key)</span>
794
+ </a>
795
+ </div>
796
+
797
+ <div class="method-description">
798
+ <p>
799
+ Return the location of the ACL for a resource.
800
+ </p>
801
+ <p><a class="source-toggle" href="#"
802
+ onclick="toggleCode('M000050-source');return false;">[Source]</a></p>
803
+ <div class="method-source-code" id="M000050-source">
804
+ <pre>
805
+ <span class="ruby-comment cmt"># File lib/s33r/core.rb, line 207</span>
806
+ 207: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">s3_acl_path</span>(<span class="ruby-identifier">bucket_name</span>, <span class="ruby-identifier">resource_key</span>)
807
+ 208: <span class="ruby-identifier">s3_path</span>(<span class="ruby-identifier">bucket_name</span>, <span class="ruby-identifier">resource_key</span>) <span class="ruby-operator">+</span> <span class="ruby-value str">&quot;?acl&quot;</span>
808
+ 209: <span class="ruby-keyword kw">end</span>
809
+ </pre>
810
+ </div>
811
+ </div>
812
+ </div>
813
+
814
+ <div id="method-M000055" class="method-detail">
815
+ <a name="M000055"></a>
816
+
817
+ <div class="method-heading">
818
+ <a href="#M000055" class="method-signature">
819
+ <span class="method-name">s3_authenticated_url</span><span class="method-args">(aws_access_key, aws_secret_access_key, bucket_name, resource_key, expires=nil)</span>
634
820
  </a>
635
821
  </div>
636
822
 
637
823
  <div class="method-description">
638
824
  <p>
639
825
  Generate a get-able URL for an S3 resource key which passes authentication
640
- in querystring. int expires: when the URL expires (seconds since the epoch)
826
+ in querystring.
827
+ </p>
828
+ <p>
829
+ int <tt>expires</tt>: when the URL expires (seconds since the epoch); NB
830
+ you can use <a href="S33r.html#M000057">S33r.parse_expiry</a> to generate a
831
+ suitable value from a string.
641
832
  </p>
642
833
  <p><a class="source-toggle" href="#"
643
- onclick="toggleCode('M000052-source');return false;">[Source]</a></p>
644
- <div class="method-source-code" id="M000052-source">
834
+ onclick="toggleCode('M000055-source');return false;">[Source]</a></p>
835
+ <div class="method-source-code" id="M000055-source">
645
836
  <pre>
646
- <span class="ruby-comment cmt"># File lib/s33r/core.rb, line 200</span>
647
- 200: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">s3_authenticated_url</span>(<span class="ruby-identifier">aws_access_key</span>, <span class="ruby-identifier">aws_secret_access_key</span>, <span class="ruby-identifier">bucket_name</span>, <span class="ruby-identifier">resource_key</span>,
648
- 201: <span class="ruby-identifier">expires</span>)
649
- 202: <span class="ruby-identifier">path</span> = <span class="ruby-value str">'/'</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">bucket_name</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'/'</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">resource_key</span>
650
- 203:
651
- 204: <span class="ruby-identifier">canonical_string</span> = <span class="ruby-identifier">generate_canonical_string</span>(<span class="ruby-value str">'GET'</span>, <span class="ruby-identifier">path</span>, {}, <span class="ruby-identifier">expires</span>)
652
- 205: <span class="ruby-identifier">signature</span> = <span class="ruby-identifier">generate_signature</span>(<span class="ruby-identifier">aws_secret_access_key</span>, <span class="ruby-identifier">canonical_string</span>)
653
- 206:
654
- 207: <span class="ruby-identifier">querystring</span> = <span class="ruby-identifier">generate_querystring</span>({ <span class="ruby-value str">'Signature'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">signature</span>, <span class="ruby-value str">'Expires'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">expires</span>,
655
- 208: <span class="ruby-value str">'AWSAccessKeyId'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">aws_access_key</span> })
656
- 209:
657
- 210: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">s3_public_url</span>(<span class="ruby-identifier">bucket_name</span>, <span class="ruby-identifier">resource_key</span>) <span class="ruby-operator">+</span> <span class="ruby-identifier">querystring</span>
658
- 211: <span class="ruby-keyword kw">end</span>
837
+ <span class="ruby-comment cmt"># File lib/s33r/core.rb, line 238</span>
838
+ 238: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">s3_authenticated_url</span>(<span class="ruby-identifier">aws_access_key</span>, <span class="ruby-identifier">aws_secret_access_key</span>, <span class="ruby-identifier">bucket_name</span>, <span class="ruby-identifier">resource_key</span>,
839
+ 239: <span class="ruby-identifier">expires</span>=<span class="ruby-keyword kw">nil</span>)
840
+ 240: <span class="ruby-identifier">path</span> = <span class="ruby-identifier">s3_path</span>(<span class="ruby-identifier">bucket_name</span>, <span class="ruby-identifier">resource_key</span>)
841
+ 241: <span class="ruby-identifier">expires</span> = <span class="ruby-constant">S33r</span>.<span class="ruby-identifier">parse_expiry</span>(<span class="ruby-identifier">expires</span>)
842
+ 242:
843
+ 243: <span class="ruby-identifier">canonical_string</span> = <span class="ruby-identifier">generate_canonical_string</span>(<span class="ruby-value str">'GET'</span>, <span class="ruby-identifier">path</span>, {}, <span class="ruby-identifier">expires</span>)
844
+ 244: <span class="ruby-identifier">signature</span> = <span class="ruby-identifier">generate_signature</span>(<span class="ruby-identifier">aws_secret_access_key</span>, <span class="ruby-identifier">canonical_string</span>)
845
+ 245:
846
+ 246: <span class="ruby-identifier">querystring</span> = <span class="ruby-identifier">generate_querystring</span>({ <span class="ruby-value str">'Signature'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">signature</span>, <span class="ruby-value str">'Expires'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">expires</span>,
847
+ 247: <span class="ruby-value str">'AWSAccessKeyId'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">aws_access_key</span> })
848
+ 248:
849
+ 249: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">s3_url</span>(<span class="ruby-identifier">path</span>) <span class="ruby-operator">+</span> <span class="ruby-identifier">querystring</span>
850
+ 250: <span class="ruby-keyword kw">end</span>
659
851
  </pre>
660
852
  </div>
661
853
  </div>
@@ -666,63 +858,103 @@ in querystring. int expires: when the URL expires (seconds since the epoch)
666
858
 
667
859
  <div class="method-heading">
668
860
  <a href="#M000051" class="method-signature">
669
- <span class="method-name">s3_public_url</span><span class="method-args">(bucket_name, resource_key)</span>
861
+ <span class="method-name">s3_logging_path</span><span class="method-args">(bucket_name, resource_key)</span>
670
862
  </a>
671
863
  </div>
672
864
 
673
865
  <div class="method-description">
674
866
  <p>
675
- The public URL for this key (which only works if public-read ACL is set).
867
+ Return the location of the logging definition for a resource.
676
868
  </p>
677
869
  <p><a class="source-toggle" href="#"
678
870
  onclick="toggleCode('M000051-source');return false;">[Source]</a></p>
679
871
  <div class="method-source-code" id="M000051-source">
680
872
  <pre>
681
- <span class="ruby-comment cmt"># File lib/s33r/core.rb, line 194</span>
682
- 194: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">s3_public_url</span>(<span class="ruby-identifier">bucket_name</span>, <span class="ruby-identifier">resource_key</span>)
683
- 195: <span class="ruby-value str">&quot;http://&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-constant">HOST</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'/'</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">bucket_name</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'/'</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">resource_key</span>
684
- 196: <span class="ruby-keyword kw">end</span>
873
+ <span class="ruby-comment cmt"># File lib/s33r/core.rb, line 212</span>
874
+ 212: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">s3_logging_path</span>(<span class="ruby-identifier">bucket_name</span>, <span class="ruby-identifier">resource_key</span>)
875
+ 213: <span class="ruby-identifier">s3_path</span>(<span class="ruby-identifier">bucket_name</span>, <span class="ruby-identifier">resource_key</span>) <span class="ruby-operator">+</span> <span class="ruby-value str">&quot;?logging&quot;</span>
876
+ 214: <span class="ruby-keyword kw">end</span>
685
877
  </pre>
686
878
  </div>
687
879
  </div>
688
880
  </div>
689
881
 
690
- <div id="method-M000050" class="method-detail">
691
- <a name="M000050"></a>
882
+ <div id="method-M000054" class="method-detail">
883
+ <a name="M000054"></a>
692
884
 
693
885
  <div class="method-heading">
694
- <a href="#M000050" class="method-signature">
695
- <span class="method-name">url_join</span><span class="method-args">(*args)</span>
886
+ <a href="#M000054" class="method-signature">
887
+ <span class="method-name">s3_path</span><span class="method-args">(bucket_name, resource_key)</span>
696
888
  </a>
697
889
  </div>
698
890
 
699
891
  <div class="method-description">
700
892
  <p>
701
- Build URLs from fragments. Does similar job to File.join but puts forward
702
- slash between arguments (only if it&#8217;s not already there).
893
+ Returns the path for this bucket and key.
703
894
  </p>
704
895
  <p><a class="source-toggle" href="#"
705
- onclick="toggleCode('M000050-source');return false;">[Source]</a></p>
706
- <div class="method-source-code" id="M000050-source">
896
+ onclick="toggleCode('M000054-source');return false;">[Source]</a></p>
897
+ <div class="method-source-code" id="M000054-source">
898
+ <pre>
899
+ <span class="ruby-comment cmt"># File lib/s33r/core.rb, line 228</span>
900
+ 228: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">s3_path</span>(<span class="ruby-identifier">bucket_name</span>, <span class="ruby-identifier">resource_key</span>)
901
+ 229: <span class="ruby-identifier">path</span> = <span class="ruby-value str">'/'</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">bucket_name</span>
902
+ 230: <span class="ruby-identifier">path</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">'/'</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">resource_key</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-value str">''</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">resource_key</span> <span class="ruby-keyword kw">or</span> <span class="ruby-identifier">resource_key</span>.<span class="ruby-identifier">nil?</span>
903
+ 231: <span class="ruby-identifier">path</span>
904
+ 232: <span class="ruby-keyword kw">end</span>
905
+ </pre>
906
+ </div>
907
+ </div>
908
+ </div>
909
+
910
+ <div id="method-M000053" class="method-detail">
911
+ <a name="M000053"></a>
912
+
913
+ <div class="method-heading">
914
+ <a href="#M000053" class="method-signature">
915
+ <span class="method-name">s3_public_url</span><span class="method-args">(bucket_name, resource_key='')</span>
916
+ </a>
917
+ </div>
918
+
919
+ <div class="method-description">
920
+ <p>
921
+ Public readable URL for a bucket and resource.
922
+ </p>
923
+ <p><a class="source-toggle" href="#"
924
+ onclick="toggleCode('M000053-source');return false;">[Source]</a></p>
925
+ <div class="method-source-code" id="M000053-source">
926
+ <pre>
927
+ <span class="ruby-comment cmt"># File lib/s33r/core.rb, line 222</span>
928
+ 222: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">s3_public_url</span>(<span class="ruby-identifier">bucket_name</span>, <span class="ruby-identifier">resource_key</span>=<span class="ruby-value str">''</span>)
929
+ 223: <span class="ruby-identifier">path</span> = <span class="ruby-identifier">s3_path</span>(<span class="ruby-identifier">bucket_name</span>, <span class="ruby-identifier">resource_key</span>)
930
+ 224: <span class="ruby-identifier">s3_url</span>(<span class="ruby-identifier">path</span>)
931
+ 225: <span class="ruby-keyword kw">end</span>
932
+ </pre>
933
+ </div>
934
+ </div>
935
+ </div>
936
+
937
+ <div id="method-M000052" class="method-detail">
938
+ <a name="M000052"></a>
939
+
940
+ <div class="method-heading">
941
+ <a href="#M000052" class="method-signature">
942
+ <span class="method-name">s3_url</span><span class="method-args">(path)</span>
943
+ </a>
944
+ </div>
945
+
946
+ <div class="method-description">
947
+ <p>
948
+ Prepend scheme and HOST to path.
949
+ </p>
950
+ <p><a class="source-toggle" href="#"
951
+ onclick="toggleCode('M000052-source');return false;">[Source]</a></p>
952
+ <div class="method-source-code" id="M000052-source">
707
953
  <pre>
708
- <span class="ruby-comment cmt"># File lib/s33r/core.rb, line 175</span>
709
- 175: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">url_join</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)
710
- 176: <span class="ruby-identifier">url_start</span> = <span class="ruby-value str">''</span>
711
- 177: <span class="ruby-identifier">url_end</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">join</span>(<span class="ruby-value str">'/'</span>)
712
- 178:
713
- 179: <span class="ruby-comment cmt"># string index where the scheme of the URL (xxxx://) ends</span>
714
- 180: <span class="ruby-identifier">scheme_ends_at</span> = (<span class="ruby-identifier">url_end</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/:\/\//</span>)
715
- 181: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">scheme_ends_at</span>.<span class="ruby-identifier">nil?</span>
716
- 182: <span class="ruby-identifier">scheme_ends_at</span> = <span class="ruby-identifier">scheme_ends_at</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>
717
- 183: <span class="ruby-identifier">url_start</span> = <span class="ruby-identifier">url_end</span>[<span class="ruby-value">0</span><span class="ruby-operator">..</span><span class="ruby-identifier">scheme_ends_at</span>]
718
- 184: <span class="ruby-identifier">url_end</span> = <span class="ruby-identifier">url_end</span>[(<span class="ruby-identifier">scheme_ends_at</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>)<span class="ruby-operator">..</span><span class="ruby-value">-1</span>]
719
- 185: <span class="ruby-keyword kw">end</span>
720
- 186:
721
- 187: <span class="ruby-comment cmt"># replace any multiple forward slashes (except those in the scheme)</span>
722
- 188: <span class="ruby-identifier">url_end</span> = <span class="ruby-identifier">url_end</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/\/{2,}/</span>, <span class="ruby-value str">'/'</span>)
723
- 189:
724
- 190: <span class="ruby-identifier">url_start</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">url_end</span>
725
- 191: <span class="ruby-keyword kw">end</span>
954
+ <span class="ruby-comment cmt"># File lib/s33r/core.rb, line 217</span>
955
+ 217: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">s3_url</span>(<span class="ruby-identifier">path</span>)
956
+ 218: <span class="ruby-value str">&quot;http://&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-constant">HOST</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">path</span>
957
+ 219: <span class="ruby-keyword kw">end</span>
726
958
  </pre>
727
959
  </div>
728
960
  </div>