awful 0.0.29 → 0.0.30
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.
- 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
|