module DynamoDbFramework::Index
Public Instance Methods
config()
click to toggle source
# File lib/dynamodb_framework/dynamodb_index.rb, line 10 def config details = { index_name: full_index_name, table: self.instance_variable_get(:@table), 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, submit: true, billing_mode: 'PROVISIONED')
click to toggle source
# File lib/dynamodb_framework/dynamodb_index.rb, line 49 def create(store: DynamoDbFramework.default_store, read_capacity: 25, write_capacity: 25, submit: true, billing_mode: 'PROVISIONED') unless self.instance_variable_defined?(:@table) raise DynamoDbFramework::Index::InvalidConfigException.new('Table must be specified.') end table = self.instance_variable_get(:@table) table_name = table.config[:table_name] #make method idempotent if exists?(store: store) wait_until_active(store: store) return end unless self.instance_variable_defined?(:@partition_key) raise DynamoDbFramework::Index::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 if partition_key[:field] != table.config[:partition_key][:field] && range_key != nil && range_key[:field] != table.config[:partition_key][:field] builder.add({ name: table.config[:partition_key][:field], type: table.config[:partition_key][:type] }) end if table.config[:range_key] != nil && partition_key[:field] != table.config[:range_key][:field] && range_key != nil && range_key[:field] != table.config[:range_key][:field] builder.add({ name: table.config[:range_key][:field], type: table.config[:range_key][:type] }) end table_manager = DynamoDbFramework::TableManager.new(store) range_key_field = range_key[:field] unless range_key == nil index =table_manager.create_global_index(full_index_name, partition_key[:field], range_key_field, read_capacity, write_capacity, billing_mode) if submit table_manager.add_index(table_name, builder.attributes, index, billing_mode) end index end
drop(store: DynamoDbFramework.default_store)
click to toggle source
# File lib/dynamodb_framework/dynamodb_index.rb, line 105 def drop(store: DynamoDbFramework.default_store) unless self.instance_variable_defined?(:@table) raise DynamoDbFramework::Index::InvalidConfigException.new('Table must be specified.') end table = self.instance_variable_get(:@table) table_name = table.config[:table_name] unless exists?(store: store) return end DynamoDbFramework::TableManager.new(store).drop_index(table_name, full_index_name) end
exists?(store: DynamoDbFramework.default_store)
click to toggle source
# File lib/dynamodb_framework/dynamodb_index.rb, line 119 def exists?(store: DynamoDbFramework.default_store) unless self.instance_variable_defined?(:@table) raise DynamoDbFramework::Index::InvalidConfigException.new('Table must be specified.') end table = self.instance_variable_get(:@table) table_name = table.config[:table_name] DynamoDbFramework::TableManager.new(store).has_index?(table_name, full_index_name) end
full_index_name()
click to toggle source
# File lib/dynamodb_framework/dynamodb_index.rb, line 26 def full_index_name unless self.instance_variable_defined?(:@index_name) raise DynamoDbFramework::Index::InvalidConfigException.new('Index name must be specified.') end index_name = self.instance_variable_get(:@index_name) if DynamoDbFramework.namespace != nil index_name = "#{DynamoDbFramework.namespace}#{DynamoDbFramework.namespace_delimiter}#{index_name}" end index_name end
index_name(value)
click to toggle source
# File lib/dynamodb_framework/dynamodb_index.rb, line 22 def index_name(value) self.instance_variable_set(:@index_name, value) end
partition_key(field, type)
click to toggle source
# File lib/dynamodb_framework/dynamodb_index.rb, line 41 def partition_key(field, type) self.instance_variable_set(:@partition_key, { field: field, type: type }) end
query(partition:)
click to toggle source
# File lib/dynamodb_framework/dynamodb_index.rb, line 137 def query(partition:) DynamoDbFramework::Query.new(index_name: config[:index_name], table_name: config[:table].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_index.rb, line 45 def range_key(field, type) self.instance_variable_set(:@range_key, { field: field, type: type }) end
table(value)
click to toggle source
# File lib/dynamodb_framework/dynamodb_index.rb, line 37 def table(value) self.instance_variable_set(:@table, value) end
update(store: DynamoDbFramework.default_store, read_capacity:, write_capacity:)
click to toggle source
# File lib/dynamodb_framework/dynamodb_index.rb, line 96 def update(store: DynamoDbFramework.default_store, read_capacity:, write_capacity:) unless self.instance_variable_defined?(:@table) raise DynamoDbFramework::Index::InvalidConfigException.new('Table must be specified.') end table = self.instance_variable_get(:@table) DynamoDbFramework::TableManager.new(store).update_index_throughput(table.config[:table_name], full_index_name, read_capacity, write_capacity) end
wait_until_active(store: DynamoDbFramework.default_store)
click to toggle source
# File lib/dynamodb_framework/dynamodb_index.rb, line 128 def wait_until_active(store: DynamoDbFramework.default_store) unless self.instance_variable_defined?(:@table) raise DynamoDbFramework::Index::InvalidConfigException.new('Table must be specified.') end table = self.instance_variable_get(:@table) table_name = table.config[:table_name] DynamoDbFramework::TableManager.new(store).wait_until_index_active(table_name, full_index_name) end