amazon_sdb 0.6.5 → 0.6.7

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.
@@ -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