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