module DynamoDbFramework::Table

Public Instance Methods

active?(store: DynamoDbFramework.default_store) click to toggle source
# 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) click to toggle source
# 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
config() click to toggle source
# 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: []) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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_name() click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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:) click to toggle source
# 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:) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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:) click to toggle source
# 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) click to toggle source
# 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