Module: Dynamoid::Adapter::AwsSdk

Extended by:
AwsSdk
Included in:
AwsSdk
Defined in:
lib/dynamoid/adapter/aws_sdk.rb

Constant Summary collapse

@@connection =
nil

Instance Method Summary collapse

Instance Method Details

#batch_get_item(options) ⇒ Object

BatchGetItem



18
19
20
21
22
23
24
25
26
27
28
# File 'lib/dynamoid/adapter/aws_sdk.rb', line 18

def batch_get_item(options)
  batch = AWS::DynamoDB::BatchGet.new(:config => @@connection.config)
  options.each do |t, ids|
    batch.table(t, :all, Array(ids))
  end
  hash = Hash.new{|h, k| h[k] = []}
  batch.each do |table_name, attributes|
    hash[table_name] << attributes.symbolize_keys!
  end
  hash
end

#connect!Object



9
10
11
# File 'lib/dynamoid/adapter/aws_sdk.rb', line 9

def connect!
  @@connection = AWS::DynamoDB.new(:access_key_id => Dynamoid::Config.access_key, :secret_access_key => Dynamoid::Config.secret_key)
end

#connectionObject



13
14
15
# File 'lib/dynamoid/adapter/aws_sdk.rb', line 13

def connection
  @@connection
end

#create_table(table_name, key) ⇒ Object

CreateTable



31
32
33
34
35
# File 'lib/dynamoid/adapter/aws_sdk.rb', line 31

def create_table(table_name, key)
  table = @@connection.tables.create(table_name, 10, 5, :hash_key => {key.to_sym => :string})
  sleep 0.5 while table.status == :creating
  return table
end

#delete_item(table_name, key) ⇒ Object

DeleteItem



38
39
40
41
42
43
44
# File 'lib/dynamoid/adapter/aws_sdk.rb', line 38

def delete_item(table_name, key)
  table = @@connection.tables[table_name]
  table.load_schema
  result = table.items[key]
  result.delete unless result.attributes.to_h.empty?
  true
end

#delete_table(table_name) ⇒ Object

DeleteTable



47
48
49
# File 'lib/dynamoid/adapter/aws_sdk.rb', line 47

def delete_table(table_name)
  @@connection.tables[table_name].delete
end

#get_item(table_name, key) ⇒ Object

GetItem



54
55
56
57
58
59
60
61
62
63
# File 'lib/dynamoid/adapter/aws_sdk.rb', line 54

def get_item(table_name, key)
  table = @@connection.tables[table_name]
  table.load_schema
  result = table.items[key].attributes.to_h
  if result.empty?
    nil
  else
    result.symbolize_keys!
  end
end

#list_tablesObject

ListTables



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

def list_tables
  @@connection.tables.collect(&:name)
end

#put_item(table_name, object) ⇒ Object

PutItem



71
72
73
74
75
# File 'lib/dynamoid/adapter/aws_sdk.rb', line 71

def put_item(table_name, object)
  table = @@connection.tables[table_name]
  table.load_schema
  table.items.create(object.delete_if{|k, v| v.nil?})
end

#query(table_name, id) ⇒ Object

Query



78
79
80
# File 'lib/dynamoid/adapter/aws_sdk.rb', line 78

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

#scan(table_name, scan_hash) ⇒ Object

Scan



83
84
85
86
87
88
89
90
91
92
# File 'lib/dynamoid/adapter/aws_sdk.rb', line 83

def scan(table_name, scan_hash)
  table = @@connection.tables[table_name]
  table.load_schema
  results = []
  table.items.select do |data|
    attributes = data.attributes.symbolize_keys!
    results << attributes if scan_hash.all?{|k, v| !attributes[k].nil? && attributes[k] == v}
  end
  results
end