heirloom 0.11.0 → 0.11.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. data/.gitignore +1 -0
  2. data/.ruby-gemset +1 -0
  3. data/.ruby-version +1 -0
  4. data/CHANGELOG.md +4 -1
  5. data/README.md +9 -0
  6. data/heirloom.gemspec +8 -2
  7. data/lib/heirloom.rb +9 -0
  8. data/lib/heirloom/acl/s3.rb +1 -1
  9. data/lib/heirloom/aws/simpledb.rb +25 -2
  10. data/lib/heirloom/catalog.rb +37 -0
  11. data/lib/heirloom/cli.rb +36 -3
  12. data/lib/heirloom/cli/authorize.rb +5 -1
  13. data/lib/heirloom/cli/catalog.rb +5 -1
  14. data/lib/heirloom/cli/cleanup.rb +74 -0
  15. data/lib/heirloom/cli/destroy.rb +5 -1
  16. data/lib/heirloom/cli/download.rb +5 -1
  17. data/lib/heirloom/cli/list.rb +5 -1
  18. data/lib/heirloom/cli/rotate.rb +5 -1
  19. data/lib/heirloom/cli/setup.rb +5 -1
  20. data/lib/heirloom/cli/show.rb +5 -1
  21. data/lib/heirloom/cli/tag.rb +5 -1
  22. data/lib/heirloom/cli/teardown.rb +21 -11
  23. data/lib/heirloom/cli/upload.rb +5 -1
  24. data/lib/heirloom/exceptions.rb +3 -0
  25. data/lib/heirloom/logger.rb +6 -1
  26. data/lib/heirloom/version.rb +1 -1
  27. data/spec/acl/s3_spec.rb +3 -2
  28. data/spec/aws/simpledb_spec.rb +35 -1
  29. data/spec/catalog_spec.rb +45 -2
  30. data/spec/cli/teardown_spec.rb +60 -28
  31. data/spec/cli_spec.rb +12 -0
  32. data/spec/fixtures/cassettes/Heirloom_AWS_SimpleDB/select/should_be_able_to_offset_results.yml +81 -0
  33. data/spec/fixtures/cassettes/Heirloom_AWS_SimpleDB/select/should_get_results.yml +34 -0
  34. data/spec/fixtures/cassettes/Heirloom_AWS_SimpleDB/select/should_yield_when_requested.yml +81 -0
  35. data/spec/fixtures/create_test_data.sh +28 -0
  36. data/spec/heirloom_spec.rb +11 -0
  37. data/spec/integration/authorize_spec.rb +79 -0
  38. data/spec/integration/cleanup_spec.rb +77 -0
  39. data/spec/logger_spec.rb +1 -1
  40. data/spec/spec_helper.rb +89 -5
  41. data/watchr.rb +101 -0
  42. metadata +84 -35
  43. data/.rvmrc +0 -1
@@ -4,6 +4,10 @@ module Heirloom
4
4
 
5
5
  include Heirloom::CLI::Shared
6
6
 
7
+ def self.command_summary
8
+ 'Show Heirloom'
9
+ end
10
+
7
11
  def initialize
8
12
  @opts = read_options
9
13
  @logger = HeirloomLogger.new :log_level => @opts[:level]
@@ -47,7 +51,7 @@ module Heirloom
47
51
  version Heirloom::VERSION
48
52
  banner <<-EOS
49
53
 
50
- Show Heirloom.
54
+ #{Show.command_summary}.
51
55
 
52
56
  Usage:
53
57
 
@@ -4,6 +4,10 @@ module Heirloom
4
4
 
5
5
  include Heirloom::CLI::Shared
6
6
 
7
+ def self.command_summary
8
+ 'Tag an Heirloom with an attribute and value'
9
+ end
10
+
7
11
  def initialize
8
12
  @opts = read_options
9
13
  @logger = HeirloomLogger.new :log_level => @opts[:level]
@@ -40,7 +44,7 @@ module Heirloom
40
44
  version Heirloom::VERSION
41
45
  banner <<-EOS
42
46
 
43
- Tag an Heirloom with an attribute and value.
47
+ #{Tag.command_summary}.
44
48
 
45
49
  Usage:
46
50
 
@@ -4,6 +4,10 @@ module Heirloom
4
4
 
5
5
  include Heirloom::CLI::Shared
6
6
 
7
+ def self.command_summary
8
+ 'Teardown S3 buckets and SimpleDB domain for Heirloom name'
9
+ end
10
+
7
11
  def initialize
8
12
  @opts = read_options
9
13
  @logger = HeirloomLogger.new :log_level => @opts[:level]
@@ -27,18 +31,23 @@ module Heirloom
27
31
  end
28
32
 
29
33
  def teardown
30
- ensure_domain_exists :name => @opts[:name],
31
- :config => @config
32
-
33
- ensure_archive_domain_empty :archive => @archive,
34
- :config => @config
35
-
36
- @regions = @catalog.regions
37
- @bucket_prefix = @catalog.bucket_prefix
34
+ ensure_domain_exists :name => @opts[:name], :config => @config
35
+
36
+ if @opts[:force]
37
+ Heirloom.log.info "Removing any existing archives..."
38
+ @catalog.cleanup :num_to_keep => 0, :remove_preserved => true
39
+ else
40
+ ensure_archive_domain_empty(
41
+ :archive => @archive,
42
+ :config => @config
43
+ )
44
+ end
38
45
 
39
46
  unless @opts[:keep_buckets]
40
- @archive.delete_buckets :regions => @regions,
41
- :bucket_prefix => @bucket_prefix
47
+ @archive.delete_buckets(
48
+ :regions => @catalog.regions,
49
+ :bucket_prefix => @catalog.bucket_prefix
50
+ )
42
51
  end
43
52
 
44
53
  @archive.delete_domain
@@ -52,7 +61,7 @@ module Heirloom
52
61
  version Heirloom::VERSION
53
62
  banner <<-EOS
54
63
 
55
- Teardown S3 buckets and SimpleDB domain for a given Heirloom name.
64
+ #{Teardown.command_summary}.
56
65
 
57
66
  Usage:
58
67
 
@@ -67,6 +76,7 @@ EOS
67
76
  opt :metadata_region, "AWS region to store Heirloom metadata.", :type => :string,
68
77
  :default => 'us-west-1'
69
78
  opt :name, "Name of Heirloom.", :type => :string
79
+ opt :force, "Forces recursive deletion of existing archives."
70
80
  opt :keep_buckets, "Do not delete S3 buckets."
71
81
  opt :aws_access_key, "AWS Access Key ID", :type => :string,
72
82
  :short => :none
@@ -6,6 +6,10 @@ module Heirloom
6
6
 
7
7
  include Heirloom::CLI::Shared
8
8
 
9
+ def self.command_summary
10
+ 'Upload a directory to Heirloom'
11
+ end
12
+
9
13
  def initialize
10
14
  @opts = read_options
11
15
  @logger = HeirloomLogger.new :log_level => @opts[:level]
@@ -75,7 +79,7 @@ module Heirloom
75
79
  version Heirloom::VERSION
76
80
  banner <<-EOS
77
81
 
78
- Upload a directory to Heirloom.
82
+ #{Upload.command_summary}.
79
83
 
80
84
  Usage:
81
85
 
@@ -12,5 +12,8 @@ module Heirloom
12
12
  class RotateFailed < Base
13
13
  end
14
14
 
15
+ class CleanupFailed < Base
16
+ end
17
+
15
18
  end
16
19
  end
@@ -14,10 +14,15 @@ module Heirloom
14
14
  @logger = args[:logger] ||= new_logger(args)
15
15
  end
16
16
 
17
+ def level=(level_as_string)
18
+ @log_level = level_as_string
19
+ @logger.level = logger_level
20
+ end
21
+
17
22
  private
18
23
 
19
24
  def new_logger(args)
20
- Logger.new(STDOUT).tap do |l|
25
+ Logger.new($stdout).tap do |l|
21
26
  l.datetime_format = '%Y-%m-%dT%H:%M:%S%z'
22
27
  l.formatter = proc do |severity, datetime, progname, msg|
23
28
  "#{datetime} #{severity} : #{msg}\n"
@@ -1,3 +1,3 @@
1
1
  module Heirloom
2
- VERSION = "0.11.0"
2
+ VERSION = "0.11.1"
3
3
  end
@@ -22,8 +22,9 @@ describe Heirloom do
22
22
  @s3.should_receive(:s3).exactly(2).times.
23
23
  and_return(s3_mock)
24
24
 
25
- s3_mock.should_receive(:get_bucket_acl).with('bucket').
26
- and_return acls
25
+ s3_mock.should_receive(:get_object_acl).
26
+ with(:bucket => 'bucket', :object_name => 'key-folder/key.tar.gz').
27
+ and_return acls
27
28
 
28
29
  s3_mock.should_receive(:put_object_acl).
29
30
  with("bucket", "key-folder/key.tar.gz", {"Owner"=>{"DisplayName"=>"Brett", "ID"=>"123"}, "AccessControlList"=>[{"Grantee"=>{"EmailAddress"=>"acct1@test.com"}, "Permission"=>"READ"}, {"Grantee"=>{"EmailAddress"=>"acct2@test.com"}, "Permission"=>"READ"}, {"Grantee"=>{"DisplayName"=>"Brett", "ID"=>"123"}, "Permission"=>"FULL_CONTROL"}]})
@@ -1,6 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Heirloom do
3
+ describe Heirloom::AWS::SimpleDB do
4
+
5
+ before do
6
+ @sdb = Heirloom::AWS::SimpleDB.new :config => mock_config
7
+ end
4
8
 
5
9
  context "credential management" do
6
10
 
@@ -31,6 +35,36 @@ describe Heirloom do
31
35
 
32
36
  end
33
37
 
38
+ # Data recorded with VCR after running ./spec/fixtures/create_test_data.sh
39
+ context "select", :vcr => true do
40
+
41
+ before do
42
+ @sdb = Heirloom::AWS::SimpleDB.new :config => integration_or_mock_config
43
+ @q = "select * from `heirloom_test_data` where built_at > '2000-01-01T00:00:00.000Z' order by built_at desc"
44
+ end
45
+
46
+ it "should get results" do
47
+ keys = @sdb.select(@q).keys
48
+ keys.size.should == 10
49
+ keys.first.should == "v10"
50
+ end
51
+
52
+ it "should be able to offset results" do
53
+ keys = @sdb.select(@q, :offset => 2).keys
54
+ keys.size.should == 8
55
+ keys.first.should == "v8"
56
+ end
57
+
58
+ it "should yield when requested" do
59
+ num_yields = 0
60
+ @sdb.select(@q, :offset => 2) do |k, v|
61
+ num_yields += 1
62
+ end
63
+ num_yields.should == 8
64
+ end
65
+
66
+ end
67
+
34
68
  context "sdb operations" do
35
69
 
36
70
  before do
@@ -6,8 +6,51 @@ describe Heirloom::Catalog do
6
6
  @config_mock = mock 'catalog'
7
7
  @regions = ['us-west-1', 'us-west-2']
8
8
  @bucket_prefix = 'bp'
9
- @catalog = Heirloom::Catalog.new :config => @config_mock,
10
- :name => 'new_archive'
9
+ @catalog = Heirloom::Catalog.new :config => @config_mock, :name => 'new_archive'
10
+
11
+ Heirloom.stub :log => mock_log
12
+ end
13
+
14
+ context "cleanup" do
15
+ before do
16
+ @sdb = mock 'sdb'
17
+ @sdb.stub(:select)
18
+ .and_yield('123', { 'preserve' => ['true'] })
19
+ .and_yield('abc', { 'preserve' => ['true'] })
20
+ .and_yield('456', { 'test' => ['banana'] })
21
+ end
22
+
23
+ it "should not destroy archives marked with 'preserve'" do
24
+
25
+ archive = mock 'archive', :destroy => true
26
+ @catalog.stub :sdb => @sdb
27
+
28
+ Heirloom::Archive.should_receive(:new)
29
+ .with(hash_including(:id => '456'))
30
+ .and_return archive
31
+
32
+ @catalog.cleanup :num_to_keep => 10
33
+ end
34
+
35
+ it "should destroy archives when removed_preserved is true" do
36
+ archive = mock 'archive', :destroy => true
37
+ @catalog.stub :sdb => @sdb
38
+
39
+ Heirloom::Archive.should_receive(:new)
40
+ .with(hash_including(:id => '123'))
41
+ .and_return archive
42
+
43
+ Heirloom::Archive.should_receive(:new)
44
+ .with(hash_including(:id => 'abc'))
45
+ .and_return archive
46
+
47
+ Heirloom::Archive.should_receive(:new)
48
+ .with(hash_including(:id => '456'))
49
+ .and_return archive
50
+
51
+ @catalog.cleanup :num_to_keep => 10, :remove_preserved => true
52
+ end
53
+
11
54
  end
12
55
 
13
56
  context "testing add" do
@@ -1,39 +1,71 @@
1
1
  require 'spec_helper'
2
2
  require 'heirloom/cli'
3
3
 
4
- describe Heirloom do
4
+ describe Heirloom::CLI::Teardown do
5
+
6
+ def stubbed_teardown
7
+ teardown = Heirloom::CLI::Teardown.new
8
+ teardown.stub(
9
+ :ensure_domain_exists => true,
10
+ :ensure_archive_domain_empty => true
11
+ )
12
+ teardown
13
+ end
5
14
 
6
15
  before do
7
- options = { :level => 'info',
8
- :name => 'archive_name',
9
- :metadata_region => 'us-west-1' }
16
+ Heirloom.stub :log => mock_log
17
+ @config_mock = mock_config
18
+
19
+ @defaults = {
20
+ :level => 'info',
21
+ :name => 'archive_name',
22
+ :metadata_region => 'us-west-1'
23
+ }
24
+
10
25
 
11
- @logger_stub = stub 'logger', :error => true, :info => true
12
- @config_mock = mock_config(:logger => @logger_stub)
13
26
  @archive_mock = mock 'archive'
27
+ @archive_mock.stub(
28
+ :delete_buckets => true,
29
+ :delete_domain => true
30
+ )
31
+
14
32
  @catalog_mock = mock 'catalog'
15
- @catalog_mock.stub :regions => ['us-west-1', 'us-west-2']
16
- @catalog_mock.stub :bucket_prefix => 'bp',
17
- :catalog_domain_exists? => true
18
- @catalog_mock.should_receive(:entry_exists_in_catalog?).
19
- with('archive_name').
20
- and_return true
21
- Trollop.stub(:options).and_return options
22
- Heirloom::HeirloomLogger.should_receive(:new).with(:log_level => 'info').
23
- and_return @logger_stub
24
- Heirloom::CLI::Teardown.any_instance.should_receive(:load_config).
25
- with(:logger => @logger_stub,
26
- :opts => options).
27
- and_return @config_mock
28
- Heirloom::Archive.should_receive(:new).
29
- with(:name => 'archive_name',
30
- :config => @config_mock).
31
- and_return @archive_mock
32
- Heirloom::Catalog.should_receive(:new).
33
- with(:name => 'archive_name',
34
- :config => @config_mock).
35
- and_return @catalog_mock
36
- @teardown = Heirloom::CLI::Teardown.new
33
+ @catalog_mock.stub(
34
+ :regions => ['us-west-1', 'us-west-2'],
35
+ :bucket_prefix => 'bp',
36
+ :catalog_domain_exists? => true,
37
+ :delete_from_catalog => true,
38
+ :entry_exists_in_catalog? => true
39
+ )
40
+
41
+ Trollop.stub :options => @defaults
42
+ Heirloom::HeirloomLogger.stub :new => @logger_stub
43
+ Heirloom::CLI::Teardown.any_instance.stub(:load_config)
44
+ .and_return @config_mock
45
+ Heirloom::Archive.stub :new => @archive_mock
46
+ Heirloom::Catalog.stub :new => @catalog_mock
47
+ @teardown = stubbed_teardown
48
+ end
49
+
50
+ context "delete existing archives force option" do
51
+
52
+ it "should ask archive to delete when passed the 'force' option" do
53
+ Trollop.stub :options => @defaults.merge(:force => true)
54
+ @teardown = stubbed_teardown
55
+ @catalog_mock.should_receive(:cleanup).with(
56
+ :num_to_keep => 0,
57
+ :remove_preserved => true
58
+ )
59
+ @teardown.teardown
60
+ end
61
+
62
+ it "should not ask archive to delete when not passed the 'force' option" do
63
+ Trollop.stub :options => @defaults.merge(:force => nil)
64
+ @teardown = stubbed_teardown
65
+ @catalog_mock.should_not_receive(:cleanup)
66
+ @teardown.teardown
67
+ end
68
+
37
69
  end
38
70
 
39
71
  it "should delete s3 buckets, catalog and simpledb domain" do
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+ require 'heirloom/cli'
3
+
4
+ describe Heirloom::CLI do
5
+ context "commands" do
6
+
7
+ it "should generate a list of subcommands" do
8
+ Heirloom::CLI.commands.size.should > 0
9
+ end
10
+
11
+ end
12
+ end
@@ -0,0 +1,81 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://sdb.us-west-1.amazonaws.com/
6
+ body:
7
+ encoding: US-ASCII
8
+ string: AWSAccessKeyId=<AWSACCESSKEYID>&Action=Select&ConsistentRead=false&SelectExpression=select%20%2A%20from%20%60heirloom_test_data%60%20where%20built_at%20%3E%20%272000-01-01T00%3A00%3A00.000Z%27%20order%20by%20built_at%20desc%20limit%202&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2013-05-24T22%3A59%3A42Z&Version=2009-04-15&Signature=NRJ64s4%2FkkOFNP3gWCxJ5k44MpMmOBjG1OJylVjYfRo%3D
9
+ headers:
10
+ User-Agent:
11
+ - fog/1.10.1
12
+ Content-Type:
13
+ - application/x-www-form-urlencoded; charset=utf-8
14
+ response:
15
+ status:
16
+ code: 200
17
+ message:
18
+ headers:
19
+ Content-Type:
20
+ - text/xml
21
+ Transfer-Encoding:
22
+ - chunked
23
+ Date:
24
+ - Fri, 24 May 2013 22:59:14 GMT
25
+ Server:
26
+ - Amazon SimpleDB
27
+ body:
28
+ encoding: US-ASCII
29
+ string: ! '<?xml version="1.0"?>
30
+
31
+ <SelectResponse xmlns="http://sdb.amazonaws.com/doc/2009-04-15/"><SelectResult><Item><Name>v10</Name><Attribute><Name>id</Name><Value>v10</Value></Attribute><Attribute><Name>encrypted</Name><Value>false</Value></Attribute><Attribute><Name>built_at</Name><Value>2013-05-24T22:35:06Z</Value></Attribute><Attribute><Name>bucket_prefix</Name><Value>heirloom-integration-tests</Value></Attribute><Attribute><Name>built_by</Name><Value>dvaughn1@sdgl114414452</Value></Attribute><Attribute><Name>us-west-1-s3-url</Name><Value>s3://heirloom-integration-tests-us-west-1/test_data/v10.tar.gz</Value></Attribute><Attribute><Name>us-west-1-http-url</Name><Value>http://s3-us-west-1.amazonaws.com/heirloom-integration-tests-us-west-1/test_data/v10.tar.gz</Value></Attribute><Attribute><Name>us-west-1-https-url</Name><Value>https://s3-us-west-1.amazonaws.com/heirloom-integration-tests-us-west-1/test_data/v10.tar.gz</Value></Attribute></Item><Item><Name>v9</Name><Attribute><Name>id</Name><Value>v9</Value></Attribute><Attribute><Name>encrypted</Name><Value>false</Value></Attribute><Attribute><Name>built_at</Name><Value>2013-05-24T22:34:59Z</Value></Attribute><Attribute><Name>bucket_prefix</Name><Value>heirloom-integration-tests</Value></Attribute><Attribute><Name>built_by</Name><Value>dvaughn1@sdgl114414452</Value></Attribute><Attribute><Name>us-west-1-s3-url</Name><Value>s3://heirloom-integration-tests-us-west-1/test_data/v9.tar.gz</Value></Attribute><Attribute><Name>us-west-1-http-url</Name><Value>http://s3-us-west-1.amazonaws.com/heirloom-integration-tests-us-west-1/test_data/v9.tar.gz</Value></Attribute><Attribute><Name>us-west-1-https-url</Name><Value>https://s3-us-west-1.amazonaws.com/heirloom-integration-tests-us-west-1/test_data/v9.tar.gz</Value></Attribute><Attribute><Name>preserve</Name><Value>true</Value></Attribute></Item><NextToken>rO0ABXNyACdjb20uYW1hem9uLnNkcy5RdWVyeVByb2Nlc3Nvci5Nb3JlVG9rZW7racXLnINNqwMA
32
+
33
+ C0kAFGluaXRpYWxDb25qdW5jdEluZGV4WgAOaXNQYWdlQm91bmRhcnlKAAxsYXN0RW50aXR5SURa
34
+
35
+ AApscnFFbmFibGVkSQAPcXVlcnlDb21wbGV4aXR5SgATcXVlcnlTdHJpbmdDaGVja3N1bUkACnVu
36
+
37
+ aW9uSW5kZXhaAA11c2VRdWVyeUluZGV4TAANY29uc2lzdGVudExTTnQAEkxqYXZhL2xhbmcvU3Ry
38
+
39
+ aW5nO0wAEmxhc3RBdHRyaWJ1dGVWYWx1ZXEAfgABTAAJc29ydE9yZGVydAAvTGNvbS9hbWF6b24v
40
+
41
+ c2RzL1F1ZXJ5UHJvY2Vzc29yL1F1ZXJ5JFNvcnRPcmRlcjt4cAAAAAAAAAAAAAAAAAkAAAAAAQAA
42
+
43
+ AABg70EkAAAAAAFwdAAUMjAxMy0wNS0yNFQyMjozNDo1OVp+cgAtY29tLmFtYXpvbi5zZHMuUXVl
44
+
45
+ cnlQcm9jZXNzb3IuUXVlcnkkU29ydE9yZGVyAAAAAAAAAAASAAB4cgAOamF2YS5sYW5nLkVudW0A
46
+
47
+ AAAAAAAAABIAAHhwdAAKREVTQ0VORElOR3g=</NextToken></SelectResult><ResponseMetadata><RequestId>6807873b-5202-a6ac-d0f5-916fb9d75e83</RequestId><BoxUsage>0.0000320052</BoxUsage></ResponseMetadata></SelectResponse>'
48
+ http_version:
49
+ recorded_at: Fri, 24 May 2013 22:59:43 GMT
50
+ - request:
51
+ method: post
52
+ uri: https://sdb.us-west-1.amazonaws.com/
53
+ body:
54
+ encoding: US-ASCII
55
+ string: AWSAccessKeyId=<AWSACCESSKEYID>&Action=Select&ConsistentRead=false&NextToken=rO0ABXNyACdjb20uYW1hem9uLnNkcy5RdWVyeVByb2Nlc3Nvci5Nb3JlVG9rZW7racXLnINNqwMA%0AC0kAFGluaXRpYWxDb25qdW5jdEluZGV4WgAOaXNQYWdlQm91bmRhcnlKAAxsYXN0RW50aXR5SURa%0AAApscnFFbmFibGVkSQAPcXVlcnlDb21wbGV4aXR5SgATcXVlcnlTdHJpbmdDaGVja3N1bUkACnVu%0AaW9uSW5kZXhaAA11c2VRdWVyeUluZGV4TAANY29uc2lzdGVudExTTnQAEkxqYXZhL2xhbmcvU3Ry%0AaW5nO0wAEmxhc3RBdHRyaWJ1dGVWYWx1ZXEAfgABTAAJc29ydE9yZGVydAAvTGNvbS9hbWF6b24v%0Ac2RzL1F1ZXJ5UHJvY2Vzc29yL1F1ZXJ5JFNvcnRPcmRlcjt4cAAAAAAAAAAAAAAAAAkAAAAAAQAA%0AAABg70EkAAAAAAFwdAAUMjAxMy0wNS0yNFQyMjozNDo1OVp%2BcgAtY29tLmFtYXpvbi5zZHMuUXVl%0AcnlQcm9jZXNzb3IuUXVlcnkkU29ydE9yZGVyAAAAAAAAAAASAAB4cgAOamF2YS5sYW5nLkVudW0A%0AAAAAAAAAABIAAHhwdAAKREVTQ0VORElOR3g%3D&SelectExpression=select%20%2A%20from%20%60heirloom_test_data%60%20where%20built_at%20%3E%20%272000-01-01T00%3A00%3A00.000Z%27%20order%20by%20built_at%20desc&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2013-05-24T22%3A59%3A43Z&Version=2009-04-15&Signature=4zMNfubmGc4NXg%2FUJxWUrZcMT%2BRAsdlDz4cUDj01hJw%3D
56
+ headers:
57
+ User-Agent:
58
+ - fog/1.10.1
59
+ Content-Type:
60
+ - application/x-www-form-urlencoded; charset=utf-8
61
+ response:
62
+ status:
63
+ code: 200
64
+ message:
65
+ headers:
66
+ Content-Type:
67
+ - text/xml
68
+ Transfer-Encoding:
69
+ - chunked
70
+ Date:
71
+ - Fri, 24 May 2013 22:59:15 GMT
72
+ Server:
73
+ - Amazon SimpleDB
74
+ body:
75
+ encoding: US-ASCII
76
+ string: ! '<?xml version="1.0"?>
77
+
78
+ <SelectResponse xmlns="http://sdb.amazonaws.com/doc/2009-04-15/"><SelectResult><Item><Name>v8</Name><Attribute><Name>id</Name><Value>v8</Value></Attribute><Attribute><Name>encrypted</Name><Value>false</Value></Attribute><Attribute><Name>built_at</Name><Value>2013-05-24T22:34:54Z</Value></Attribute><Attribute><Name>bucket_prefix</Name><Value>heirloom-integration-tests</Value></Attribute><Attribute><Name>built_by</Name><Value>dvaughn1@sdgl114414452</Value></Attribute><Attribute><Name>us-west-1-s3-url</Name><Value>s3://heirloom-integration-tests-us-west-1/test_data/v8.tar.gz</Value></Attribute><Attribute><Name>us-west-1-http-url</Name><Value>http://s3-us-west-1.amazonaws.com/heirloom-integration-tests-us-west-1/test_data/v8.tar.gz</Value></Attribute><Attribute><Name>us-west-1-https-url</Name><Value>https://s3-us-west-1.amazonaws.com/heirloom-integration-tests-us-west-1/test_data/v8.tar.gz</Value></Attribute></Item><Item><Name>v7</Name><Attribute><Name>id</Name><Value>v7</Value></Attribute><Attribute><Name>encrypted</Name><Value>false</Value></Attribute><Attribute><Name>built_at</Name><Value>2013-05-24T22:34:49Z</Value></Attribute><Attribute><Name>bucket_prefix</Name><Value>heirloom-integration-tests</Value></Attribute><Attribute><Name>built_by</Name><Value>dvaughn1@sdgl114414452</Value></Attribute><Attribute><Name>us-west-1-s3-url</Name><Value>s3://heirloom-integration-tests-us-west-1/test_data/v7.tar.gz</Value></Attribute><Attribute><Name>us-west-1-http-url</Name><Value>http://s3-us-west-1.amazonaws.com/heirloom-integration-tests-us-west-1/test_data/v7.tar.gz</Value></Attribute><Attribute><Name>us-west-1-https-url</Name><Value>https://s3-us-west-1.amazonaws.com/heirloom-integration-tests-us-west-1/test_data/v7.tar.gz</Value></Attribute></Item><Item><Name>v6</Name><Attribute><Name>id</Name><Value>v6</Value></Attribute><Attribute><Name>encrypted</Name><Value>false</Value></Attribute><Attribute><Name>built_at</Name><Value>2013-05-24T22:34:42Z</Value></Attribute><Attribute><Name>bucket_prefix</Name><Value>heirloom-integration-tests</Value></Attribute><Attribute><Name>built_by</Name><Value>dvaughn1@sdgl114414452</Value></Attribute><Attribute><Name>us-west-1-s3-url</Name><Value>s3://heirloom-integration-tests-us-west-1/test_data/v6.tar.gz</Value></Attribute><Attribute><Name>us-west-1-http-url</Name><Value>http://s3-us-west-1.amazonaws.com/heirloom-integration-tests-us-west-1/test_data/v6.tar.gz</Value></Attribute><Attribute><Name>us-west-1-https-url</Name><Value>https://s3-us-west-1.amazonaws.com/heirloom-integration-tests-us-west-1/test_data/v6.tar.gz</Value></Attribute><Attribute><Name>preserve</Name><Value>true</Value></Attribute></Item><Item><Name>v5</Name><Attribute><Name>id</Name><Value>v5</Value></Attribute><Attribute><Name>encrypted</Name><Value>false</Value></Attribute><Attribute><Name>built_at</Name><Value>2013-05-24T22:34:37Z</Value></Attribute><Attribute><Name>bucket_prefix</Name><Value>heirloom-integration-tests</Value></Attribute><Attribute><Name>built_by</Name><Value>dvaughn1@sdgl114414452</Value></Attribute><Attribute><Name>us-west-1-s3-url</Name><Value>s3://heirloom-integration-tests-us-west-1/test_data/v5.tar.gz</Value></Attribute><Attribute><Name>us-west-1-http-url</Name><Value>http://s3-us-west-1.amazonaws.com/heirloom-integration-tests-us-west-1/test_data/v5.tar.gz</Value></Attribute><Attribute><Name>us-west-1-https-url</Name><Value>https://s3-us-west-1.amazonaws.com/heirloom-integration-tests-us-west-1/test_data/v5.tar.gz</Value></Attribute></Item><Item><Name>v4</Name><Attribute><Name>id</Name><Value>v4</Value></Attribute><Attribute><Name>encrypted</Name><Value>false</Value></Attribute><Attribute><Name>built_at</Name><Value>2013-05-24T22:34:31Z</Value></Attribute><Attribute><Name>bucket_prefix</Name><Value>heirloom-integration-tests</Value></Attribute><Attribute><Name>built_by</Name><Value>dvaughn1@sdgl114414452</Value></Attribute><Attribute><Name>us-west-1-s3-url</Name><Value>s3://heirloom-integration-tests-us-west-1/test_data/v4.tar.gz</Value></Attribute><Attribute><Name>us-west-1-http-url</Name><Value>http://s3-us-west-1.amazonaws.com/heirloom-integration-tests-us-west-1/test_data/v4.tar.gz</Value></Attribute><Attribute><Name>us-west-1-https-url</Name><Value>https://s3-us-west-1.amazonaws.com/heirloom-integration-tests-us-west-1/test_data/v4.tar.gz</Value></Attribute></Item><Item><Name>v3</Name><Attribute><Name>id</Name><Value>v3</Value></Attribute><Attribute><Name>encrypted</Name><Value>false</Value></Attribute><Attribute><Name>built_at</Name><Value>2013-05-24T22:34:23Z</Value></Attribute><Attribute><Name>bucket_prefix</Name><Value>heirloom-integration-tests</Value></Attribute><Attribute><Name>built_by</Name><Value>dvaughn1@sdgl114414452</Value></Attribute><Attribute><Name>us-west-1-s3-url</Name><Value>s3://heirloom-integration-tests-us-west-1/test_data/v3.tar.gz</Value></Attribute><Attribute><Name>us-west-1-http-url</Name><Value>http://s3-us-west-1.amazonaws.com/heirloom-integration-tests-us-west-1/test_data/v3.tar.gz</Value></Attribute><Attribute><Name>us-west-1-https-url</Name><Value>https://s3-us-west-1.amazonaws.com/heirloom-integration-tests-us-west-1/test_data/v3.tar.gz</Value></Attribute><Attribute><Name>preserve</Name><Value>true</Value></Attribute></Item><Item><Name>v2</Name><Attribute><Name>id</Name><Value>v2</Value></Attribute><Attribute><Name>encrypted</Name><Value>false</Value></Attribute><Attribute><Name>built_at</Name><Value>2013-05-24T22:34:18Z</Value></Attribute><Attribute><Name>bucket_prefix</Name><Value>heirloom-integration-tests</Value></Attribute><Attribute><Name>built_by</Name><Value>dvaughn1@sdgl114414452</Value></Attribute><Attribute><Name>us-west-1-s3-url</Name><Value>s3://heirloom-integration-tests-us-west-1/test_data/v2.tar.gz</Value></Attribute><Attribute><Name>us-west-1-http-url</Name><Value>http://s3-us-west-1.amazonaws.com/heirloom-integration-tests-us-west-1/test_data/v2.tar.gz</Value></Attribute><Attribute><Name>us-west-1-https-url</Name><Value>https://s3-us-west-1.amazonaws.com/heirloom-integration-tests-us-west-1/test_data/v2.tar.gz</Value></Attribute></Item><Item><Name>v1</Name><Attribute><Name>id</Name><Value>v1</Value></Attribute><Attribute><Name>encrypted</Name><Value>false</Value></Attribute><Attribute><Name>built_at</Name><Value>2013-05-24T22:34:12Z</Value></Attribute><Attribute><Name>bucket_prefix</Name><Value>heirloom-integration-tests</Value></Attribute><Attribute><Name>built_by</Name><Value>dvaughn1@sdgl114414452</Value></Attribute><Attribute><Name>us-west-1-s3-url</Name><Value>s3://heirloom-integration-tests-us-west-1/test_data/v1.tar.gz</Value></Attribute><Attribute><Name>us-west-1-http-url</Name><Value>http://s3-us-west-1.amazonaws.com/heirloom-integration-tests-us-west-1/test_data/v1.tar.gz</Value></Attribute><Attribute><Name>us-west-1-https-url</Name><Value>https://s3-us-west-1.amazonaws.com/heirloom-integration-tests-us-west-1/test_data/v1.tar.gz</Value></Attribute></Item></SelectResult><ResponseMetadata><RequestId>0d13cc39-73eb-4b2b-c277-9b73bbcd3471</RequestId><BoxUsage>0.0000868648</BoxUsage></ResponseMetadata></SelectResponse>'
79
+ http_version:
80
+ recorded_at: Fri, 24 May 2013 22:59:43 GMT
81
+ recorded_with: VCR 2.5.0