Module: Dynameek::Model::ClassMethods

Includes:
DynamoDb, Query, Structure
Defined in:
lib/dynameek/model.rb

Instance Method Summary collapse

Methods included from Structure

#aws_item_to_hash, #check_field, #current_range, #field, #fields, #hash_key, #hash_key_info, #index_table?, #multi_column_hash_key, #multi_column_hash_key?, #multi_column_hash_key_fields, #multi_column_join, #multi_column_join=, #range, #range?, #range_info, #read_units, #read_write, #use_index_table, #write_units

Methods included from DynamoDb

#build!, #convert_from_dynamodb, #convert_to_dynamodb, #dump_safe, #dynamo_db, #exists?, #index_table, #index_table_exists?, #table

Instance Method Details

#before_save(method) ⇒ Object



148
149
150
# File 'lib/dynameek/model.rb', line 148

def before_save method
  before_save_callbacks << method.to_sym
end

#before_save_callbacksObject



144
145
146
# File 'lib/dynameek/model.rb', line 144

def before_save_callbacks
  @before_save_callbacks ||= Set.new
end

#create(attrib) ⇒ Object



136
137
138
139
140
141
142
# File 'lib/dynameek/model.rb', line 136

def create(attrib)
  instance = self.new
  attrib.each do |key, val|
    instance.send "#{key.to_s}=", val
  end
  instance.save
end

#delete_tableObject



113
114
115
116
117
118
119
120
121
# File 'lib/dynameek/model.rb', line 113

def delete_table

  index_table.delete if dynamo_db.tables[index_table_name].exists?
  table.delete if dynamo_db.tables[table_name].exists?
  while dynamo_db.tables[table_name].exists? && 
        dynamo_db.tables[index_table_name].exists?
    sleep 1
  end
end

#find(hash_key, range_val = nil) ⇒ Object



99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/dynameek/model.rb', line 99

def find(hash_key, range_val=nil)
  raise Exception("This has a composite hash with a range, the range val is required") if(range_val.nil? && range?)
  #multicolumn
  hash_key = hash_key.join(multi_column_join) if(hash_key.is_a?(Array))
  items = if range?
    range_val = convert_to_dynamodb(range_info.type, range_val)
    table.batch_get(:all, [[hash_key, range_val]])
  else  
    table.batch_get(:all, [hash_key])
  end
  return nil if(items.entries.size == 0)
  item_to_instance(items.first)
end

#index_table_nameObject



156
157
158
# File 'lib/dynameek/model.rb', line 156

def index_table_name
  table_name + "_INDEX"
end

#item_to_instance(item) ⇒ Object



123
124
125
126
127
128
129
130
131
132
133
134
# File 'lib/dynameek/model.rb', line 123

def item_to_instance(item)
  item_hsh = aws_item_to_hash(item)
  instance = self.new
  fields.each do |field, type|
    next if multi_column_hash_key? && field == hash_key_info.field
    instance.send "#{field.to_s}=", convert_from_dynamodb(type, item_hsh[field.to_s])
  end
  if item.is_a?(AWS::DynamoDB::Item) || item.is_a?(AWS::DynamoDB::ItemData)
    instance.dynamo_item =  item.is_a?(AWS::DynamoDB::ItemData) ? item.item : item
  end
  instance
end

#table_nameObject



152
153
154
# File 'lib/dynameek/model.rb', line 152

def table_name
  self.to_s.gsub(/.*?([A-Za-z][A-Za-z0-9]*)$/, '\1')
end