Module: DynaModel::Document::ClassMethods
- Defined in:
- lib/dyna_model/document.rb
Instance Method Summary collapse
- #create_table(options = {}) ⇒ Object
- #delete_table(options = {}) ⇒ Object
- #describe_table(options = {}) ⇒ Object
- #dynamo_db_client(config = {}) ⇒ Object
- #dynamo_db_table(shard_name = nil) ⇒ Object
- #dynamo_db_table_name(shard_name = nil) ⇒ Object
- #resize_table(options = {}) ⇒ Object
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 = {} table_name = self.dynamo_db_table_name([: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())[: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(={}) table_name = self.dynamo_db_table_name([: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(={}) self.dynamo_db_client.describe_table(table_name: self.dynamo_db_table_name([: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={}) = {} [:use_ssl] = DynaModel::Config.use_ssl [:use_ssl] = config[:use_ssl] if config.has_key?(:use_ssl) [:dynamo_db_endpoint] = config[:endpoint] || DynaModel::Config.endpoint [:dynamo_db_port] = config[:port] || DynaModel::Config.port [:api_version] ||= config[:api_version] || '2012-08-10' @dynamo_db_client ||= AWS::DynamoDB::Client.new() 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(={}) table_name = self.dynamo_db_table_name([: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: ([:read_capacity_units] || self.table_schema[:provisioned_throughput][:read_capacity_units]).to_i, write_capacity_units: ([: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 |