Class: Dynamosaurus::DynamoBase
- Inherits:
-
Object
- Object
- Dynamosaurus::DynamoBase
show all
- Defined in:
- lib/dynamosaurus/dynamo_base.rb,
lib/dynamosaurus/dynamo_class.rb
Constant Summary
collapse
- TYPES =
{
:string => :s,
:number => :n
}
Class Method Summary
collapse
-
.add(key = [], attribute_nums = {}, options = {}) ⇒ Object
-
.all ⇒ Object
-
.all_models ⇒ Object
-
.attribute_definitions ⇒ Object
-
.batch_get_item(keys) ⇒ Object
-
.batch_write_item(put_items = [], delete_items = []) ⇒ Object
-
.conv_key_array(keys) ⇒ Object
-
.create_table(option = {}) ⇒ Object
-
.create_tables ⇒ Object
-
.delete_item(value) ⇒ Object
-
.dynamo_db ⇒ Object
-
.first ⇒ Object
-
.get(value, option = {}) ⇒ Object
-
.get_from_index(hash, option = {}) ⇒ Object
-
.get_from_key(value, option = {}) ⇒ Object
-
.get_from_local_index(hash, option = {}) ⇒ Object
-
.get_global_index(name) ⇒ Object
-
.get_global_indexes ⇒ Object
-
.get_index(hash) ⇒ Object
-
.get_indexes ⇒ Object
-
.get_item_key(value) ⇒ Object
-
.get_key ⇒ Object
-
.get_orderd_key(value1, value2) ⇒ Object
-
.get_orderd_key_from_array(array) ⇒ Object
-
.get_orderd_key_from_hash(hash) ⇒ Object
-
.get_secondary_index(name) ⇒ Object
-
.get_secondary_indexes ⇒ Object
-
.getOne(value, option = {}) ⇒ Object
-
.global_index(index_name, key, key_type, range_key_name = nil, range_key_type = nil) ⇒ Object
-
.global_index_key_schema(index) ⇒ Object
-
.global_index_schemas ⇒ Object
-
.global_indexes_attribute_definitions ⇒ Object
-
.has_renge ⇒ Object
-
.hash_key ⇒ Object
-
.key(k, type, range_key_name = nil, range_key_type = nil) ⇒ Object
-
.key_schema ⇒ Object
-
.local_secondary_attribute_definitions ⇒ Object
-
.local_secondary_schemas ⇒ Object
-
.push_attribute_definitions(name, type) ⇒ Object
-
.put(hash, num_hash = {}, return_values = nil) ⇒ Object
-
.put_data(hash, num_hash = {}) ⇒ Object
-
.query(keys, index = nil, option = {}) ⇒ Object
-
.query_without_index(value, option) ⇒ Object
-
.range_key ⇒ Object
-
.res2hash(hash) ⇒ Object
-
.save(hash, num_hash = {}, return_values = nil) ⇒ Object
-
.schema ⇒ Object
-
.secondary_index(index_name, range_key_name = nil, range_key_type = nil) ⇒ Object
-
.set_init_attribute_definitions ⇒ Object
-
.table(options = {}) ⇒ Object
-
.table_name ⇒ Object
-
.table_prefix(name) ⇒ Object
-
.tables ⇒ Object
Instance Method Summary
collapse
Constructor Details
#initialize(params) ⇒ DynamoBase
Returns a new instance of DynamoBase.
14
15
16
17
|
# File 'lib/dynamosaurus/dynamo_base.rb', line 14
def initialize params
data = params[:data] if params[:data]
@data = Dynamosaurus::DynamoBase.res2hash(data)
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *params) ⇒ Object
47
48
49
50
51
52
53
54
55
56
57
58
|
# File 'lib/dynamosaurus/dynamo_base.rb', line 47
def method_missing(name, *params)
name = name.to_s[0..-2] if name.to_s[-1] == "="
if exist? and @data.has_key?(name.to_s)
if params.empty?
@data[name.to_s]
else
@data[name.to_s] = params[0]
end
else
super
end
end
|
Class Method Details
.add(key = [], attribute_nums = {}, options = {}) ⇒ Object
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 542
def add key=[], attribute_nums={}, options={}
Dynamosaurus.logger << "update"
attribute_updates = {}
attribute_nums.each do |k, v|
attribute_updates[k.to_s] = {
:value => v,
:action => "ADD"
}
end
keys = {
hash_key.to_sym => key.is_a?(Array) ? key[0] : key
}
keys[range_key.to_sym] = key[1] if has_renge
query ={
:table_name => table_name,
:key => keys,
:attribute_updates => attribute_updates
}
query = query.merge(options)
res = dynamo_db.update_item(query)
end
|
.all ⇒ Object
460
461
462
463
464
465
466
467
468
469
470
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 460
def all
Dynamosaurus.logger << "all #{table_name}"
res = dynamo_db.scan({
:table_name => table_name,
})
if res.items
res.items.map{|item|
new :data => item
}
end
end
|
.all_models ⇒ Object
4
5
6
7
8
9
10
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 4
def all_models
subclasses = []
ObjectSpace.each_object(Dynamosaurus::DynamoBase.singleton_class) do |k|
subclasses << k if k.superclass == Dynamosaurus::DynamoBase
end
subclasses
end
|
.attribute_definitions ⇒ Object
106
107
108
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 106
def attribute_definitions
@attribute_definitions
end
|
.batch_get_item(keys) ⇒ Object
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 427
def batch_get_item keys
return nil if keys.nil? or keys.empty?
Dynamosaurus.logger << "batch_get_item #{table_name} #{keys}"
_keys = conv_key_array(keys)
res = dynamo_db.batch_get_item(
:request_items => {
table_name => {
:keys => _keys
}
})
if res.responses[table_name]
return res.responses[table_name].map{|item|
new :data => item
}
end
nil
end
|
.batch_write_item(put_items = [], delete_items = []) ⇒ Object
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 493
def batch_write_item put_items = [], delete_items = []
return nil if (put_items.nil? or put_items.empty?) and (delete_items.nil? or delete_items.empty?)
Dynamosaurus.logger << "batch_write_item #{table_name}"
requests = []
if put_items and put_items.size > 0
put_items.each do |item|
if item["hash"] or item["num_hash"]
new_item = put_data(item["hash"], item["num_hash"])
else
new_item = item.merge({:updated_at => Time.now.to_i})
end
requests << {
put_request: {
item: new_item
}
}
end
end
if delete_items and delete_items.size > 0
conv_key_array(delete_items).map{|key|
requests << {
delete_request: {
key: key
}
}
}
end
res = dynamo_db.batch_write_item(
request_items: {
table_name => requests
},
return_consumed_capacity: "TOTAL"
)
res
end
|
.conv_key_array(keys) ⇒ Object
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 399
def conv_key_array keys
unless has_renge
keys.map{|_key| {hash_key.to_s => _key.to_s } }
else
if keys.is_a?(Array)
if keys[0].is_a?(Array)
keys.map{|key| get_orderd_key_from_array(key)}
elsif keys[0].is_a?(Hash)
keys.map{|key| get_orderd_key_from_hash(key)}
else
[get_orderd_key_from_array(keys)]
end
else
_keys = []
((p_key = keys[hash_key]).is_a?(Array) ? p_key : [p_key]).each do |key1|
if (r_key = keys[range_key]).is_a?(Array)
r_key.each do |key2|
_keys << get_orderd_key(key1, key2)
end
else
_keys << get_orderd_key(key1, r_key)
end
end
_keys
end
end
end
|
.create_table(option = {}) ⇒ Object
22
23
24
25
26
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 22
def create_table option={}
schem = schema.merge(option)
Dynamosaurus.logger << "create table #{schem}"
dynamo_db.create_table(schem)
end
|
.create_tables ⇒ Object
12
13
14
15
16
17
18
19
20
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 12
def create_tables
tables = dynamo_db.list_tables.table_names
Dynamosaurus::DynamoBase.all_models.each do |model_class|
if tables.index(model_class.table_name).nil?
model_class.create_table
end
end
end
|
.delete_item(value) ⇒ Object
568
569
570
571
572
573
574
575
576
577
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 568
def delete_item value
return nil if value.nil?
old_item = dynamo_db.delete_item(
:table_name => table_name,
:key => get_item_key(value),
:return_values => "ALL_OLD"
)
new :data => old_item.attributes
end
|
.dynamo_db ⇒ Object
42
43
44
45
46
47
48
49
50
51
52
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 42
def dynamo_db
return @dynamo_db if @dynamo_db
if Aws::config.empty?
@dynamo_db = Aws::DynamoDB::Client.new(
:endpoint => "http://localhost:8000",
:region => "us-west-1"
)
else
@dynamo_db = Aws::DynamoDB::Client.new
end
end
|
.first ⇒ Object
447
448
449
450
451
452
453
454
455
456
457
458
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 447
def first
Dynamosaurus.logger << "first #{table_name}"
res = dynamo_db.scan({
:table_name => table_name,
:limit => 1
})
if res.items && res.count > 0
new :data => res.items[0]
else
nil
end
end
|
.get(value, option = {}) ⇒ Object
359
360
361
362
363
364
365
366
367
368
369
370
371
372
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 359
def get value, option={}
if value.is_a? Hash
if value[:index]
get_from_local_index value, option
elsif option[:noindex]
option.delete(:noindex)
query_without_index value, option
else
get_from_index value, option
end
else
get_from_key value, option
end
end
|
.get_from_index(hash, option = {}) ⇒ Object
306
307
308
309
310
311
312
313
314
315
316
317
318
319
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 306
def get_from_index hash, option={}
if index = get_index(hash)
keys = {}
index[:keys].each do |key|
keys[key] = {
:comparison_operator => "EQ",
:attribute_value_list => [hash[key]]
}
end
Dynamosaurus.logger << "query index #{table_name} #{keys}"
query keys, index[:index_name], option
end
end
|
.get_from_key(value, option = {}) ⇒ Object
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 289
def get_from_key value, option={}
return nil if value.nil?
item_key = get_item_key(value)
Dynamosaurus.logger << "get_item #{table_name} #{item_key}"
res = dynamo_db.get_item(
:table_name => table_name,
:key => item_key
)
if res.item
new :data => res.item
else
nil
end
end
|
.get_from_local_index(hash, option = {}) ⇒ Object
321
322
323
324
325
326
327
328
329
330
331
332
333
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 321
def get_from_local_index hash, option={}
if index = hash.delete(:index)
keys = {}
hash.each do |k, v|
keys[k] = {
:comparison_operator => "EQ",
:attribute_value_list => [ v.to_s ]
}
end
Dynamosaurus.logger << "query local_index #{table_name} #{keys}"
query keys, index, option
end
end
|
.get_global_index(name) ⇒ Object
214
215
216
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 214
def get_global_index name
@global_index[name]
end
|
.get_global_indexes ⇒ Object
210
211
212
213
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 210
def get_global_indexes
(@global_index) ? @global_index : {}
end
|
.get_index(hash) ⇒ Object
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 234
def get_index hash
get_indexes.each{|key, value|
if hash.size == 1 && hash.keys.first == value.first
return {
:index_name => key,
:keys => [value[0]]
}
else hash.size == 2 && hash.keys.sort == [value[0], value[2]].sort
return {
:index_name => key,
:keys => [value[0], value[2]]
}
end
}
nil
end
|
.get_indexes ⇒ Object
230
231
232
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 230
def get_indexes
get_secondary_indexes.merge(get_global_indexes)
end
|
.get_item_key(value) ⇒ Object
276
277
278
279
280
281
282
283
284
285
286
287
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 276
def get_item_key value
if value.is_a? Array
{
hash_key => value[0].to_s,
range_key => value[1].to_s,
}
else
{
hash_key => value.to_s,
}
end
end
|
.get_key ⇒ Object
63
64
65
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 63
def get_key
@key
end
|
.get_orderd_key(value1, value2) ⇒ Object
392
393
394
395
396
397
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 392
def get_orderd_key value1, value2
{
hash_key.to_s => value1,
range_key.to_s => value2
}
end
|
.get_orderd_key_from_array(array) ⇒ Object
388
389
390
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 388
def get_orderd_key_from_array array
get_orderd_key(array[0], array[1])
end
|
.get_orderd_key_from_hash(hash) ⇒ Object
383
384
385
386
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 383
def get_orderd_key_from_hash hash
get_orderd_key( (hash[hash_key.to_sym] || hash[hash_key.to_s]),
(hash[range_key.to_sym] || hash[range_key.to_s]))
end
|
.get_secondary_index(name) ⇒ Object
226
227
228
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 226
def get_secondary_index name
@secondary_index[name]
end
|
.get_secondary_indexes ⇒ Object
223
224
225
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 223
def get_secondary_indexes
@secondary_index ? @secondary_index : {}
end
|
.getOne(value, option = {}) ⇒ Object
374
375
376
377
378
379
380
381
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 374
def getOne value, option={}
data = get(value, option)
if data.nil? || data.empty?
nil
else
data.first
end
end
|
.global_index(index_name, key, key_type, range_key_name = nil, range_key_type = nil) ⇒ Object
204
205
206
207
208
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 204
def global_index index_name, key, key_type, range_key_name=nil, range_key_type=nil
@global_index = {} if @global_index.nil?
@global_index[index_name] = [key, Dynamosaurus::DynamoBase::TYPES[key_type]]
@global_index[index_name] << range_key_name << Dynamosaurus::DynamoBase::TYPES[range_key_type] if range_key_name
end
|
.global_index_key_schema(index) ⇒ Object
152
153
154
155
156
157
158
159
160
161
162
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 152
def global_index_key_schema index
key_schema = [{
:key_type => "HASH",
:attribute_name => index[1][0]
}]
key_schema << {
:key_type => "RANGE",
:attribute_name => index[1][2]
} if index[1].size == 4
key_schema
end
|
.global_index_schemas ⇒ Object
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 134
def global_index_schemas
schema = []
get_global_indexes.each do |index|
schema << {
:index_name => index[0],
:key_schema => global_index_key_schema(index),
:projection => {
:projection_type => "KEYS_ONLY",
},
:provisioned_throughput => {
:read_capacity_units => 10,
:write_capacity_units => 10
}
}
end
schema
end
|
.global_indexes_attribute_definitions ⇒ Object
170
171
172
173
174
175
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 170
def global_indexes_attribute_definitions
get_global_indexes.each do |index|
push_attribute_definitions(index[1][0].to_s, index[1][1].to_s.upcase)
push_attribute_definitions(index[1][2].to_s, index[1][3].to_s.upcase) if index[1].size == 4
end
end
|
.has_renge ⇒ Object
67
68
69
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 67
def has_renge
@key.size == 4
end
|
.hash_key ⇒ Object
71
72
73
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 71
def hash_key
@key[0]
end
|
.key(k, type, range_key_name = nil, range_key_type = nil) ⇒ Object
58
59
60
61
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 58
def key k, type, range_key_name=nil, range_key_type=nil
@key = [k, Dynamosaurus::DynamoBase::TYPES[type]]
@key << range_key_name << Dynamosaurus::DynamoBase::TYPES[range_key_type] if range_key_name
end
|
.key_schema ⇒ Object
79
80
81
82
83
84
85
86
87
88
89
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 79
def key_schema
key = [{
:key_type => "HASH",
:attribute_name => hash_key.to_s
}]
key << {
:key_type => "RANGE",
:attribute_name => range_key.to_s
} if has_renge
key
end
|
.local_secondary_attribute_definitions ⇒ Object
164
165
166
167
168
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 164
def local_secondary_attribute_definitions
get_secondary_indexes.each do |index_key, index_value|
push_attribute_definitions(index_value[2].to_s, index_value[3].to_s.upcase)
end
end
|
.local_secondary_schemas ⇒ Object
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 110
def local_secondary_schemas
schema = []
get_secondary_indexes.each do |index_key, index_value|
schema << {
index_name: index_key,
key_schema: [],
projection: {
projection_type: "KEYS_ONLY",
},
key_schema: [
{
key_type: "HASH",
attribute_name: index_value[0]
},
{
key_type: "RANGE",
attribute_name: index_value[2]
}
]
}
end
schema
end
|
.push_attribute_definitions(name, type) ⇒ Object
92
93
94
95
96
97
98
99
100
101
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 92
def push_attribute_definitions name, type
if @attribute_definitions.nil?
@attribute_definitions = []
@attribute_names = []
end
if @attribute_names.index(name).nil?
@attribute_definitions << {:attribute_name => name, :attribute_type => type}
@attribute_names << name
end
end
|
.put(hash, num_hash = {}, return_values = nil) ⇒ Object
472
473
474
475
476
477
478
479
480
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 472
def put hash, num_hash={}, return_values=nil
new_hash = put_data(hash, num_hash)
res = dynamo_db.put_item(
:table_name => table_name,
:item => new_hash,
:return_values => return_values || "NONE"
)
end
|
.put_data(hash, num_hash = {}) ⇒ Object
482
483
484
485
486
487
488
489
490
491
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 482
def put_data hash, num_hash={}
new_hash = {}
hash.each{|key, value|
new_hash[key] = value unless value.nil?
}
num_hash.merge({:updated_at => Time.now.to_i}).each{|key, value|
new_hash[key] = value.to_i unless value.nil?
} if num_hash
new_hash
end
|
.query(keys, index = nil, option = {}) ⇒ Object
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 335
def query keys, index=nil, option={}
query = {
:table_name => table_name,
:key_conditions => keys,
}
if index
query[:index_name] = index
end
query.merge!(option)
res = dynamo_db.query(query)
if query[:select] == "COUNT"
res[:count]
else
if res.items
return res.items.map{|item|
new :data => item
}
end
end
end
|
.query_without_index(value, option) ⇒ Object
263
264
265
266
267
268
269
270
271
272
273
274
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 263
def query_without_index value, option
keys = {}
value.each_with_index{|(k,v), i|
keys[k] = {
:comparison_operator => "EQ",
:attribute_value_list => [v.to_s]
}
}
Dynamosaurus.logger << "query index #{table_name} #{keys}"
query keys, nil, option
end
|
.range_key ⇒ Object
75
76
77
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 75
def range_key
@key[2]
end
|
.res2hash(hash) ⇒ Object
256
257
258
259
260
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 256
def res2hash hash
new_hash = {}
return new_hash if hash.nil?
hash
end
|
.save(hash, num_hash = {}, return_values = nil) ⇒ Object
532
533
534
535
536
537
538
539
540
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 532
def save hash, num_hash={}, return_values=nil
put(hash, num_hash, return_values)
if has_renge
get([hash[hash_key], hash[range_key]])
else
get(hash[hash_key])
end
end
|
.schema ⇒ Object
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 177
def schema
set_init_attribute_definitions
@schema = {
table_name: table_name,
key_schema: key_schema,
provisioned_throughput: {
read_capacity_units: 10,
write_capacity_units: 10
}
}
unless get_global_indexes.empty?
@schema[:global_secondary_indexes] = global_index_schemas
global_indexes_attribute_definitions
end
unless get_secondary_indexes.empty?
@schema[:local_secondary_indexes] = local_secondary_schemas
local_secondary_attribute_definitions
end
@schema[:attribute_definitions] = attribute_definitions
@schema
end
|
.secondary_index(index_name, range_key_name = nil, range_key_type = nil) ⇒ Object
218
219
220
221
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 218
def secondary_index index_name, range_key_name=nil, range_key_type=nil
@secondary_index = {} if @secondary_index.nil?
@secondary_index[index_name.to_sym] = [@key[0], @key[1], range_key_name, Dynamosaurus::DynamoBase::TYPES[range_key_type]] if range_key_name
end
|
.set_init_attribute_definitions ⇒ Object
102
103
104
105
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 102
def set_init_attribute_definitions
push_attribute_definitions(hash_key.to_s, get_key[1].to_s.upcase)
push_attribute_definitions(range_key.to_s, get_key[3].to_s.upcase) if has_renge
end
|
.table(options = {}) ⇒ Object
54
55
56
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 54
def table options = {}
@table ||= options
end
|
.table_name ⇒ Object
34
35
36
37
38
39
40
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 34
def table_name
if @table && @table.has_key?(:name) && !@table[:name].empty?
@table[:name].to_s
else
(@table_prefix || name.downcase.split("::").last) + (ENV['DYNAMODB_SUFFIX'] || "_local")
end
end
|
.table_prefix(name) ⇒ Object
252
253
254
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 252
def table_prefix name
@table_prefix = name
end
|
.tables ⇒ Object
28
29
30
31
32
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 28
def tables
Dynamosaurus::DynamoBase.all_models.map do |model_class|
model_class.table_name
end
end
|
Instance Method Details
#[](key) ⇒ Object
23
24
25
|
# File 'lib/dynamosaurus/dynamo_base.rb', line 23
def [] key
@data[key]
end
|
#[]=(key, value) ⇒ Object
27
28
29
|
# File 'lib/dynamosaurus/dynamo_base.rb', line 27
def []=(key,value)
@data[key] = value
end
|
#add(attribute_nums = {}, options = {}) ⇒ Object
100
101
102
103
104
105
106
107
108
109
110
|
# File 'lib/dynamosaurus/dynamo_base.rb', line 100
def add attribute_nums={}, options={}
if self.class.has_renge
key_value = [@data[key[0].to_s], @data[key[2].to_s]]
else
key_value = @data[key[0].to_s]
end
attribute_nums.each do |k, v|
@data[k.to_s] = @data[k.to_s] + v.to_i
end
self.class.add(key_value, attribute_nums, options)
end
|
#attr_delete(attributes = []) ⇒ Object
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
# File 'lib/dynamosaurus/dynamo_base.rb', line 131
def attr_delete attributes=[]
Dynamosaurus.logger << "delete"
attribute_updates = {}
attributes.each do |k|
attribute_updates[k.to_s] = {
:action => "DELETE"
}
@data.delete(k.to_s)
end
res = dynamo_db.update_item(
:table_name => self.class.table_name,
:key => keys,
:attribute_updates => attribute_updates
)
end
|
#data ⇒ Object
31
32
33
|
# File 'lib/dynamosaurus/dynamo_base.rb', line 31
def data
@data
end
|
#delete ⇒ Object
149
150
151
152
153
154
|
# File 'lib/dynamosaurus/dynamo_base.rb', line 149
def delete
dynamo_db.delete_item(
:table_name => self.class.table_name,
:key => keys
)
end
|
#dynamo_db ⇒ Object
10
11
12
|
# File 'lib/dynamosaurus/dynamo_base.rb', line 10
def dynamo_db
self.class.dynamo_db
end
|
#empty? ⇒ Boolean
39
40
41
|
# File 'lib/dynamosaurus/dynamo_base.rb', line 39
def empty?
@data.empty?
end
|
#exist? ⇒ Boolean
35
36
37
|
# File 'lib/dynamosaurus/dynamo_base.rb', line 35
def exist?
! @data.empty?
end
|
#key ⇒ Object
60
61
62
63
|
# File 'lib/dynamosaurus/dynamo_base.rb', line 60
def key
return @key if @key
@key = self.class.get_key
end
|
#keys ⇒ Object
65
66
67
68
69
70
|
# File 'lib/dynamosaurus/dynamo_base.rb', line 65
def keys
item_key = {}
item_key[key[0].to_sym] = @data[key[0].to_s]
item_key[key[2].to_sym] = @data[key[2].to_s] if key.size == 4
item_key
end
|
#save ⇒ Object
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
# File 'lib/dynamosaurus/dynamo_base.rb', line 112
def save
attribute_updates = {}
@data.each do |k, v|
if key.index(k.to_sym).nil?
attribute_updates[k.to_s] = {
:value => v,
:action => "PUT"
}
end
end
query = {
:table_name => self.class.table_name,
:key => keys,
:attribute_updates => attribute_updates
}
res = dynamo_db.update_item(query)
end
|
#table_name ⇒ Object
19
20
21
|
# File 'lib/dynamosaurus/dynamo_base.rb', line 19
def table_name
self.class.table_name
end
|
#try(name) ⇒ Object
43
44
45
|
# File 'lib/dynamosaurus/dynamo_base.rb', line 43
def try name
@data[name.to_s]
end
|
#update(attributes = {}, attribute_nums = {}, options = {}) ⇒ Object
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
# File 'lib/dynamosaurus/dynamo_base.rb', line 72
def update attributes={}, attribute_nums={}, options={}
Dynamosaurus.logger << "update"
attribute_updates = {}
attributes.each do |k, v|
@data[k.to_s] = v
attribute_updates[k.to_s] = {
:value => v,
:action => "PUT"
}
end
attribute_nums.each do |k, v|
@data[k.to_s] = v.to_i
attribute_updates[k.to_s] = {
:value => v.to_i,
:action => "PUT"
}
end
query = {
:table_name => self.class.table_name,
:key => keys,
:attribute_updates => attribute_updates
}.merge(options)
res = dynamo_db.update_item(query)
end
|