amazon_sdb 0.6.5 → 0.6.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,8 @@
1
+ == 0.6.7 / 2008-01-26
2
+ * 2 major enhancements
3
+ * removed stupid bug I added by accident
4
+ * domains report correct box usage
5
+
1
6
  == 0.6.5 / 2008-01-15
2
7
  * 3 major enhancements
3
8
  * New usage tracking via the box_usage method
@@ -9,6 +9,7 @@ lib/amazon_sdb/item.rb
9
9
  lib/amazon_sdb/multimap.rb
10
10
  lib/amazon_sdb/resultset.rb
11
11
  lib/amazon_sdb/exceptions.rb
12
+ lib/amazon_sdb/usage.rb
12
13
  test/test_amazon_base.rb
13
14
  test/test_amazon_domain.rb
14
15
  test/test_sdb_harness.rb
@@ -34,7 +34,7 @@ require 'amazon_sdb/usage'
34
34
 
35
35
  module Amazon
36
36
  module SDB
37
- VERSION = '0.6.5'
37
+ VERSION = '0.6.7'
38
38
  end
39
39
  end
40
40
 
@@ -16,7 +16,6 @@ module Amazon
16
16
  @access_key = aws_access_key
17
17
  @secret_key = aws_secret_key
18
18
  @usage = Usage.new
19
- raise @usage
20
19
  end
21
20
 
22
21
  ##
@@ -81,7 +80,7 @@ module Amazon
81
80
  options[:NextToken] = nextToken unless nextToken.nil?
82
81
 
83
82
  sdb_query(options) do |h|
84
- h.search('//DomainName').each {|e| domains << Domain.new(@access_key, @secret_key, e.innerText)}
83
+ h.search('//DomainName').each {|e| domains << Domain.new(self, e.innerText)}
85
84
  mt = h.at('//NextToken')
86
85
  if mt
87
86
  nextToken = mt.innerText
@@ -98,7 +97,7 @@ module Amazon
98
97
  # Returns a domain object for SimpleDB. Assumes the domain already exists, so a ParameterError (NoSuchDomain) might occur if it's not there. This
99
98
  # method is useful for getting a domain object without having to incur the operational costs of querying all domains.
100
99
  def domain(name)
101
- Domain.new(@access_key, @secret_key, name)
100
+ Domain.new(self, name)
102
101
  end
103
102
 
104
103
  ##
@@ -1,3 +1,5 @@
1
+ require 'forwardable'
2
+
1
3
  module Amazon
2
4
  module SDB
3
5
 
@@ -9,16 +11,20 @@ module Amazon
9
11
  # - 256 total attribute name-value pairs per item
10
12
  # - 250 million attributes per domain
11
13
  # - 10 GB of total user data storage per domain
12
- class Domain < Base
14
+ class Domain
15
+ extend Forwardable
16
+
13
17
  attr_reader :name
14
18
 
15
19
  ##
16
20
  # Creates a new Domain object.
17
- def initialize(aws_access_key, aws_secret_key, name)
18
- super(aws_access_key, aws_secret_key)
21
+ def initialize(base, name)
22
+ @base = base
19
23
  @name = name
20
24
  end
21
25
 
26
+ def_delegator :@base, :sdb_query
27
+
22
28
  ##
23
29
  # Sets attributes for a given key in the domain. If there are no attributes supplied, it creates an empty set.
24
30
  # Takes the following arguments:
@@ -1,3 +1,5 @@
1
+ require 'delegate'
2
+
1
3
  module Amazon
2
4
  module SDB
3
5
 
@@ -6,16 +8,16 @@ module Amazon
6
8
  # a set of Items plus an operation to see if there is another set to be retrieved
7
9
  # and to load it on demand. When Amazon sees fit to add total results or other metadata
8
10
  # for queries that will also be included here.
9
- class ResultSet
10
- include Enumerable
11
+ class ResultSet < DelegateClass(Array)
11
12
  attr_reader :items
12
13
 
13
- def initialize(domain, items, more_token = nil)
14
+ def initialize(domain, items, next_token = nil)
14
15
  @domain = domain
15
16
  @items = items
16
- @more_token = more_token
17
+ super(@items)
18
+ @next_token = next_token
17
19
  end
18
-
20
+
19
21
  ##
20
22
  # Returns true if there is another result set to be loaded
21
23
  def more_items?
@@ -25,6 +27,11 @@ module Amazon
25
27
  ##
26
28
  # Not implemented yet
27
29
  def load_next!
30
+ if @more_token.nil?
31
+ @items = []
32
+ else
33
+ @items = @domain.query(:next_token => @next_token)
34
+ end
28
35
  end
29
36
 
30
37
  ##
@@ -32,14 +39,6 @@ module Amazon
32
39
  def keys
33
40
  @items.map {|i| i.key }
34
41
  end
35
-
36
- ##
37
- # Support method for Enumerable. Iterates through the items in this set (NOT all the matching results for a query)
38
- def each
39
- @items.each do |i|
40
- yield i
41
- end
42
- end
43
42
  end
44
43
  end
45
44
  end
@@ -0,0 +1,25 @@
1
+ module Amazon
2
+ module SDB
3
+ ##
4
+ # A class for accumulating usage data returned from Amazon requests. Returned by Base#usage
5
+ class Usage
6
+ attr_reader :box_usage
7
+
8
+ def initialize
9
+ reset!
10
+ end
11
+
12
+ def add_usage(value)
13
+ @box_usage += value
14
+ end
15
+
16
+ def reset!
17
+ @box_usage = 0.0
18
+ end
19
+
20
+ def <<(value)
21
+ @box_usage += value
22
+ end
23
+ end
24
+ end
25
+ end
@@ -24,12 +24,12 @@ class TestAmazonBase < Test::Unit::TestCase
24
24
  def test_cgi_encode
25
25
  options = {'foo' => 'bar'}
26
26
 
27
- assert_equal 'foo=bar', @sdb.cgi_encode(options)
27
+ assert_equal 'foo=bar', @sdb.send(:cgi_encode, options)
28
28
  end
29
29
 
30
30
  def test_cgi_encode_array
31
31
  options = {"foo" => ["bar", "baz"]}
32
- assert_equal 'foo=bar&foo=baz', @sdb.cgi_encode(options)
32
+ assert_equal 'foo=bar&foo=baz', @sdb.send(:cgi_encode, options)
33
33
  end
34
34
 
35
35
  def test_domains
@@ -30,7 +30,8 @@ EOF
30
30
 
31
31
  class TestAmazonDomain < Test::Unit::TestCase
32
32
  def setup
33
- @domain = Amazon::SDB::Domain.new 'API_KEY', 'SECRET_KEY', 'testdb'
33
+ @sdb = Amazon::SDB::Base.new 'API_KEY', 'SECRET_KEY'
34
+ @domain = @sdb.domain('testdb')
34
35
  @attr_hash = {"foo" => "bar", "baz" => "quux"}
35
36
  end
36
37
 
@@ -2,7 +2,8 @@ require "test_sdb_harness"
2
2
 
3
3
  class TestItem < Test::Unit::TestCase
4
4
  def setup
5
- @domain = Amazon::SDB::Domain.new 'API_KEY', 'SECRET_KEY', 'testdb'
5
+ @base = Amazon::SDB::Base.new 'API_KEY', 'SECRET_KEY'
6
+ @domain = @base.domain 'testdb'
6
7
  @key = 'TEST_ITEM'
7
8
  @multimap = Amazon::SDB::Multimap.new({"foo" => "bar", "baz" => "quux"})
8
9
 
@@ -0,0 +1,30 @@
1
+ require "test_sdb_harness"
2
+
3
+ class TestItem < Test::Unit::TestCase
4
+ def setup
5
+ @base = Amazon::SDB::Base.new 'API_KEY', 'SECRET_KEY'
6
+ @domain = @base.domain 'testdb'
7
+ # @key = 'TEST_ITEM'
8
+ # @multimap = Amazon::SDB::Multimap.new({"foo" => "bar", "baz" => "quux"})
9
+ #
10
+ # @empty_item = Amazon::SDB::Item.new(@domain, @key)
11
+ # @item = Amazon::SDB::Item.new(@domain, @key, @multimap)
12
+ end
13
+
14
+ def test_more_items_true
15
+ end
16
+
17
+ def test_more_items_false
18
+ end
19
+
20
+ def test_load_next_more_results
21
+ end
22
+
23
+ def test_load_next_no_more
24
+
25
+ end
26
+
27
+ def test_keys
28
+
29
+ end
30
+ end
@@ -2,26 +2,40 @@ require "test/unit"
2
2
  require 'cgi'
3
3
  require "amazon_sdb"
4
4
 
5
- # little mock override of open for base (technique from Eric Hodel)
6
- class Amazon::SDB::Base
7
- attr_accessor :uris, :responses
8
-
9
- def initialize(aws_access_key, aws_secret_key)
10
- @access_key = aws_access_key
11
- @secret_key = aws_secret_key
12
- @usage = Amazon::SDB::Usage.new
13
- @responses = []
14
- @uris = []
15
- end
16
-
17
- def open(uri)
18
- @uris << uri
19
-
20
- if @responses.size == 0
21
- fail "Unexpected HTTP request #{uri}"
5
+ module Amazon
6
+ module SDB
7
+ # little mock override of open for base (technique from Eric Hodel)
8
+ class Base
9
+ attr_accessor :uris, :responses
10
+
11
+ def initialize(aws_access_key, aws_secret_key)
12
+ @access_key = aws_access_key
13
+ @secret_key = aws_secret_key
14
+ @usage = Amazon::SDB::Usage.new
15
+ @responses = []
16
+ @uris = []
17
+ end
18
+
19
+ def open(uri)
20
+ @uris << uri
21
+
22
+ if @responses.size == 0
23
+ fail "Unexpected HTTP request #{uri}"
24
+ end
25
+
26
+ yield StringIO.new(@responses.shift)
27
+ end
22
28
  end
23
29
 
24
- yield StringIO.new(@responses.shift)
30
+ class Domain
31
+ def uris
32
+ @base.uris
33
+ end
34
+
35
+ def responses
36
+ @base.responses
37
+ end
38
+ end
25
39
  end
26
40
  end
27
41
 
@@ -43,11 +57,13 @@ class Test::Unit::TestCase
43
57
  </Response>"
44
58
  end
45
59
 
60
+ GENERIC_RESPONSE_USAGE = "0.0000219907"
61
+
46
62
  def generic_response(method)
47
63
  "<#{method}Response xmlns=\"http://sdb.amazonaws.com/doc/2007-11-07\">
48
64
  <ResponseMetadata>
49
65
  <RequestId>490206ce-8292-456c-a00f-61b335eb202b</RequestId>
50
- <BoxUsage>0.0000219907</BoxUsage>
66
+ <BoxUsage>#{GENERIC_RESPONSE_USAGE}</BoxUsage>
51
67
  </ResponseMetadata>
52
68
  </#{method}Response>"
53
69
  end
@@ -110,4 +110,13 @@ class TestUsage < Test::Unit::TestCase
110
110
 
111
111
  assert_in_delta(0.26, usage, 2 ** -20)
112
112
  end
113
+
114
+ def test_usage_is_updated_from_domain
115
+ d = @sdb.domain('testdb')
116
+ d.responses << generic_response('DeleteAttributes')
117
+
118
+ d.delete_attributes 'key'
119
+
120
+ assert_in_delta(GENERIC_RESPONSE_USAGE, @sdb.box_usage, 2 ** -20)
121
+ end
113
122
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: amazon_sdb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.5
4
+ version: 0.6.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jacob Harris
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-01-14 00:00:00 -05:00
12
+ date: 2008-01-26 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -52,6 +52,7 @@ files:
52
52
  - lib/amazon_sdb/multimap.rb
53
53
  - lib/amazon_sdb/resultset.rb
54
54
  - lib/amazon_sdb/exceptions.rb
55
+ - lib/amazon_sdb/usage.rb
55
56
  - test/test_amazon_base.rb
56
57
  - test/test_amazon_domain.rb
57
58
  - test/test_sdb_harness.rb
@@ -89,5 +90,6 @@ test_files:
89
90
  - test/test_exceptions.rb
90
91
  - test/test_item.rb
91
92
  - test/test_multimap.rb
93
+ - test/test_resultset.rb
92
94
  - test/test_sdb_harness.rb
93
95
  - test/test_usage.rb