Module: DynaModel::Document::ClassMethods

Defined in:
lib/dyna_model/document.rb

Instance Method Summary collapse

Instance Method Details

#create_table(options = {}) ⇒ Object



175
176
177
178
179
180
181
182
183
184
185
186
187
188
# 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 ( = self.describe_table(options))[:table][:table_status] == "CREATING"
    sleep 1
  end
  
end

#delete_table(options = {}) ⇒ Object



194
195
196
197
198
199
200
201
202
203
204
205
206
# 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 ( = self.describe_table) && [: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 = {}) ⇒ Object



190
191
192
# 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 = {}) ⇒ Object



234
235
236
237
238
239
240
241
242
243
# 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) ⇒ Object



225
226
227
228
# 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) ⇒ Object



230
231
232
# 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 = {}) ⇒ Object



208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
# 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 ( = self.describe_table) && [:table][:table_status] == "UPDATING"
    sleep 1
  end
  DynaModel::Config.logger.info "Table resized to #{[:table][:provisioned_throughput]}"
  true
end