public
Description: Amazon Web Services SimpleDB for Ruby
Homepage: http://rubyforge.org/projects/aws-sdb/
Clone URL: git://github.com/dysinger/aws-sdb.git
Search Repo:
remove dependency on needle - emberassing leftover from Java-days
dysinger (author)
Mon Apr 14 22:24:02 -0700 2008
commit  fadd2c4ea14d92bf2643e41c1f097018713fee75
tree    e32ef5628dde235f35040b6401a8647dd1402733
parent  5683a7efd414e2dbf178bb85cd739fa0cb382d4d
...
7
8
9
10
 
11
12
13
...
7
8
9
 
10
11
12
13
0
@@ -7,7 +7,7 @@
0
 gem_spec = Gem::Specification.new do |s|
0
   s.name = "aws-sdb"
0
   s.rubyforge_project = s.name
0
- s.version = "0.1.4"
0
+ s.version = "0.2.0"
0
   s.platform = Gem::Platform::RUBY
0
   s.has_rdoc = true
0
   s.extra_rdoc_files = ["README", "LICENSE"]
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
...
 
 
 
 
 
1
2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0
@@ -1,24 +1,3 @@
0
-# require needle
0
-require 'rubygems'
0
-require 'needle'
0
-
0
-# require modules
0
 require 'aws_sdb/error'
0
 require 'aws_sdb/service'
0
-
0
-module AwsSdb
0
-
0
- def self.container
0
- @@container ||= Needle::Registry.new(
0
- :logs => { :filename => "aws_sdb.log" }
0
- ).namespace!(:aws_sdb) do
0
-
0
- service(:model => :multiton) do | c, p, access, secret |
0
- Service.new(c.log_for(p), access, secret)
0
- end
0
-
0
- end
0
- end
0
-
0
-end
...
1
2
3
4
 
5
6
7
 
8
9
10
11
12
13
 
14
15
16
17
18
...
24
25
26
27
 
28
29
 
30
31
32
 
33
34
35
...
38
39
40
41
 
42
...
1
2
3
 
4
5
6
 
7
8
9
10
11
12
 
13
14
15
16
17
18
...
24
25
26
 
27
28
 
29
30
31
 
32
33
34
35
...
38
39
40
 
41
42
0
@@ -1,16 +1,16 @@
0
 module AwsSdb
0
 
0
   class Error < RuntimeError ; end
0
-
0
+
0
   class RequestError < Error
0
     attr_reader :request_id
0
-
0
+
0
     def initialize(message, request_id=nil)
0
       super(message)
0
       @request_id = request_id
0
     end
0
   end
0
-
0
+
0
   class InvalidDomainNameError < RequestError ; end
0
   class InvalidParameterValueError < RequestError ; end
0
   class InvalidNextTokenError < RequestError ; end
0
0
0
@@ -24,12 +24,12 @@
0
   class NumberDomainBytesExceededError < RequestError ; end
0
   class NumberItemAttributesExceededError < RequestError ; end
0
   class RequestTimeoutError < RequestError ; end
0
-
0
+
0
   class FeatureDeprecatedError < RequestError ; end
0
-
0
+
0
   class ConnectionError < Error
0
     attr_reader :response
0
-
0
+
0
     def initialize(response)
0
       super(
0
         "#{response.code} \
0
@@ -38,6 +38,6 @@
0
       @response = response
0
     end
0
   end
0
-
0
+
0
 end
...
 
1
2
3
4
5
6
7
8
9
10
11
12
13
 
14
15
16
17
18
19
20
21
22
23
24
 
 
 
 
 
25
26
 
27
28
29
 
30
31
 
32
33
34
35
 
36
37
38
 
39
40
 
41
42
43
44
45
 
46
47
48
 
49
50
51
52
53
 
 
54
55
56
 
 
57
58
 
59
60
 
61
62
 
63
64
65
66
 
67
68
69
 
70
71
 
72
73
74
 
 
75
76
77
78
79
 
80
81
82
83
84
...
87
88
89
90
 
91
92
93
94
95
 
 
 
 
96
97
98
 
 
99
100
101
102
103
104
...
107
108
109
110
111
112
113
 
 
 
 
114
115
116
 
 
117
118
119
120
121
122
123
124
 
 
 
125
126
127
128
129
 
130
131
132
...
142
143
144
145
 
146
147
148
...
156
157
158
159
 
160
161
162
...
1
2
3
4
5
 
6
7
 
8
9
10
11
 
12
13
 
 
 
 
 
 
 
 
 
 
14
15
16
17
18
19
 
20
21
22
 
23
24
 
25
26
27
28
 
29
30
31
 
32
33
 
34
35
36
37
38
 
39
40
41
 
42
43
44
45
 
 
46
47
48
 
 
49
50
51
 
52
53
 
54
55
 
56
57
58
59
 
60
61
62
 
63
64
 
65
66
 
 
67
68
69
70
71
72
 
73
74
75
76
77
78
...
81
82
83
 
84
85
 
 
 
 
86
87
88
89
90
 
 
91
92
93
94
95
96
97
98
...
101
102
103
 
 
 
 
104
105
106
107
108
 
 
109
110
111
112
113
114
115
 
 
 
116
117
118
119
120
121
122
 
123
124
125
126
...
136
137
138
 
139
140
141
142
...
150
151
152
 
153
154
155
156
0
@@ -1,82 +1,76 @@
0
+require 'logger'
0
 require 'time'
0
 require 'cgi'
0
 require 'uri'
0
 require 'net/http'
0
-
0
 require 'base64'
0
 require 'openssl'
0
-
0
 require 'rexml/document'
0
 require 'rexml/xpath'
0
 
0
 module AwsSdb
0
-
0
+
0
   class Service
0
- def initialize(
0
- logger,
0
- access_key_id,
0
- secret_access_key,
0
- url = "http://sds.amazonaws.com"
0
- )
0
- @logger = logger
0
- @access_key_id = access_key_id
0
- @secret_access_key = secret_access_key
0
- @base_url = url
0
+ def initialize(options={})
0
+ @access_key_id = options[:access_key_id] || ENV['AMAZON_ACCESS_KEY_ID']
0
+ @secret_access_key = options[:secret_access_key] || ENV['AMAZON_SECRET_ACCESS_KEY']
0
+ @base_url = options[:url] || 'http://sds.amazonaws.com'
0
+ @logger = options[:logger] || Logger.new("aws_sdb.log")
0
     end
0
-
0
+
0
     def list_domains(max = nil, token = nil)
0
       params = { 'Action' => 'ListDomains' }
0
- params['NextToken'] =
0
+ params['NextToken'] =
0
         token unless token.nil? || token.empty?
0
- params['MaxNumberOfDomains'] =
0
+ params['MaxNumberOfDomains'] =
0
         max.to_s unless max.nil? || max.to_i == 0
0
       doc = call(:get, params)
0
       results = []
0
- REXML::XPath.each(doc, '//DomainName/text()') do |domain|
0
+ REXML::XPath.each(doc, '//DomainName/text()') do |domain|
0
         results << domain.to_s
0
       end
0
- return results, REXML::XPath.first(doc, '//NextToken/text()').to_s
0
+ return results, REXML::XPath.first(doc, '//NextToken/text()').to_s
0
     end
0
-
0
+
0
     def create_domain(domain)
0
       call(:post, { 'Action' => 'CreateDomain', 'DomainName'=> domain.to_s })
0
       nil
0
     end
0
-
0
+
0
     def delete_domain(domain)
0
       call(
0
- :delete,
0
+ :delete,
0
         { 'Action' => 'DeleteDomain', 'DomainName' => domain.to_s }
0
       )
0
       nil
0
- end
0
-
0
+ end
0
+
0
     def query(domain, query, max = nil, token = nil)
0
- params = {
0
- 'Action' => 'Query',
0
+ params = {
0
+ 'Action' => 'Query',
0
         'QueryExpression' => query,
0
- 'DomainName' => domain.to_s
0
+ 'DomainName' => domain.to_s
0
       }
0
- params['NextToken'] =
0
+ params['NextToken'] =
0
         token unless token.nil? || token.empty?
0
- params['MaxNumberOfItems'] =
0
+ params['MaxNumberOfItems'] =
0
         max.to_s unless max.nil? || max.to_i == 0
0
       doc = call(:get, params)
0
       results = []
0
- REXML::XPath.each(doc, '//ItemName/text()') do |item|
0
+ REXML::XPath.each(doc, '//ItemName/text()') do |item|
0
         results << item.to_s
0
       end
0
- return results, REXML::XPath.first(doc, '//NextToken/text()').to_s
0
+ return results, REXML::XPath.first(doc, '//NextToken/text()').to_s
0
     end
0
-
0
+
0
     def put_attributes(domain, item, attributes, replace = true)
0
- params = {
0
- 'Action' => 'PutAttributes',
0
+ params = {
0
+ 'Action' => 'PutAttributes',
0
         'DomainName' => domain.to_s,
0
         'ItemName' => item.to_s
0
       }
0
       count = 0
0
- attributes.each do | key, values |
0
+ attributes.each do | key, values |
0
         ([]<<values).flatten.each do |value|
0
           params["Attribute.#{count}.Name"] = key.to_s
0
           params["Attribute.#{count}.Value"] = value.to_s
0
0
0
@@ -87,15 +81,15 @@
0
       call(:put, params)
0
       nil
0
     end
0
-
0
+
0
     def get_attributes(domain, item)
0
- doc = call(
0
- :get,
0
- {
0
- 'Action' => 'GetAttributes',
0
+ doc = call(
0
+ :get,
0
+ {
0
+ 'Action' => 'GetAttributes',
0
           'DomainName' => domain.to_s,
0
- 'ItemName' => item.to_s
0
- }
0
+ 'ItemName' => item.to_s
0
+ }
0
       )
0
       attributes = {}
0
       REXML::XPath.each(doc, "//Attribute") do |attr|
0
0
0
0
@@ -107,26 +101,26 @@
0
     end
0
 
0
     def delete_attributes(domain, item)
0
- call(
0
- :delete,
0
- {
0
- 'Action' => 'DeleteAttributes',
0
+ call(
0
+ :delete,
0
+ {
0
+ 'Action' => 'DeleteAttributes',
0
           'DomainName' => domain.to_s,
0
- 'ItemName' => item.to_s
0
- }
0
+ 'ItemName' => item.to_s
0
+ }
0
       )
0
       nil
0
     end
0
 
0
     protected
0
-
0
- def call(method, params)
0
- params.merge!( {
0
+
0
+ def call(method, params)
0
+ params.merge!( {
0
           'Version' => '2007-11-07',
0
           'SignatureVersion' => '1',
0
           'AWSAccessKeyId' => @access_key_id,
0
           'Timestamp' => Time.now.gmtime.iso8601
0
- }
0
+ }
0
       )
0
       data = ''
0
       query = []
0
@@ -142,7 +136,7 @@
0
       url = "#{@base_url}?#{query}"
0
       uri = URI.parse(url)
0
       @logger.debug("#{url}") if @logger
0
- response =
0
+ response =
0
         Net::HTTP.new(uri.host, uri.port).send_request(method, url)
0
       @logger.debug("#{response.code}\n#{response.body}") if @logger
0
       raise(ConnectionError.new(response)) unless (200..400).include?(
0
@@ -156,7 +150,7 @@
0
         ).new(
0
           error.get_elements('Message')[0].text,
0
           doc.get_elements('*/RequestID')[0].text
0
- )
0
+ )
0
       ) unless error.nil?
0
       doc
0
     end
...
11
12
13
14
15
16
17
18
 
19
20
21
22
...
66
67
68
69
 
70
71
72
73
74
75
76
 
77
78
79
80
81
82
83
84
85
86
87
88
89
90
...
82
83
84
85
 
86
87
88
89
 
 
90
91
92
93
 
 
94
95
 
96
97
98
99
100
 
 
101
102
103
 
104
105
106
107
108
109
110
111
 
 
112
113
114
 
115
116
117
118
119
 
 
120
121
122
 
123
124
125
126
127
128
129
130
 
 
131
132
133
 
134
135
136
...
146
147
148
149
150
151
152
 
153
154
155
156
...
179
180
181
182
 
183
184
185
 
 
186
187
188
189
190
...
192
193
194
195
196
197
198
 
199
200
201
202
203
204
205
 
206
207
208
209
 
210
211
212
213
214
...
230
231
232
233
 
234
235
236
237
 
 
238
239
240
241
242
243
244
245
246
247
 
248
249
250
251
...
256
257
258
259
 
260
261
262
263
 
264
265
266
267
...
276
277
278
279
 
280
281
 
282
283
284
285
...
319
320
321
322
 
323
324
 
325
326
327
...
341
342
343
344
 
345
346
347
...
360
361
362
363
 
364
365
366
...
368
369
370
371
 
372
373
374
...
11
12
13
 
 
 
 
 
14
15
16
17
18
...
62
63
64
 
65
66
67
68
69
70
71
 
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
...
78
79
80
 
81
82
83
 
 
84
85
86
87
 
 
88
89
90
 
91
92
93
94
 
 
95
96
97
98
 
99
100
101
102
103
104
105
 
 
106
107
108
109
 
110
111
112
113
 
 
114
115
116
117
 
118
119
120
121
122
123
124
 
 
125
126
127
128
 
129
130
131
132
...
142
143
144
 
 
 
 
145
146
147
148
149
...
172
173
174
 
175
176
 
 
177
178
179
180
181
182
183
...
185
186
187
 
 
 
 
188
189
190
191
192
193
194
 
195
196
197
198
 
199
200
201
202
203
204
...
220
221
222
 
223
224
225
 
 
226
227
228
229
230
231
232
233
 
 
 
 
234
235
236
237
238
...
243
244
245
 
246
247
248
249
 
250
251
252
253
254
...
263
264
265
 
266
267
 
268
269
270
271
272
...
306
307
308
 
309
310
 
311
312
313
314
...
328
329
330
 
331
332
333
334
...
347
348
349
 
350
351
352
353
...
355
356
357
 
358
359
360
361
0
@@ -11,11 +11,7 @@
0
 
0
 describe Service, "when creating a new domain" do
0
   before(:all) do
0
- @logger = AwsSdb.container.logs.get(:rspec)
0
- @service = AwsSdb.container.service(
0
- ENV['AMAZON_ACCESS_KEY_ID'],
0
- ENV['AMAZON_SECRET_ACCESS_KEY']
0
- )
0
+ @service = AwsSdb::Service.new
0
     @domain = "test-#{UUID.random_create.to_s}"
0
     # domains = @service.list_domains[0]
0
     # domains.each do |d|
0
0
@@ -66,14 +62,14 @@
0
     http.stub!(:send_request).and_return(resp)
0
     Net::HTTP.stub!(:new).and_return(http)
0
   end
0
-
0
+
0
   it "should not raise an error if a valid new domain name is given" do
0
     stub_success
0
     lambda {
0
       @service.create_domain("test-#{UUID.random_create.to_s}")
0
     }.should_not raise_error
0
   end
0
-
0
+
0
   it "should not raise an error if the domain name already exists" do
0
     stub_success
0
     domain = "test-#{UUID.random_create.to_s}"
0
0
0
0
0
0
0
0
0
0
0
0
@@ -82,55 +78,55 @@
0
       @service.create_domain(domain)
0
     }.should_not raise_error
0
   end
0
-
0
+
0
   it "should raise an error if an a nil or '' domain name is given" do
0
     stub_error(
0
- 400,
0
- :InvalidParameterValue,
0
+ 400,
0
+ :InvalidParameterValue,
0
       "Value () for parameter DomainName is invalid."
0
     )
0
- lambda {
0
- @service.create_domain('')
0
+ lambda {
0
+ @service.create_domain('')
0
     }.should raise_error(InvalidParameterValueError)
0
- lambda {
0
+ lambda {
0
       @service.create_domain(nil)
0
     }.should raise_error(InvalidParameterValueError)
0
     stub_error(
0
- 400,
0
- :InvalidParameterValue,
0
+ 400,
0
+ :InvalidParameterValue,
0
       "Value ( ) for parameter DomainName is invalid."
0
     )
0
- lambda {
0
+ lambda {
0
       @service.create_domain(' ')
0
     }.should raise_error(InvalidParameterValueError)
0
   end
0
 
0
   it "should raise an error if the domain name length is < 3 or > 255" do
0
     stub_error(
0
- 400,
0
- :InvalidParameterValue,
0
+ 400,
0
+ :InvalidParameterValue,
0
       "Value (xx) for parameter DomainName is invalid."
0
     )
0
- lambda {
0
+ lambda {
0
       @service.create_domain('xx')
0
     }.should raise_error(InvalidParameterValueError)
0
     stub_error(
0
- 400,
0
- :InvalidParameterValue,
0
+ 400,
0
+ :InvalidParameterValue,
0
       "Value (#{:x.to_s*256}) for parameter DomainName is invalid."
0
     )
0
- lambda {
0
+ lambda {
0
       @service.create_domain('x'*256)
0
     }.should raise_error(InvalidParameterValueError)
0
   end
0
 
0
   it "should only accept domain names with a-z, A-Z, 0-9, '_', '-', and '.' " do
0
     stub_error(
0
- 400,
0
- :InvalidParameterValue,
0
+ 400,
0
+ :InvalidParameterValue,
0
       "Value (@$^*()) for parameter DomainName is invalid."
0
     )
0
- lambda {
0
+ lambda {
0
       @service.create_domain('@$^*()')
0
     }.should raise_error(InvalidParameterValueError)
0
   end
0
@@ -146,10 +142,7 @@
0
 
0
 describe Service, "when listing domains" do
0
   before(:all) do
0
- @service = AwsSdb.container.service(
0
- ENV['AMAZON_ACCESS_KEY_ID'],
0
- ENV['AMAZON_SECRET_ACCESS_KEY']
0
- )
0
+ @service = AwsSdb::Service.new
0
     @domain = "test-#{UUID.random_create.to_s}"
0
     # @service.list_domains[0].each do |d|
0
     # @service.delete_domain(d) if d =~ /^test/
0
0
@@ -179,10 +172,10 @@
0
     http = mock(Net::HTTP)
0
     http.stub!(:send_request).and_return(resp)
0
     Net::HTTP.stub!(:new).and_return(http)
0
-
0
+
0
     result = nil
0
- lambda { result = @service.list_domains[0] }.should_not raise_error
0
- result.should_not be_nil
0
+ lambda { result = @service.list_domains[0] }.should_not raise_error
0
+ result.should_not be_nil
0
     result.should_not be_empty
0
     result.size.should == 1
0
     result.should_not be_nil
0
0
0
@@ -192,21 +185,18 @@
0
 
0
 describe Service, "when deleting domains" do
0
   before(:all) do
0
- @service = AwsSdb.container.service(
0
- ENV['AMAZON_ACCESS_KEY_ID'],
0
- ENV['AMAZON_SECRET_ACCESS_KEY']
0
- )
0
+ @service = AwsSdb::Service.new
0
     @domain = "test-#{UUID.random_create.to_s}"
0
     # @service.list_domains[0].each do |d|
0
     # @service.delete_domain(d) if d =~ /^test/
0
     # end
0
     # @service.create_domain(@domain)
0
   end
0
-
0
+
0
   after do
0
     # @service.delete_domain(@domain)
0
   end
0
-
0
+
0
   def stub_success
0
     resp = mock(Net::HTTPResponse)
0
     resp.stub!(:code).and_return("200")
0
0
0
@@ -230,21 +220,18 @@
0
     stub_success
0
     lambda { @service.delete_domain(@domain) }.should_not raise_error
0
   end
0
-
0
+
0
   it "should not raise an error trying to delete a non-existing domain" do
0
     stub_success
0
- lambda {
0
- @service.delete_domain(UUID.random_create.to_s)
0
+ lambda {
0
+ @service.delete_domain(UUID.random_create.to_s)
0
     }.should_not raise_error
0
   end
0
 end
0
 
0
 describe Service, "when managing items" do
0
   before(:all) do
0
- @service = AwsSdb.container.service(
0
- ENV['AMAZON_ACCESS_KEY_ID'],
0
- ENV['AMAZON_SECRET_ACCESS_KEY']
0
- )
0
+ @service = AwsSdb::Service.new
0
     @domain = "test-#{UUID.random_create.to_s}"
0
     # @service.list_domains[0].each do |d|
0
     # @service.delete_domain(d) if d =~ /^test/
0
0
@@ -256,11 +243,11 @@
0
       :answer => [ true, 'testing123', 4.2, 42, 420 ]
0
     }
0
   end
0
-
0
+
0
   after(:all) do
0
     # @service.delete_domain(@domain)
0
   end
0
-
0
+
0
   def stub_put
0
     resp = mock(Net::HTTPResponse)
0
     resp.stub!(:code).and_return("200")
0
0
@@ -276,9 +263,9 @@
0
     )
0
     http = mock(Net::HTTP)
0
     http.stub!(:send_request).and_return(resp)
0
- Net::HTTP.stub!(:new).and_return(http)
0
+ Net::HTTP.stub!(:new).and_return(http)
0
   end
0
-
0
+
0
   def stub_get
0
     resp = mock(Net::HTTPResponse)
0
     resp.stub!(:code).and_return("200")
0
0
@@ -319,9 +306,9 @@
0
     )
0
     http = mock(Net::HTTP)
0
     http.stub!(:send_request).and_return(resp)
0
- Net::HTTP.stub!(:new).and_return(http)
0
+ Net::HTTP.stub!(:new).and_return(http)
0
   end
0
-
0
+
0
   def stub_query
0
     resp = mock(Net::HTTPResponse)
0
     resp.stub!(:code).and_return("200")
0
@@ -341,7 +328,7 @@
0
     http.stub!(:send_request).and_return(resp)
0
     Net::HTTP.stub!(:new).and_return(http)
0
   end
0
-
0
+
0
   def stub_delete
0
     resp = mock(Net::HTTPResponse)
0
     resp.stub!(:code).and_return("200")
0
@@ -360,7 +347,7 @@
0
     http.stub!(:send_request).and_return(resp)
0
     Net::HTTP.stub!(:new).and_return(http)
0
   end
0
-
0
+
0
   it "should be able to put attributes" do
0
     stub_put
0
     lambda {
0
@@ -368,7 +355,7 @@
0
     }.should_not raise_error
0
   end
0
 
0
- it "should be able to get attributes" do
0
+ it "should be able to get attributes" do
0
     stub_get
0
     result = nil
0
     lambda {

Comments

  • grempe Wed Apr 16 17:28:04 -0700 2008
    This new version breaks compatibility with the aws_sdb_proxy. The following error gets thrown (downgrading to 0.1.4 resolves the problem). Perhaps you can work with the author of that software to resolve the compatibility issues prior to release of your new version?
    ~/src/git/lcd-aws-sdb-proxy (master)\ > rake aws_sdb:start_proxy_in_foreground—trace
    (in /Users/glenn/src/git/lcd-aws-sdb-proxy)
    • Invoke aws_sdb:start_proxy_in_foreground (first_time)
    • Invoke environment (first_time)
    • Execute environment
    • Execute aws_sdb:start_proxy_in_foreground
      rake aborted!
      wrong number of arguments (3 for 1)
      /Users/glenn/src/git/lcd-aws-sdb-proxy/vendor/plugins/aws_sdb_proxy/lib/aws_sdb_proxy/server.rb:27:in `initialize’
      /Users/glenn/src/git/lcd-aws-sdb-proxy/vendor/plugins/aws_sdb_proxy/lib/aws_sdb_proxy/server.rb:27:in `new’
      /Users/glenn/src/git/lcd-aws-sdb-proxy/vendor/plugins/aws_sdb_proxy/lib/aws_sdb_proxy/server.rb:27
      /Library/Ruby/Site/1.8/rubygems/custom_require.rb:27:in `gem_original_require’
      /Library/Ruby/Site/1.8/rubygems/custom_require.rb:27:in `require’
      /Library/Ruby/Gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:496:in `require’
      /Library/Ruby/Gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:342:in `new_constants_in’
      /Library/Ruby/Gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:496:in `require’
      /Users/glenn/src/git/lcd-aws-sdb-proxy/vendor/plugins/aws_sdb_proxy/tasks/aws_sdb_proxy_tasks.rake:22
      /Library/Ruby/Gems/1.8/gems/rake-0.8.1/lib/rake.rb:546:in `call’
      /Library/Ruby/Gems/1.8/gems/rake-0.8.1/lib/rake.rb:546:in `execute’
      /Library/Ruby/Gems/1.8/gems/rake-0.8.1/lib/rake.rb:541:in `each’
      /Library/Ruby/Gems/1.8/gems/rake-0.8.1/lib/rake.rb:541:in `execute’
      /Library/Ruby/Gems/1.8/gems/rake-0.8.1/lib/rake.rb:508:in `invoke_with_call_chain’
      /Library/Ruby/Gems/1.8/gems/rake-0.8.1/lib/rake.rb:501:in `synchronize’
      /Library/Ruby/Gems/1.8/gems/rake-0.8.1/lib/rake.rb:501:in `invoke_with_call_chain’
      /Library/Ruby/Gems/1.8/gems/rake-0.8.1/lib/rake.rb:494:in `invoke’
      /Library/Ruby/Gems/1.8/gems/rake-0.8.1/lib/rake.rb:1931:in `invoke_task’
      /Library/Ruby/Gems/1.8/gems/rake-0.8.1/lib/rake.rb:1909:in `top_level’
      /Library/Ruby/Gems/1.8/gems/rake-0.8.1/lib/rake.rb:1909:in `each’
      /Library/Ruby/Gems/1.8/gems/rake-0.8.1/lib/rake.rb:1909:in `top_level’
      /Library/Ruby/Gems/1.8/gems/rake-0.8.1/lib/rake.rb:1948:in `standard_exception_handling’
      /Library/Ruby/Gems/1.8/gems/rake-0.8.1/lib/rake.rb:1903:in `top_level’
      /Library/Ruby/Gems/1.8/gems/rake-0.8.1/lib/rake.rb:1881:in `run’
      /Library/Ruby/Gems/1.8/gems/rake-0.8.1/lib/rake.rb:1948:in `standard_exception_handling’
      /Library/Ruby/Gems/1.8/gems/rake-0.8.1/lib/rake.rb:1878:in `run’
      /Library/Ruby/Gems/1.8/gems/rake-0.8.1/bin/rake:31
      /usr/bin/rake:19:in `load’
      /usr/bin/rake:19
  • dysinger Wed Apr 16 23:52:52 -0700 2008

    Is your rails plugin working off of my master ? Let me patch it for you. One sec.
    I just changed the constructor to not use needle. It was not needed.
    Even the author doesn’t like it http://weblog.jamisbuck.org/2007/7/29/net-ssh-revisited

  • dysinger Thu Apr 17 00:00:23 -0700 2008

    Sorry got confused there for a minute. I will work with the author to get this resolved. I didn’t release this as a gem yet as working with the author of SimplerDB and AwsSdbProxy was on my list.