awful 0.0.29 → 0.0.30
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/awful.rb +14 -1
- data/lib/awful/dynamodb.rb +29 -16
- data/lib/awful/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: de50bfb59c215fedd6732d5db9d20ababda674c4
|
4
|
+
data.tar.gz: fee0153a6bbc75fa1982ce51c3bc9411c7346da2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ff2e36715ba4dcd740de1a62314caf8dbe5e9a5df943bcb429711e87491485ae6293d83409a6c011c244cd4f8163519bd48b1b6a3feb18541522b9995b4d8086
|
7
|
+
data.tar.gz: e5bb40be4a4a6bbcb247735764c1b934bfaec3b0634debf8e8eda1a853e250c8047a528c9e172986c121147e8f2746a30b27db93aa379de62a8b43be13cd473a
|
data/lib/awful.rb
CHANGED
@@ -34,10 +34,23 @@ module Awful
|
|
34
34
|
|
35
35
|
## to use dynamodb-local, set DYNAMO_ENDPOINT or DYNAMODB_ENDPOINT to e.g. http://localhost:8000
|
36
36
|
def dynamodb
|
37
|
-
options = {
|
37
|
+
options = {endpoint: ENV['DYNAMO_ENDPOINT'] || ENV['DYNAMODB_ENDPOINT']}.reject { |_,v| v.nil? }
|
38
38
|
@dynamodb ||= Aws::DynamoDB::Client.new(options)
|
39
39
|
end
|
40
40
|
|
41
|
+
## dynamodb client with parameter conversion turned off,
|
42
|
+
## for getting result as Aws::Plugins::Protocols::JsonRpc;
|
43
|
+
## see https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DataFormat.html;
|
44
|
+
## client method calls need simple attributes in requests also (strings not symbols, etc)
|
45
|
+
def dynamodb_simple
|
46
|
+
options = {
|
47
|
+
simple_attributes: false,
|
48
|
+
simple_json: true,
|
49
|
+
endpoint: ENV['DYNAMO_ENDPOINT'] || ENV['DYNAMODB_ENDPOINT'],
|
50
|
+
}.reject { |_,v| v.nil? }
|
51
|
+
@dynamodb_simple ||= Aws::DynamoDB::Client.new(options)
|
52
|
+
end
|
53
|
+
|
41
54
|
def s3
|
42
55
|
@s3 ||= Aws::S3::Client.new
|
43
56
|
end
|
data/lib/awful/dynamodb.rb
CHANGED
@@ -27,31 +27,31 @@ module Awful
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
-
desc 'scan NAME', 'scan table with NAME'
|
31
|
-
def scan(name, start_key = nil)
|
32
|
-
r = dynamodb.scan(table_name: name, exclusive_start_key: start_key) #.items.tap{ |x| p x.count }.tap do |table|
|
33
|
-
puts r.items.map { |item| JSON.generate(item) }.join("\n")
|
34
|
-
if r.last_evaluated_key # recurse if more data to get
|
35
|
-
scan(name, r.last_evaluated_key)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
30
|
desc 'create_table NAME', 'create table with NAME'
|
40
31
|
def create_table(name, file = nil)
|
41
32
|
opt = load_cfg(options, file)
|
42
33
|
params = only_keys_matching(opt, %i[attribute_definitions key_schema])
|
43
34
|
params[:table_name] = name
|
44
35
|
params[:provisioned_throughput] = only_keys_matching(opt[:provisioned_throughput], %i[read_capacity_units write_capacity_units])
|
45
|
-
|
46
|
-
|
36
|
+
|
37
|
+
## scrub unwanted keys from LSIs
|
38
|
+
if opt.has_key?(:local_secondary_indexes)
|
39
|
+
params[:local_secondary_indexes] = opt[:local_secondary_indexes].map do |lsi|
|
40
|
+
only_keys_matching(lsi, %i[index_name key_schema projection])
|
41
|
+
end
|
47
42
|
end
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
43
|
+
|
44
|
+
## scrub unwanted keys from GSIs
|
45
|
+
if opt.has_key?(:global_secondary_indexes)
|
46
|
+
params[:global_secondary_indexes] = opt[:global_secondary_indexes].map do |gsi|
|
47
|
+
only_keys_matching(gsi, %i[index_name key_schema projection]).tap do |g|
|
48
|
+
if gsi[:provisioned_throughput]
|
49
|
+
g[:provisioned_throughput] = only_keys_matching(gsi[:provisioned_throughput], %i[read_capacity_units write_capacity_units])
|
50
|
+
end
|
52
51
|
end
|
53
52
|
end
|
54
53
|
end
|
54
|
+
|
55
55
|
dynamodb.create_table(params)
|
56
56
|
end
|
57
57
|
|
@@ -66,12 +66,25 @@ module Awful
|
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
69
|
+
## uses simple_json to get Aws::Plugins::Protocols::JsonRpc output from scan;
|
70
|
+
## this also means request params need to be raw strings and not symbols, etc
|
71
|
+
desc 'scan NAME', 'scan table with NAME'
|
72
|
+
def scan(name, exclusive_start_key = nil)
|
73
|
+
r = dynamodb_simple.scan('TableName' => name, 'ExclusiveStartKey' => exclusive_start_key)
|
74
|
+
puts r['Items'].map { |item| JSON.generate(item) }.join("\n")
|
75
|
+
|
76
|
+
## recurse if more data to get
|
77
|
+
if r.has_key?('LastEvaluatedKey')
|
78
|
+
scan(name, r['LastEvaluatedKey'])
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
69
82
|
desc 'put_items NAME', 'puts json items into the table with NAME'
|
70
83
|
def put_items(name, file = nil)
|
71
84
|
io = (file and File.open(file)) || ((not $stdin.tty?) and $stdin)
|
72
85
|
count = 0
|
73
86
|
io.each_line do |line|
|
74
|
-
|
87
|
+
dynamodb_simple.put_item('TableName' => name, 'Item' => JSON.parse(line))
|
75
88
|
count += 1
|
76
89
|
end
|
77
90
|
count.tap { |c| puts "put #{c} items" }
|
data/lib/awful/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: awful
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.30
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ric Lister
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-08-
|
11
|
+
date: 2015-08-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|