sdbport 0.1.1 → 0.2.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/CHANGELOG +5 -0
- data/README.md +0 -1
- data/lib/sdbport/aws/simpledb.rb +2 -6
- data/lib/sdbport/cli/destroy.rb +38 -0
- data/lib/sdbport/cli/purge.rb +6 -6
- data/lib/sdbport/cli.rb +4 -1
- data/lib/sdbport/domain/destroy.rb +28 -0
- data/lib/sdbport/domain/import.rb +24 -7
- data/lib/sdbport/domain.rb +11 -2
- data/lib/sdbport/version.rb +1 -1
- data/spec/aws/simpledb_spec.rb +4 -11
- data/spec/domain/destroy_spec.rb +21 -0
- data/spec/domain/import_spec.rb +12 -4
- data/spec/domain_spec.rb +6 -0
- metadata +14 -10
data/CHANGELOG
CHANGED
data/README.md
CHANGED
data/lib/sdbport/aws/simpledb.rb
CHANGED
@@ -22,10 +22,6 @@ module Sdbport
|
|
22
22
|
sdb.create_domain(domain) unless domain_exists?(domain)
|
23
23
|
end
|
24
24
|
|
25
|
-
def select(query, options = {})
|
26
|
-
sdb.select(query, options).body
|
27
|
-
end
|
28
|
-
|
29
25
|
def select_and_follow_tokens(query, options = {})
|
30
26
|
data = {}
|
31
27
|
next_token = nil
|
@@ -48,8 +44,8 @@ module Sdbport
|
|
48
44
|
count(domain).zero?
|
49
45
|
end
|
50
46
|
|
51
|
-
def
|
52
|
-
sdb.
|
47
|
+
def batch_put_attributes(domain, attributes)
|
48
|
+
sdb.batch_put_attributes domain, attributes
|
53
49
|
end
|
54
50
|
|
55
51
|
def delete_domain(domain)
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Sdbport
|
2
|
+
class CLI
|
3
|
+
class Destroy
|
4
|
+
|
5
|
+
def destroy
|
6
|
+
opts = read_options
|
7
|
+
logger = SdbportLogger.new :log_level => opts[:level]
|
8
|
+
domain = Domain.new :name => opts[:name],
|
9
|
+
:region => opts[:region],
|
10
|
+
:access_key => opts[:access_key],
|
11
|
+
:secret_key => opts[:secret_key],
|
12
|
+
:logger => logger
|
13
|
+
domain.destroy
|
14
|
+
end
|
15
|
+
|
16
|
+
def read_options
|
17
|
+
Trollop::options do
|
18
|
+
version Sdbport::VERSION
|
19
|
+
banner <<-EOS
|
20
|
+
|
21
|
+
Destroy SimpleDB Domain
|
22
|
+
|
23
|
+
Usage:
|
24
|
+
|
25
|
+
sdbport destroy -a xxx -k yyy -r us-west-1 -n domain
|
26
|
+
|
27
|
+
EOS
|
28
|
+
opt :help, "Display Help"
|
29
|
+
opt :level, "Log Level", :type => :string, :default => 'info'
|
30
|
+
opt :name, "Simple DB Domain Name", :type => :string
|
31
|
+
opt :region, "AWS region", :type => :string
|
32
|
+
opt :access_key, "AWS Access Key ID", :type => :string
|
33
|
+
opt :secret_key, "AWS Secret Access Key", :type => :string
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/lib/sdbport/cli/purge.rb
CHANGED
@@ -5,12 +5,12 @@ module Sdbport
|
|
5
5
|
def purge
|
6
6
|
opts = read_options
|
7
7
|
logger = SdbportLogger.new :log_level => opts[:level]
|
8
|
-
domain = Domain.new :name
|
9
|
-
:region
|
10
|
-
:access_key
|
11
|
-
:secret_key
|
12
|
-
:logger
|
13
|
-
|
8
|
+
domain = Domain.new :name => opts[:name],
|
9
|
+
:region => opts[:region],
|
10
|
+
:access_key => opts[:access_key],
|
11
|
+
:secret_key => opts[:secret_key],
|
12
|
+
:logger => logger
|
13
|
+
domain.purge
|
14
14
|
end
|
15
15
|
|
16
16
|
def read_options
|
data/lib/sdbport/cli.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'trollop'
|
2
|
+
require 'sdbport/cli/destroy'
|
2
3
|
require 'sdbport/cli/export'
|
3
4
|
require 'sdbport/cli/import'
|
4
5
|
require 'sdbport/cli/purge'
|
@@ -11,6 +12,8 @@ module Sdbport
|
|
11
12
|
cmd = ARGV.shift
|
12
13
|
|
13
14
|
case cmd
|
15
|
+
when 'destroy'
|
16
|
+
CLI::Destroy.new.destroy
|
14
17
|
when 'export'
|
15
18
|
CLI::Export.new.export
|
16
19
|
when 'import'
|
@@ -21,7 +24,7 @@ module Sdbport
|
|
21
24
|
puts Sdbport::VERSION
|
22
25
|
else
|
23
26
|
puts "Unkown command: '#{cmd}'." unless cmd == '-h'
|
24
|
-
puts "sdbport [export|import|purge] OPTIONS"
|
27
|
+
puts "sdbport [destroy|export|import|purge] OPTIONS"
|
25
28
|
puts "Append -h for help on specific subcommand."
|
26
29
|
end
|
27
30
|
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Sdbport
|
2
|
+
class Domain
|
3
|
+
class Destroy
|
4
|
+
|
5
|
+
def initialize(args)
|
6
|
+
@name = args[:name]
|
7
|
+
@logger = args[:logger]
|
8
|
+
@access_key = args[:access_key]
|
9
|
+
@secret_key = args[:secret_key]
|
10
|
+
@region = args[:region]
|
11
|
+
end
|
12
|
+
|
13
|
+
def destroy
|
14
|
+
@logger.info "Destroying #{@name} in #{@region}."
|
15
|
+
sdb.delete_domain @name
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def sdb
|
21
|
+
@sdb ||= AWS::SimpleDB.new :access_key => @access_key,
|
22
|
+
:secret_key => @secret_key,
|
23
|
+
:region => @region
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -10,6 +10,7 @@ module Sdbport
|
|
10
10
|
@access_key = args[:access_key]
|
11
11
|
@secret_key = args[:secret_key]
|
12
12
|
@region = args[:region]
|
13
|
+
@buffer = {}
|
13
14
|
end
|
14
15
|
|
15
16
|
def import(input)
|
@@ -21,25 +22,37 @@ module Sdbport
|
|
21
22
|
|
22
23
|
file = File.open(input, 'r')
|
23
24
|
while (line = file.gets)
|
24
|
-
|
25
|
+
add_line_to_buffer line
|
26
|
+
write_buffer if buffer_full?
|
25
27
|
end
|
28
|
+
write_buffer unless buffer_empty?
|
26
29
|
true
|
27
30
|
end
|
28
31
|
|
29
32
|
private
|
30
33
|
|
31
|
-
def
|
32
|
-
sdb.create_domain_unless_present @name
|
33
|
-
end
|
34
|
-
|
35
|
-
def add_line(line)
|
34
|
+
def add_line_to_buffer(line)
|
36
35
|
line.chomp!
|
37
36
|
data = JSON.parse line
|
38
37
|
id = data.first
|
39
38
|
attributes = data.last
|
40
39
|
|
41
40
|
@logger.debug "Adding #{id} with attributes #{attributes.to_s}."
|
42
|
-
|
41
|
+
@buffer.merge!({ id => attributes })
|
42
|
+
end
|
43
|
+
|
44
|
+
def buffer_full?
|
45
|
+
@buffer.count > 24
|
46
|
+
end
|
47
|
+
|
48
|
+
def buffer_empty?
|
49
|
+
@buffer.count.zero?
|
50
|
+
end
|
51
|
+
|
52
|
+
def write_buffer
|
53
|
+
@logger.debug "Writing #{@buffer.count} entries to SimpleDB."
|
54
|
+
sdb.batch_put_attributes @name, @buffer
|
55
|
+
@buffer.clear
|
43
56
|
end
|
44
57
|
|
45
58
|
def ensure_domain_empty
|
@@ -51,6 +64,10 @@ module Sdbport
|
|
51
64
|
end
|
52
65
|
end
|
53
66
|
|
67
|
+
def create_domain
|
68
|
+
sdb.create_domain_unless_present @name
|
69
|
+
end
|
70
|
+
|
54
71
|
def sdb
|
55
72
|
@sdb ||= AWS::SimpleDB.new :access_key => @access_key,
|
56
73
|
:secret_key => @secret_key,
|
data/lib/sdbport/domain.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'sdbport/domain/destroy'
|
1
2
|
require 'sdbport/domain/export'
|
2
3
|
require 'sdbport/domain/import'
|
3
4
|
require 'sdbport/domain/purge'
|
@@ -21,16 +22,24 @@ module Sdbport
|
|
21
22
|
domain_purge.purge
|
22
23
|
end
|
23
24
|
|
25
|
+
def destroy
|
26
|
+
domain_destroy.destroy
|
27
|
+
end
|
28
|
+
|
24
29
|
private
|
25
30
|
|
26
|
-
def
|
27
|
-
@
|
31
|
+
def domain_destroy
|
32
|
+
@domain_destroy ||= Domain::Destroy.new @args
|
28
33
|
end
|
29
34
|
|
30
35
|
def domain_export
|
31
36
|
@domain_export ||= Domain::Export.new @args
|
32
37
|
end
|
33
38
|
|
39
|
+
def domain_import
|
40
|
+
@domain_import ||= Domain::Import.new @args
|
41
|
+
end
|
42
|
+
|
34
43
|
def domain_purge
|
35
44
|
@domain_purge ||= Domain::Purge.new @args
|
36
45
|
end
|
data/lib/sdbport/version.rb
CHANGED
data/spec/aws/simpledb_spec.rb
CHANGED
@@ -22,15 +22,6 @@ 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
25
|
it "should perform select query given and next tokens" do
|
35
26
|
body_stub0 = stub 'body0', :body => { 'Items' =>
|
36
27
|
{ 'id1' => 'val1' },
|
@@ -78,8 +69,10 @@ describe Sdbport do
|
|
78
69
|
end
|
79
70
|
|
80
71
|
it "should update the attributes for an item" do
|
81
|
-
@fog_mock.should_receive(:
|
82
|
-
|
72
|
+
@fog_mock.should_receive(:batch_put_attributes).with('domain', { 'item1' => { 'key1' => 'value1' },
|
73
|
+
'item2' => { 'key2' => 'value2' } })
|
74
|
+
@sdb.batch_put_attributes('domain', { 'item1' => { 'key1' => 'value1' },
|
75
|
+
'item2' => { 'key2' => 'value2' } })
|
83
76
|
end
|
84
77
|
|
85
78
|
context "testing counts" do
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Sdbport do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@logger_stub = logger_stub
|
7
|
+
@sdb_mock = sdb_mock
|
8
|
+
options = { :name => 'name',
|
9
|
+
:logger => @logger_stub,
|
10
|
+
:access_key => 'the-key',
|
11
|
+
:secret_key => 'the-secret',
|
12
|
+
:region => 'us-west-1' }
|
13
|
+
@destroy = Sdbport::Domain::Destroy.new options
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should delete the given domain" do
|
17
|
+
@sdb_mock.should_receive(:delete_domain)
|
18
|
+
@destroy.destroy
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
data/spec/domain/import_spec.rb
CHANGED
@@ -14,20 +14,28 @@ describe Sdbport do
|
|
14
14
|
|
15
15
|
context "when successful" do
|
16
16
|
it "should import from the given input" do
|
17
|
-
@
|
17
|
+
@line1 = '["itemA", {"key":["val1", "val2"]}]'
|
18
|
+
@line2 = '["itemB", {"key":["val3", "val4"]}]'
|
18
19
|
@sdb_mock.should_receive(:create_domain_unless_present).
|
19
20
|
with('name')
|
20
21
|
@sdb_mock.should_receive(:domain_empty?).with('name').
|
21
22
|
and_return true
|
22
23
|
File.should_receive(:open).with('/tmp/file', 'r').
|
23
24
|
and_return @file_mock
|
24
|
-
@file_mock.should_receive(:gets).and_return @
|
25
|
-
@
|
26
|
-
|
25
|
+
@file_mock.should_receive(:gets).and_return @line1
|
26
|
+
@file_mock.should_receive(:gets).and_return @line2
|
27
|
+
@sdb_mock.should_receive(:batch_put_attributes).
|
28
|
+
with("name", { "itemA" => {
|
29
|
+
"key" => ["val1", "val2"]
|
30
|
+
},
|
31
|
+
"itemB" => {
|
32
|
+
"key" => ["val3", "val4"]
|
33
|
+
} })
|
27
34
|
@file_mock.should_receive(:gets).and_return nil
|
28
35
|
@import.import('/tmp/file').should be_true
|
29
36
|
end
|
30
37
|
end
|
38
|
+
|
31
39
|
context "when unsuccessful" do
|
32
40
|
it "should return false if the domain is not empty" do
|
33
41
|
@sdb_mock.should_receive(:create_domain_unless_present).
|
data/spec/domain_spec.rb
CHANGED
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.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-10-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &70151522838520 !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: *70151522838520
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: fog
|
27
|
-
requirement: &
|
27
|
+
requirement: &70151522837360 !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: *70151522837360
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: trollop
|
38
|
-
requirement: &
|
38
|
+
requirement: &70151522807160 !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: *70151522807160
|
47
47
|
description: Import and export AWS SimpleDB domains.
|
48
48
|
email:
|
49
49
|
- brett@weav.net
|
@@ -65,10 +65,12 @@ files:
|
|
65
65
|
- lib/sdbport/aws.rb
|
66
66
|
- lib/sdbport/aws/simpledb.rb
|
67
67
|
- lib/sdbport/cli.rb
|
68
|
+
- lib/sdbport/cli/destroy.rb
|
68
69
|
- lib/sdbport/cli/export.rb
|
69
70
|
- lib/sdbport/cli/import.rb
|
70
71
|
- lib/sdbport/cli/purge.rb
|
71
72
|
- lib/sdbport/domain.rb
|
73
|
+
- lib/sdbport/domain/destroy.rb
|
72
74
|
- lib/sdbport/domain/export.rb
|
73
75
|
- lib/sdbport/domain/import.rb
|
74
76
|
- lib/sdbport/domain/purge.rb
|
@@ -76,6 +78,7 @@ files:
|
|
76
78
|
- lib/sdbport/version.rb
|
77
79
|
- sdbport.gemspec
|
78
80
|
- spec/aws/simpledb_spec.rb
|
81
|
+
- spec/domain/destroy_spec.rb
|
79
82
|
- spec/domain/export_spec.rb
|
80
83
|
- spec/domain/import_spec.rb
|
81
84
|
- spec/domain/purge_spec.rb
|
@@ -96,7 +99,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
96
99
|
version: '0'
|
97
100
|
segments:
|
98
101
|
- 0
|
99
|
-
hash:
|
102
|
+
hash: 3924510079821876667
|
100
103
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
101
104
|
none: false
|
102
105
|
requirements:
|
@@ -105,7 +108,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
105
108
|
version: '0'
|
106
109
|
segments:
|
107
110
|
- 0
|
108
|
-
hash:
|
111
|
+
hash: 3924510079821876667
|
109
112
|
requirements: []
|
110
113
|
rubyforge_project:
|
111
114
|
rubygems_version: 1.8.16
|
@@ -114,6 +117,7 @@ specification_version: 3
|
|
114
117
|
summary: Import and export AWS SimpleDB domains.
|
115
118
|
test_files:
|
116
119
|
- spec/aws/simpledb_spec.rb
|
120
|
+
- spec/domain/destroy_spec.rb
|
117
121
|
- spec/domain/export_spec.rb
|
118
122
|
- spec/domain/import_spec.rb
|
119
123
|
- spec/domain/purge_spec.rb
|