sdbport 0.1.0 → 0.1.1
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/CHANGELOG +6 -0
- data/README.md +3 -8
- data/lib/sdbport/aws/simpledb.rb +15 -2
- data/lib/sdbport/domain/export.rb +1 -1
- data/lib/sdbport/domain/purge.rb +1 -1
- data/lib/sdbport/version.rb +1 -1
- data/spec/aws/simpledb_spec.rb +37 -1
- data/spec/domain/export_spec.rb +1 -1
- data/spec/domain/purge_spec.rb +1 -1
- metadata +9 -9
data/CHANGELOG
CHANGED
data/README.md
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
[](http://travis-ci.org/brettweavnet/sdbport)
|
2
|
+
|
1
3
|
# Sdbport
|
2
4
|
|
3
5
|
Sdbport exports & imports data from AWS SimpleDB domains. It can be used as a class or stand alone CLI.
|
@@ -27,12 +29,6 @@ Import into new domain:
|
|
27
29
|
sdbport import -a $AWS_ACCESS_KEY_ID -s $AWS_SECRET_ACCESS_KEY -r us-west-1 -n new-domain -i /tmp/test-domain-dump
|
28
30
|
```
|
29
31
|
|
30
|
-
Purge new domain:
|
31
|
-
|
32
|
-
```
|
33
|
-
sdbport purge -a $AWS_ACCESS_KEY_ID -s $AWS_SECRET_ACCESS_KEY -r us-west-1 -n new-domain
|
34
|
-
```
|
35
|
-
|
36
32
|
To list CLI subcommands:
|
37
33
|
|
38
34
|
```
|
@@ -47,8 +43,7 @@ sdbport export -h
|
|
47
43
|
|
48
44
|
## Known Limitations
|
49
45
|
|
50
|
-
*
|
51
|
-
* Single serialiazed process.
|
46
|
+
* Single serialiazed process for import. Need to switch to batch put attributes.
|
52
47
|
* Only supports importing into empty domain.
|
53
48
|
|
54
49
|
## Contributing
|
data/lib/sdbport/aws/simpledb.rb
CHANGED
@@ -22,8 +22,21 @@ module Sdbport
|
|
22
22
|
sdb.create_domain(domain) unless domain_exists?(domain)
|
23
23
|
end
|
24
24
|
|
25
|
-
def select(query)
|
26
|
-
sdb.select(query).body
|
25
|
+
def select(query, options = {})
|
26
|
+
sdb.select(query, options).body
|
27
|
+
end
|
28
|
+
|
29
|
+
def select_and_follow_tokens(query, options = {})
|
30
|
+
data = {}
|
31
|
+
next_token = nil
|
32
|
+
final_token = false
|
33
|
+
while true
|
34
|
+
options.merge! 'NextToken' => next_token
|
35
|
+
chunk = sdb.select(query, options).body
|
36
|
+
data.merge! chunk['Items']
|
37
|
+
next_token = chunk['NextToken']
|
38
|
+
return data unless next_token
|
39
|
+
end
|
27
40
|
end
|
28
41
|
|
29
42
|
def count(domain)
|
data/lib/sdbport/domain/purge.rb
CHANGED
@@ -12,7 +12,7 @@ module Sdbport
|
|
12
12
|
|
13
13
|
def purge
|
14
14
|
@logger.info "Purging #{@name} in #{@region}."
|
15
|
-
data = sdb.
|
15
|
+
data = sdb.select_and_follow_tokens "select * from `#{@name}`"
|
16
16
|
data.keys.each do |key|
|
17
17
|
@logger.debug "Deleting #{key}."
|
18
18
|
sdb.delete @name, key
|
data/lib/sdbport/version.rb
CHANGED
data/spec/aws/simpledb_spec.rb
CHANGED
@@ -4,7 +4,7 @@ describe Sdbport do
|
|
4
4
|
|
5
5
|
before do
|
6
6
|
@fog_mock = mock 'fog'
|
7
|
-
@body_stub =
|
7
|
+
@body_stub = stub 'body'
|
8
8
|
Fog::AWS::SimpleDB.should_receive(:new).
|
9
9
|
with(:aws_access_key_id => 'the-key',
|
10
10
|
:aws_secret_access_key => 'the-secret',
|
@@ -22,6 +22,42 @@ describe Sdbport do
|
|
22
22
|
@sdb.domains.should == ['domain1']
|
23
23
|
end
|
24
24
|
|
25
|
+
it "should perform select query given" do
|
26
|
+
@fog_mock.should_receive(:select).
|
27
|
+
with('select * from name', 'ConsistentRead' => true).
|
28
|
+
and_return @body_stub
|
29
|
+
@body_stub.stub :body => 'thegoods'
|
30
|
+
@sdb.select('select * from name', 'ConsistentRead' => true).
|
31
|
+
should == 'thegoods'
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should perform select query given and next tokens" do
|
35
|
+
body_stub0 = stub 'body0', :body => { 'Items' =>
|
36
|
+
{ 'id1' => 'val1' },
|
37
|
+
'NextToken' => '1'
|
38
|
+
}
|
39
|
+
body_stub1 = stub 'body1', :body => { 'Items' =>
|
40
|
+
{ 'id2' => 'val2' },
|
41
|
+
'NextToken' => '2'
|
42
|
+
}
|
43
|
+
body_stub2 = stub 'body2', :body => { 'Items' =>
|
44
|
+
{ 'id3' => 'val3' }
|
45
|
+
}
|
46
|
+
@fog_mock.should_receive(:select).
|
47
|
+
with('select * from name', 'NextToken' => nil).
|
48
|
+
and_return body_stub0
|
49
|
+
@fog_mock.should_receive(:select).
|
50
|
+
with('select * from name', 'NextToken' => '1').
|
51
|
+
and_return body_stub1
|
52
|
+
@fog_mock.should_receive(:select).
|
53
|
+
with('select * from name', 'NextToken' => '2').
|
54
|
+
and_return body_stub2
|
55
|
+
@sdb.select_and_follow_tokens('select * from name').
|
56
|
+
should == { 'id1' => 'val1',
|
57
|
+
'id2' => 'val2',
|
58
|
+
'id3' => 'val3' }
|
59
|
+
end
|
60
|
+
|
25
61
|
it "should create a new domain when it does not exist" do
|
26
62
|
@fog_mock.stub :list_domains => @body_stub
|
27
63
|
@body_stub.stub :body => { 'Domains' => [] }
|
data/spec/domain/export_spec.rb
CHANGED
@@ -20,7 +20,7 @@ describe Sdbport do
|
|
20
20
|
'item2' =>
|
21
21
|
{ 'attribute' => [ 'different' ] }
|
22
22
|
}
|
23
|
-
@sdb_mock.should_receive(:
|
23
|
+
@sdb_mock.should_receive(:select_and_follow_tokens).
|
24
24
|
with('select * from `name`').
|
25
25
|
and_return data
|
26
26
|
@file_mock.should_receive(:write).with("[\"item1\",{\"attribute\":[\"value\"]}]")
|
data/spec/domain/purge_spec.rb
CHANGED
@@ -15,7 +15,7 @@ describe Sdbport do
|
|
15
15
|
result = { 'item1' =>
|
16
16
|
{ 'attribute' => [ 'value' ] }
|
17
17
|
}
|
18
|
-
@sdb_mock.should_receive(:
|
18
|
+
@sdb_mock.should_receive(:select_and_follow_tokens).
|
19
19
|
with('select * from `name`').
|
20
20
|
and_return result
|
21
21
|
@sdb_mock.should_receive(:delete).with 'name', 'item1'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sdbport
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-09-30 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &70237921138580 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70237921138580
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: fog
|
27
|
-
requirement: &
|
27
|
+
requirement: &70237921138140 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70237921138140
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: trollop
|
38
|
-
requirement: &
|
38
|
+
requirement: &70237921137660 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70237921137660
|
47
47
|
description: Import and export AWS SimpleDB domains.
|
48
48
|
email:
|
49
49
|
- brett@weav.net
|
@@ -96,7 +96,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
96
96
|
version: '0'
|
97
97
|
segments:
|
98
98
|
- 0
|
99
|
-
hash:
|
99
|
+
hash: -1634563892266774728
|
100
100
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
101
101
|
none: false
|
102
102
|
requirements:
|
@@ -105,7 +105,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
105
105
|
version: '0'
|
106
106
|
segments:
|
107
107
|
- 0
|
108
|
-
hash:
|
108
|
+
hash: -1634563892266774728
|
109
109
|
requirements: []
|
110
110
|
rubyforge_project:
|
111
111
|
rubygems_version: 1.8.16
|