heirloom 0.11.0 → 0.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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