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.
- data/History.txt +5 -0
- data/Manifest.txt +1 -0
- data/lib/amazon_sdb.rb +1 -1
- data/lib/amazon_sdb/base.rb +2 -3
- data/lib/amazon_sdb/domain.rb +9 -3
- data/lib/amazon_sdb/resultset.rb +12 -13
- data/lib/amazon_sdb/usage.rb +25 -0
- data/test/test_amazon_base.rb +2 -2
- data/test/test_amazon_domain.rb +2 -1
- data/test/test_item.rb +2 -1
- data/test/test_resultset.rb +30 -0
- data/test/test_sdb_harness.rb +35 -19
- data/test/test_usage.rb +9 -0
- metadata +4 -2
data/History.txt
CHANGED
data/Manifest.txt
CHANGED
data/lib/amazon_sdb.rb
CHANGED
data/lib/amazon_sdb/base.rb
CHANGED
@@ -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(
|
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(
|
100
|
+
Domain.new(self, name)
|
102
101
|
end
|
103
102
|
|
104
103
|
##
|
data/lib/amazon_sdb/domain.rb
CHANGED
@@ -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
|
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(
|
18
|
-
|
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:
|
data/lib/amazon_sdb/resultset.rb
CHANGED
@@ -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,
|
14
|
+
def initialize(domain, items, next_token = nil)
|
14
15
|
@domain = domain
|
15
16
|
@items = items
|
16
|
-
@
|
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
|
data/test/test_amazon_base.rb
CHANGED
@@ -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
|
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
|
32
|
+
assert_equal 'foo=bar&foo=baz', @sdb.send(:cgi_encode, options)
|
33
33
|
end
|
34
34
|
|
35
35
|
def test_domains
|
data/test/test_amazon_domain.rb
CHANGED
@@ -30,7 +30,8 @@ EOF
|
|
30
30
|
|
31
31
|
class TestAmazonDomain < Test::Unit::TestCase
|
32
32
|
def setup
|
33
|
-
@
|
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
|
|
data/test/test_item.rb
CHANGED
@@ -2,7 +2,8 @@ require "test_sdb_harness"
|
|
2
2
|
|
3
3
|
class TestItem < Test::Unit::TestCase
|
4
4
|
def setup
|
5
|
-
@
|
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
|
data/test/test_sdb_harness.rb
CHANGED
@@ -2,26 +2,40 @@ require "test/unit"
|
|
2
2
|
require 'cgi'
|
3
3
|
require "amazon_sdb"
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
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
|
-
|
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
|
66
|
+
<BoxUsage>#{GENERIC_RESPONSE_USAGE}</BoxUsage>
|
51
67
|
</ResponseMetadata>
|
52
68
|
</#{method}Response>"
|
53
69
|
end
|
data/test/test_usage.rb
CHANGED
@@ -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.
|
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-
|
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
|