Module: Dynamoid::Adapter::Local

Extended by:
Local
Included in:
Local
Defined in:
lib/dynamoid/adapter/local.rb

Instance Method Summary collapse

Instance Method Details

#batch_get_item(options) ⇒ Object

BatchGetItem



16
17
18
19
20
21
22
23
24
25
# File 'lib/dynamoid/adapter/local.rb', line 16

def batch_get_item(options)
  Hash.new { |h, k| h[k] = Array.new }.tap do |hash|
    options.each do |table_name, keys|
      table = data[table_name]
      Array(keys).each do |key|
        hash[table_name] << table[:data][key]
      end
    end
  end
end

#create_table(table_name, key) ⇒ Object

CreateTable



28
29
30
# File 'lib/dynamoid/adapter/local.rb', line 28

def create_table(table_name, key)
  data[table_name] = {:id => key, :data => {}}
end

#dataObject

Gimpy hash that should be somewhat equivalent to what Amazon’s actual DynamoDB, for offline development.



7
8
9
# File 'lib/dynamoid/adapter/local.rb', line 7

def data
  @data ||= {}
end

#delete_item(table_name, key) ⇒ Object

DeleteItem



33
34
35
# File 'lib/dynamoid/adapter/local.rb', line 33

def delete_item(table_name, key)
  data[table_name][:data].delete(key)
end

#delete_table(table_name) ⇒ Object

DeleteTable



38
39
40
# File 'lib/dynamoid/adapter/local.rb', line 38

def delete_table(table_name)
  data.delete(table_name)
end

#get_item(table_name, key) ⇒ Object

GetItem



45
46
47
# File 'lib/dynamoid/adapter/local.rb', line 45

def get_item(table_name, key)
  data[table_name][:data][key]
end

#list_tablesObject

ListTables



50
51
52
# File 'lib/dynamoid/adapter/local.rb', line 50

def list_tables
  data.keys
end

#put_item(table_name, object) ⇒ Object

PutItem



55
56
57
58
# File 'lib/dynamoid/adapter/local.rb', line 55

def put_item(table_name, object)
  table = data[table_name]
  table[:data][object[table[:id]]] = object
end

#query(table_name, id) ⇒ Object

Query



61
62
63
# File 'lib/dynamoid/adapter/local.rb', line 61

def query(table_name, id)
  get_item(table_name, id)
end

#reset_dataObject



11
12
13
# File 'lib/dynamoid/adapter/local.rb', line 11

def reset_data
  self.data.each {|k, v| v[:data] = {}}
end

#scan(table_name, scan_hash) ⇒ Object

Scan



66
67
68
69
# File 'lib/dynamoid/adapter/local.rb', line 66

def scan(table_name, scan_hash)
  return [] if data[table_name].nil?
  data[table_name][:data].values.select{|d| scan_hash.all?{|k, v| !d[k].nil? && d[k] == v}}
end