Class: Stax::Aws::DynamoDB

Inherits:
Sdk
  • Object
show all
Defined in:
lib/stax/aws/dynamodb.rb

Class Method Summary collapse

Methods inherited from Sdk

paginate

Class Method Details

.clientObject



9
10
11
# File 'lib/stax/aws/dynamodb.rb', line 9

def client
  @_client ||= ::Aws::DynamoDB::Client.new
end

.count(opt) ⇒ Object



60
61
62
63
64
65
66
# File 'lib/stax/aws/dynamodb.rb', line 60

def count(opt)
  total = 0
  do_scan(opt.merge(select: 'COUNT')) do |r|
    total += r.count
  end
  return total
end

.create_backup(table_name, backup_name) ⇒ Object



96
97
98
99
100
101
# File 'lib/stax/aws/dynamodb.rb', line 96

def create_backup(table_name, backup_name)
  client.create_backup(
    table_name:  table_name,
    backup_name: backup_name,
  ).backup_details
end

.do_scan(opt) ⇒ Object



42
43
44
45
46
47
48
49
50
# File 'lib/stax/aws/dynamodb.rb', line 42

def do_scan(opt)
  exclusive_start_key = nil
  loop do
    r = client.scan(opt.merge(exclusive_start_key: exclusive_start_key))
    yield r
    exclusive_start_key = r.last_evaluated_key
    break unless exclusive_start_key
  end
end

.global_table(name) ⇒ Object



17
18
19
20
21
# File 'lib/stax/aws/dynamodb.rb', line 17

def global_table(name)
  client.describe_global_table(global_table_name: name)&.global_table_description
rescue ::Aws::DynamoDB::Errors::GlobalTableNotFoundException
  nil
end

.gsi(name) ⇒ Object



23
24
25
# File 'lib/stax/aws/dynamodb.rb', line 23

def gsi(name)
  client.describe_table(table_name: name).table.global_secondary_indexes || []
end

.key_schema(name) ⇒ Object



31
32
33
# File 'lib/stax/aws/dynamodb.rb', line 31

def key_schema(name)
  client.describe_table(table_name: name).table.key_schema
end

.keys(name) ⇒ Object

key schema as a hash



36
37
38
39
40
# File 'lib/stax/aws/dynamodb.rb', line 36

def keys(name)
  key_schema(name).each_with_object({}) do |s, h|
    h[s.key_type.downcase.to_sym] = s.attribute_name
  end
end

.list_backups(opt = {}) ⇒ Object



84
85
86
87
88
89
90
91
92
93
94
# File 'lib/stax/aws/dynamodb.rb', line 84

def list_backups(opt = {})
  last_arn = nil
  backups = []
  loop do
    r = client.list_backups(opt.merge(exclusive_start_backup_arn: last_arn))
    backups += r.backup_summaries
    last_arn = r.last_evaluated_backup_arn
    break unless last_arn
  end
  backups
end

.lsi(name) ⇒ Object



27
28
29
# File 'lib/stax/aws/dynamodb.rb', line 27

def lsi(name)
  client.describe_table(table_name: name).table.local_secondary_indexes || []
end

.put(opt) ⇒ Object



80
81
82
# File 'lib/stax/aws/dynamodb.rb', line 80

def put(opt)
  client.put_item(opt)
end

.query(opt) ⇒ Object



68
69
70
71
72
73
74
75
76
77
78
# File 'lib/stax/aws/dynamodb.rb', line 68

def query(opt)
  exclusive_start_key = nil
  loop do
    r = client.query(opt.merge(exclusive_start_key: exclusive_start_key))
    r.items.each do |item|
      puts JSON.generate(item)
    end
    exclusive_start_key = r.last_evaluated_key
    break unless exclusive_start_key
  end
end

.restore_backup(table_name, backup_arn) ⇒ Object



103
104
105
106
107
108
# File 'lib/stax/aws/dynamodb.rb', line 103

def restore_backup(table_name, backup_arn)
  client.restore_table_from_backup(
    target_table_name: table_name,
    backup_arn:        backup_arn,
  ).table_description
end

.scan(opt) ⇒ Object



52
53
54
55
56
57
58
# File 'lib/stax/aws/dynamodb.rb', line 52

def scan(opt)
  do_scan(opt) do |r|
    r.items.each do |item|
      puts JSON.generate(item)
    end
  end
end

.table(name) ⇒ Object



13
14
15
# File 'lib/stax/aws/dynamodb.rb', line 13

def table(name)
  client.describe_table(table_name: name).table
end