amazon_sdb 0.5.5 → 0.6.0
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/lib/amazon_sdb.rb +1 -1
- data/lib/amazon_sdb/base.rb +29 -9
- data/lib/amazon_sdb/exceptions.rb +37 -5
- data/test/test_amazon_base.rb +2 -2
- data/test/test_exceptions.rb +152 -0
- data/test/test_sdb_harness.rb +3 -1
- metadata +6 -5
data/History.txt
CHANGED
data/lib/amazon_sdb.rb
CHANGED
data/lib/amazon_sdb/base.rb
CHANGED
@@ -76,12 +76,27 @@ module Amazon
|
|
76
76
|
errnode = hpricot.at('//Errors/Error')
|
77
77
|
return unless errnode
|
78
78
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
79
|
+
code = errnode.at('Code').innerText
|
80
|
+
msg = "#{code}: #{errnode.at('Message').innerText}"
|
81
|
+
|
82
|
+
if AUTH_ERROR_CODES.include? code
|
83
|
+
raise AuthError, msg
|
84
|
+
elsif ACCESS_ERROR_CODES.include? code
|
85
|
+
raise AccessError, msg
|
86
|
+
elsif PARAMETER_ERROR_CODES.include? code
|
87
|
+
raise ParameterError, msg
|
88
|
+
elsif QUERY_ERROR_CODES.include? code
|
89
|
+
raise QuerySyntaxError, msg
|
90
|
+
elsif LIMIT_ERROR_CODES.include? code
|
91
|
+
raise LimitError, msg
|
92
|
+
elsif REQUEST_ERROR_CODES.include? code
|
93
|
+
raise RequestError, msg
|
94
|
+
elsif SERVER_ERROR_CODES.include? code
|
95
|
+
raise ServerError, msg
|
96
|
+
elsif TIMEOUT_ERROR_CODES.include? code
|
97
|
+
raise TimeoutError, msg
|
98
|
+
elsif VERSION_ERROR_CODES.include? code
|
99
|
+
raise VersionError, msg
|
85
100
|
else
|
86
101
|
raise UnknownError, msg
|
87
102
|
end
|
@@ -129,11 +144,16 @@ module Amazon
|
|
129
144
|
url = BASE_PATH + '?' + cgi_encode(options)
|
130
145
|
|
131
146
|
# puts "Requesting #{url}" #if $DEBUG
|
132
|
-
|
133
|
-
|
147
|
+
begin
|
148
|
+
open(url) do |f|
|
149
|
+
h = Hpricot.XML(f)
|
134
150
|
|
151
|
+
raise_errors h
|
152
|
+
yield h if block_given?
|
153
|
+
end
|
154
|
+
rescue OpenURI::HTTPError => e
|
155
|
+
h = Hpricot.XML(e.io.read)
|
135
156
|
raise_errors h
|
136
|
-
yield h if block_given?
|
137
157
|
end
|
138
158
|
end
|
139
159
|
|
@@ -1,18 +1,50 @@
|
|
1
1
|
module Amazon
|
2
2
|
module SDB
|
3
|
-
class
|
3
|
+
class Error < ::StandardError
|
4
4
|
end
|
5
5
|
|
6
|
-
|
6
|
+
ACCESS_ERROR_CODES = %w{AccessFailure}
|
7
|
+
class AccessError < Error
|
7
8
|
end
|
8
9
|
|
9
|
-
|
10
|
+
AUTH_ERROR_CODES = %w{AuthFailure AuthMissingFailure InvalidHTTPAuthHeader OptInRequired}
|
11
|
+
class AuthError < Error
|
10
12
|
end
|
11
13
|
|
12
|
-
|
14
|
+
PARAMETER_ERROR_CODES = %w(InvalidAction InvalidNextToken InvalidParameterError
|
15
|
+
InvalidParameterCombination InvalidParameterValue MissingAction MissingParameter NoSuchDomain
|
16
|
+
)
|
17
|
+
class ParameterError < Error
|
13
18
|
end
|
14
19
|
|
15
|
-
|
20
|
+
QUERY_ERROR_CODES = %w{InvalidNumberPredicates InvalidNumberValueTests InvalidQueryExpression}
|
21
|
+
class QuerySyntaxError < Error
|
22
|
+
end
|
23
|
+
|
24
|
+
LIMIT_ERROR_CODES = %w{NumberDomainsExceeded NumberDomainAttributesExceeded NumberDomainBytesExceeded NumberDomainBytesExceeeded URITooLong}
|
25
|
+
class LimitError < Error
|
26
|
+
end
|
27
|
+
|
28
|
+
SERVER_ERROR_CODES = %w{InternalError ServiceOverload ServiceUnavailable}
|
29
|
+
class ServerError < Error
|
30
|
+
end
|
31
|
+
|
32
|
+
class UnknownError < Error
|
33
|
+
end
|
34
|
+
|
35
|
+
REQUEST_ERROR_CODES = %w{InvalidHttpRequest InvalidSOAPRequest InvalidURI InvalidService UnsupportedHttpVerb}
|
36
|
+
class RequestError < Error
|
37
|
+
end
|
38
|
+
|
39
|
+
TIMEOUT_ERROR_CODES = %w{RequestExpired RequestTimeout RequestThrottled}
|
40
|
+
class TimeoutError < Error
|
41
|
+
end
|
42
|
+
|
43
|
+
VERSION_ERROR_CODES = %w{FeatureDeprecated NoSuchVersion NotYetImplemented}
|
44
|
+
class VersionError < Error
|
45
|
+
end
|
46
|
+
|
47
|
+
class RecordNotFoundError < Error
|
16
48
|
end
|
17
49
|
end
|
18
50
|
end
|
data/test/test_amazon_base.rb
CHANGED
@@ -115,14 +115,14 @@ class TestAmazonBase < Test::Unit::TestCase
|
|
115
115
|
def test_create_domain_invalid_param
|
116
116
|
@sdb.responses << error_response('InvalidParameterValue', 'Value (X) for parameter DomainName is invalid.')
|
117
117
|
|
118
|
-
assert_raise(Amazon::SDB::
|
118
|
+
assert_raise(Amazon::SDB::ParameterError) { @sdb.create_domain('(X)') }
|
119
119
|
assert_equal 1, @sdb.uris.length
|
120
120
|
end
|
121
121
|
|
122
122
|
def test_create_domain_limit_error
|
123
123
|
@sdb.responses << error_response('NumberDomainsExceeded', 'Domain Limit reached')
|
124
124
|
|
125
|
-
assert_raise(Amazon::SDB::
|
125
|
+
assert_raise(Amazon::SDB::LimitError) { @sdb.create_domain('foo') }
|
126
126
|
end
|
127
127
|
|
128
128
|
def test_delete_domain
|
@@ -0,0 +1,152 @@
|
|
1
|
+
require 'test_sdb_harness'
|
2
|
+
|
3
|
+
class TestException < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@sdb = Amazon::SDB::Base.new 'API_KEY', 'SECRET_KEY'
|
6
|
+
end
|
7
|
+
|
8
|
+
def assert_err(code, exception_class)
|
9
|
+
@sdb.responses << error_response(code)
|
10
|
+
assert_raise(exception_class) { @sdb.domains }
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_access_failure
|
14
|
+
assert_err('AccessFailure', Amazon::SDB::AccessError)
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_auth_failure
|
18
|
+
assert_err('AuthFailure', Amazon::SDB::AuthError)
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_auth_missing
|
22
|
+
assert_err('AuthMissingFailure', Amazon::SDB::AuthError)
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_deprecated
|
26
|
+
assert_err('FeatureDeprecated', Amazon::SDB::VersionError)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_internal_error
|
30
|
+
assert_err('InternalError', Amazon::SDB::ServerError)
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_invalid_action
|
34
|
+
assert_err('InvalidAction', Amazon::SDB::ParameterError)
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_invalid_http_auth_header
|
38
|
+
assert_err('InvalidHTTPAuthHeader', Amazon::SDB::AuthError)
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_invalid_http_request
|
42
|
+
assert_err('InvalidHttpRequest', Amazon::SDB::RequestError)
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_invalid_param_value
|
46
|
+
assert_err('InvalidParameterValue', Amazon::SDB::ParameterError)
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_invalid_next_token
|
50
|
+
assert_err('InvalidNextToken', Amazon::SDB::ParameterError)
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_invalid_num_predicates
|
54
|
+
assert_err('InvalidNumberPredicates', Amazon::SDB::QuerySyntaxError)
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_invalid_number_value_tests
|
58
|
+
assert_err('InvalidNumberValueTests', Amazon::SDB::QuerySyntaxError)
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_invalid_parameter_combo
|
62
|
+
assert_err('InvalidParameterCombination', Amazon::SDB::ParameterError)
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_invalid_parameter_value
|
66
|
+
assert_err('InvalidParameterValue', Amazon::SDB::ParameterError)
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_invalid_query_expr
|
70
|
+
assert_err('InvalidQueryExpression', Amazon::SDB::QuerySyntaxError)
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_invalid_response_groups
|
74
|
+
assert_err('InvalidResponseGroups', Amazon::SDB::UnknownError)
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_invalid_service
|
78
|
+
assert_err('InvalidService', Amazon::SDB::RequestError)
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_soap_request
|
82
|
+
assert_err('InvalidSOAPRequest', Amazon::SDB::RequestError)
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_invalid_uri
|
86
|
+
assert_err('InvalidURI', Amazon::SDB::RequestError)
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_missing_action
|
90
|
+
assert_err('MissingAction', Amazon::SDB::ParameterError)
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_missing_parameter
|
94
|
+
assert_err('MissingParameter', Amazon::SDB::ParameterError)
|
95
|
+
end
|
96
|
+
|
97
|
+
def test_no_such_domain
|
98
|
+
assert_err('NoSuchDomain', Amazon::SDB::ParameterError)
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_no_such_version
|
102
|
+
assert_err('NoSuchVersion', Amazon::SDB::VersionError)
|
103
|
+
end
|
104
|
+
|
105
|
+
def test_not_yet_implemented
|
106
|
+
assert_err('NotYetImplemented', Amazon::SDB::VersionError)
|
107
|
+
end
|
108
|
+
|
109
|
+
def test_num_domains_exceeded
|
110
|
+
assert_err('NumberDomainsExceeded', Amazon::SDB::LimitError)
|
111
|
+
end
|
112
|
+
|
113
|
+
def test_num_domain_attributes_exceed
|
114
|
+
assert_err('NumberDomainAttributesExceeded', Amazon::SDB::LimitError)
|
115
|
+
end
|
116
|
+
|
117
|
+
def test_num_domain_bytes_exceed
|
118
|
+
assert_err('NumberDomainBytesExceeded', Amazon::SDB::LimitError)
|
119
|
+
end
|
120
|
+
|
121
|
+
def test_num_item_attrs_exceed
|
122
|
+
assert_err('NumberDomainBytesExceeded', Amazon::SDB::LimitError)
|
123
|
+
end
|
124
|
+
|
125
|
+
def test_request_expired
|
126
|
+
assert_err('RequestExpired', Amazon::SDB::TimeoutError)
|
127
|
+
end
|
128
|
+
|
129
|
+
def test_request_timeout
|
130
|
+
assert_err('RequestTimeout', Amazon::SDB::TimeoutError)
|
131
|
+
end
|
132
|
+
|
133
|
+
def test_request_throttle
|
134
|
+
assert_err('RequestThrottled', Amazon::SDB::TimeoutError)
|
135
|
+
end
|
136
|
+
|
137
|
+
def test_service_overload
|
138
|
+
assert_err('ServiceOverload', Amazon::SDB::ServerError)
|
139
|
+
end
|
140
|
+
|
141
|
+
def test_service_unavailable
|
142
|
+
assert_err('ServiceUnavailable', Amazon::SDB::ServerError)
|
143
|
+
end
|
144
|
+
|
145
|
+
def test_unsupported_http_verb
|
146
|
+
assert_err('UnsupportedHttpVerb', Amazon::SDB::RequestError)
|
147
|
+
end
|
148
|
+
|
149
|
+
def test_uri_too_long
|
150
|
+
assert_err('URITooLong', Amazon::SDB::LimitError)
|
151
|
+
end
|
152
|
+
end
|
data/test/test_sdb_harness.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: amazon_sdb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
platform:
|
4
|
+
version: 0.6.0
|
5
|
+
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jacob Harris
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2007-12-
|
12
|
+
date: 2007-12-28 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -28,7 +28,7 @@ dependencies:
|
|
28
28
|
requirements:
|
29
29
|
- - ">="
|
30
30
|
- !ruby/object:Gem::Version
|
31
|
-
version: 1.
|
31
|
+
version: 1.4.0
|
32
32
|
version:
|
33
33
|
description: A ruby wrapper to Amazon's sdb service
|
34
34
|
email: harrisj@nytimes.com
|
@@ -79,12 +79,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
79
79
|
requirements: []
|
80
80
|
|
81
81
|
rubyforge_project: nytimes
|
82
|
-
rubygems_version: 0.
|
82
|
+
rubygems_version: 1.0.0
|
83
83
|
signing_key:
|
84
84
|
specification_version: 2
|
85
85
|
summary: A ruby wrapper to Amazon's sdb service
|
86
86
|
test_files:
|
87
87
|
- test/test_amazon_base.rb
|
88
88
|
- test/test_amazon_domain.rb
|
89
|
+
- test/test_exceptions.rb
|
89
90
|
- test/test_multimap.rb
|
90
91
|
- test/test_sdb_harness.rb
|