Module: DynamoDbFramework::Table

Defined in:
lib/dynamodb_framework/dynamodb_table.rb

Defined Under Namespace

Classes: InvalidConfigException

Instance Method Summary collapse

Instance Method Details

#active?(store: DynamoDbFramework.default_store) ⇒ Boolean

Returns:

  • (Boolean)


112
113
114
# File 'lib/dynamodb_framework/dynamodb_table.rb', line 112

def active?(store: DynamoDbFramework.default_store)
  DynamoDbFramework::TableManager.new(store).get_status(full_table_name) == 'ACTIVE'
end

#all(store: DynamoDbFramework.default_store) ⇒ Object



120
121
122
123
124
# File 'lib/dynamodb_framework/dynamodb_table.rb', line 120

def all(store: DynamoDbFramework.default_store)
  repository = DynamoDbFramework::Repository.new(store)
  repository.table_name = config[:table_name]
  repository.all
end

#configObject



10
11
12
13
14
15
16
17
18
19
# File 'lib/dynamodb_framework/dynamodb_table.rb', line 10

def config
  details = {
      table_name: full_table_name,
      partition_key: self.instance_variable_get(:@partition_key)
  }
  if self.instance_variable_defined?(:@range_key)
    details[:range_key] = self.instance_variable_get(:@range_key)
  end
  details
end

#create(store: DynamoDbFramework.default_store, read_capacity: 25, write_capacity: 25, indexes: []) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/dynamodb_framework/dynamodb_table.rb', line 44

def create(store: DynamoDbFramework.default_store, read_capacity: 25, write_capacity: 25, indexes: [])

  #make method idempotent
  if exists?(store: store)
    wait_until_active(store: store)
    return
  end

  unless self.instance_variable_defined?(:@partition_key)
    raise DynamoDbFramework::Table::InvalidConfigException.new('Partition key must be specified.')
  end
  partition_key = self.instance_variable_get(:@partition_key)

  if self.instance_variable_defined?(:@range_key)
    range_key = self.instance_variable_get(:@range_key)
  end

  builder = DynamoDbFramework::AttributesBuilder.new
  builder.add({ name: partition_key[:field], type: partition_key[:type], key: :partition })
  if range_key != nil
    builder.add({ name: range_key[:field], type: range_key[:type], key: :range })
  end

  global_indexes = nil
  if indexes != nil && indexes.length > 0
    global_indexes = []
    indexes.each do |i|
      global_indexes << i.create(store: store, submit: false, read_capacity: read_capacity, write_capacity: write_capacity)
      index_partition_key = i.instance_variable_get(:@partition_key)
      unless builder.contains(name: index_partition_key[:field])
        builder.add({ name: index_partition_key[:field], type: index_partition_key[:type] })
      end
      if i.instance_variable_defined?(:@range_key)
        index_range_key = i.instance_variable_get(:@range_key)
        unless builder.contains(name: index_range_key[:field])
          builder.add({ name: index_range_key[:field], type: index_range_key[:type] })
        end
      end

    end
  end

  DynamoDbFramework::TableManager.new(store).create_table({ name: full_table_name, attributes: builder.attributes, read_capacity: read_capacity, write_capacity: write_capacity, global_indexes: global_indexes })
end

#delete_item(store: DynamoDbFramework.default_store, partition:, range: nil) ⇒ Object



143
144
145
146
147
148
149
150
151
152
# File 'lib/dynamodb_framework/dynamodb_table.rb', line 143

def delete_item(store: DynamoDbFramework.default_store, partition:, range: nil)
  repository = DynamoDbFramework::Repository.new(store)
  repository.table_name = config[:table_name]

  if range != nil
    range_key = config[:range_key][:field]
  end

  repository.delete_item(partition_key: config[:partition_key][:field], partition_key_value: partition, range_key: range_key, range_key_value: range)
end

#drop(store: DynamoDbFramework.default_store) ⇒ Object



93
94
95
96
97
98
# File 'lib/dynamodb_framework/dynamodb_table.rb', line 93

def drop(store: DynamoDbFramework.default_store)
  unless exists?(store: store)
    return
  end
  DynamoDbFramework::TableManager.new(store).drop(full_table_name)
end

#exists?(store: DynamoDbFramework.default_store) ⇒ Boolean

Returns:

  • (Boolean)


100
101
102
# File 'lib/dynamodb_framework/dynamodb_table.rb', line 100

def exists?(store: DynamoDbFramework.default_store)
  DynamoDbFramework::TableManager.new(store).exists?(full_table_name)
end

#full_table_nameObject



25
26
27
28
29
30
31
32
33
34
# File 'lib/dynamodb_framework/dynamodb_table.rb', line 25

def full_table_name
  unless self.instance_variable_defined?(:@table_name)
    raise DynamoDbFramework::Table::InvalidConfigException.new('Table name must be specified.')
  end
  table_name = self.instance_variable_get(:@table_name)
  if DynamoDbFramework.namespace != nil
    table_name = "#{DynamoDbFramework.namespace}#{DynamoDbFramework.namespace_delimiter}#{table_name}"
  end
  table_name
end

#get_item(store: DynamoDbFramework.default_store, partition:, range: nil) ⇒ Object



132
133
134
135
136
137
138
139
140
141
# File 'lib/dynamodb_framework/dynamodb_table.rb', line 132

def get_item(store: DynamoDbFramework.default_store, partition:, range: nil)
  repository = DynamoDbFramework::Repository.new(store)
  repository.table_name = config[:table_name]

  if range != nil
    repository.get_by_key(config[:partition_key][:field], partition, config[:range_key][:field], range)
  else
    repository.get_by_key(config[:partition_key][:field], partition)
  end
end

#get_status(store: DynamoDbFramework.default_store) ⇒ Object



108
109
110
# File 'lib/dynamodb_framework/dynamodb_table.rb', line 108

def get_status(store: DynamoDbFramework.default_store)
  DynamoDbFramework::TableManager.new(store).get_status(full_table_name)
end

#partition_key(field, type) ⇒ Object



36
37
38
# File 'lib/dynamodb_framework/dynamodb_table.rb', line 36

def partition_key(field, type)
  self.instance_variable_set(:@partition_key, { field: field, type: type })
end

#put_item(store: DynamoDbFramework.default_store, item:) ⇒ Object



126
127
128
129
130
# File 'lib/dynamodb_framework/dynamodb_table.rb', line 126

def put_item(store: DynamoDbFramework.default_store, item:)
  repository = DynamoDbFramework::Repository.new(store)
  repository.table_name = config[:table_name]
  repository.put(item)
end

#query(partition:) ⇒ Object



116
117
118
# File 'lib/dynamodb_framework/dynamodb_table.rb', line 116

def query(partition:)
  DynamoDbFramework::Query.new(table_name: config[:table_name], partition_key: config[:partition_key][:field], partition_value: partition)
end

#range_key(field, type) ⇒ Object



40
41
42
# File 'lib/dynamodb_framework/dynamodb_table.rb', line 40

def range_key(field, type)
  self.instance_variable_set(:@range_key, { field: field, type: type })
end

#table_name(value) ⇒ Object



21
22
23
# File 'lib/dynamodb_framework/dynamodb_table.rb', line 21

def table_name(value)
  self.instance_variable_set(:@table_name, value)
end

#update(store: DynamoDbFramework.default_store, read_capacity:, write_capacity:) ⇒ Object



89
90
91
# File 'lib/dynamodb_framework/dynamodb_table.rb', line 89

def update(store: DynamoDbFramework.default_store, read_capacity:, write_capacity:)
  DynamoDbFramework::TableManager.new(store).update_throughput(full_table_name, read_capacity, write_capacity)
end

#wait_until_active(store: DynamoDbFramework.default_store) ⇒ Object



104
105
106
# File 'lib/dynamodb_framework/dynamodb_table.rb', line 104

def wait_until_active(store: DynamoDbFramework.default_store)
  DynamoDbFramework::TableManager.new(store).wait_until_active(full_table_name)
end