module DynaModel::Document::ClassMethods

Public Instance Methods

create_table(options = {}) click to toggle source
# File lib/dyna_model/document.rb, line 175
def create_table options = {}
  table_name = self.dynamo_db_table_name(options[:shard_name])
  if self.dynamo_db_client.list_tables[:table_names].include?(table_name)
    puts "Table #{table_name} already exists"
    return false
  end
  self.dynamo_db_client.create_table(self.table_schema.merge({
    table_name: table_name
  }))
  while (table_metadata = self.describe_table(options))[:table][:table_status] == "CREATING"
    sleep 1
  end
  table_metadata
end
delete_table(options={}) click to toggle source
# File lib/dyna_model/document.rb, line 194
def delete_table(options={})
  table_name = self.dynamo_db_table_name(options[:shard_name])
  return false unless self.dynamo_db_client.list_tables[:table_names].include?(table_name)
  self.dynamo_db_client.delete_table(table_name: table_name)
  begin
    while (table_metadata = self.describe_table) && table_metadata[:table][:table_status] == "DELETING"
      sleep 1
    end
  rescue AWS::DynamoDB::Errors::ResourceNotFoundException => e
    DynaModel::Config.logger.info "Table deleted"
  end
  true
end
describe_table(options={}) click to toggle source
# File lib/dyna_model/document.rb, line 190
def describe_table(options={})
  self.dynamo_db_client.describe_table(table_name: self.dynamo_db_table_name(options[:shard_name]))
end
dynamo_db_client(config={}) click to toggle source
# File lib/dyna_model/document.rb, line 234
def dynamo_db_client(config={})
  options = {}
  options[:use_ssl] = DynaModel::Config.use_ssl
  options[:use_ssl] = config[:use_ssl] if config.has_key?(:use_ssl)
  options[:dynamo_db_endpoint] = config[:endpoint] || DynaModel::Config.endpoint
  options[:dynamo_db_port] = config[:port] || DynaModel::Config.port
  options[:api_version] ||= config[:api_version] || '2012-08-10'

  @dynamo_db_client ||= AWS::DynamoDB::Client.new(options)
end
dynamo_db_table(shard_name = nil) click to toggle source
# File lib/dyna_model/document.rb, line 225
def dynamo_db_table(shard_name = nil)
  @table_map ||= {}
  @table_map[self.dynamo_db_table_name(shard_name)] ||= Table.new(self)
end
dynamo_db_table_name(shard_name = nil) click to toggle source
# File lib/dyna_model/document.rb, line 230
def dynamo_db_table_name(shard_name = nil)
  "#{self.table_prefix}#{self.shard_name(shard_name)}"
end
resize_table(options={}) click to toggle source
# File lib/dyna_model/document.rb, line 208
def resize_table(options={})
  table_name = self.dynamo_db_table_name(options[:shard_name])
  return false unless self.dynamo_db_client.list_tables[:table_names].include?(table_name)
  self.dynamo_db_client.update_table({
    provisioned_throughput: {
      read_capacity_units: (options[:read_capacity_units] || self.table_schema[:provisioned_throughput][:read_capacity_units]).to_i,
      write_capacity_units: (options[:write_capacity_units] || self.table_schema[:provisioned_throughput][:write_capacity_units]).to_i
    },
    table_name: table_name
  })
  while (table_metadata = self.describe_table) && table_metadata[:table][:table_status] == "UPDATING"
    sleep 1
  end
  DynaModel::Config.logger.info "Table resized to #{table_metadata[:table][:provisioned_throughput]}"
  true
end