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_option(index_name, option) ⇒ 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
-
.secondary_index_option(index_name, option) ⇒ 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
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 562
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
480
481
482
483
484
485
486
487
488
489
490
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 480
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
108
109
110
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 108
def attribute_definitions
@attribute_definitions
end
|
.batch_get_item(keys) ⇒ Object
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 447
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
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 513
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
419
420
421
422
423
424
425
426
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 419
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
588
589
590
591
592
593
594
595
596
597
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 588
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
53
54
|
# 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-2',
access_key_id: 'fakeMyKeyId',
secret_access_key: 'fakeSecretAccessKey'
})
else
@dynamo_db = Aws::DynamoDB::Client.new
end
end
|
.first ⇒ Object
467
468
469
470
471
472
473
474
475
476
477
478
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 467
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
379
380
381
382
383
384
385
386
387
388
389
390
391
392
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 379
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
323
324
325
326
327
328
329
330
331
332
333
334
335
336
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 323
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
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 306
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
338
339
340
341
342
343
344
345
346
347
348
349
350
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 338
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
226
227
228
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 226
def get_global_index name
@global_index[name]
end
|
.get_global_indexes ⇒ Object
222
223
224
225
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 222
def get_global_indexes
(@global_index) ? @global_index : {}
end
|
.get_index(hash) ⇒ Object
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 251
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]]
}
elsif 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
247
248
249
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 247
def get_indexes
get_secondary_indexes.merge(get_global_indexes)
end
|
.get_item_key(value) ⇒ Object
293
294
295
296
297
298
299
300
301
302
303
304
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 293
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
65
66
67
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 65
def get_key
@key
end
|
.get_orderd_key(value1, value2) ⇒ Object
412
413
414
415
416
417
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 412
def get_orderd_key value1, value2
{
hash_key.to_s => value1,
range_key.to_s => value2
}
end
|
.get_orderd_key_from_array(array) ⇒ Object
408
409
410
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 408
def get_orderd_key_from_array array
get_orderd_key(array[0], array[1])
end
|
.get_orderd_key_from_hash(hash) ⇒ Object
403
404
405
406
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 403
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
243
244
245
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 243
def get_secondary_index name
@secondary_index[name]
end
|
.get_secondary_indexes ⇒ Object
240
241
242
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 240
def get_secondary_indexes
@secondary_index ? @secondary_index : {}
end
|
.getOne(value, option = {}) ⇒ Object
394
395
396
397
398
399
400
401
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 394
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
211
212
213
214
215
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 211
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
159
160
161
162
163
164
165
166
167
168
169
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 159
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_option(index_name, option) ⇒ Object
217
218
219
220
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 217
def global_index_option index_name, option
@global_index_option = {} if @global_index_option.nil?
@global_index_option[index_name] = option
end
|
.global_index_schemas ⇒ Object
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 138
def global_index_schemas
@global_index_option = {} if @global_index_option.nil?
schema = []
get_global_indexes.each do |index|
option = @global_index_option[index[0]] || {}
schema << {
:index_name => index[0],
:key_schema => global_index_key_schema(index),
:projection => {
:projection_type => (option[:projection_type] || "KEYS_ONLY"),
},
:provisioned_throughput => {
:read_capacity_units => 10,
:write_capacity_units => 10
}
}
end
schema
end
|
.global_indexes_attribute_definitions ⇒ Object
177
178
179
180
181
182
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 177
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
69
70
71
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 69
def has_renge
@key.size == 4
end
|
.hash_key ⇒ Object
73
74
75
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 73
def hash_key
@key[0]
end
|
.key(k, type, range_key_name = nil, range_key_type = nil) ⇒ Object
.key_schema ⇒ Object
81
82
83
84
85
86
87
88
89
90
91
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 81
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
171
172
173
174
175
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 171
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 112
def local_secondary_schemas
@secondary_index_option = {} if @secondary_index_option.nil?
schema = []
get_secondary_indexes.each do |index_key, index_value|
option = @secondary_index_option[index_key] || {}
schema << {
index_name: index_key,
key_schema: [],
projection: {
:projection_type => (option[: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
94
95
96
97
98
99
100
101
102
103
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 94
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
492
493
494
495
496
497
498
499
500
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 492
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
502
503
504
505
506
507
508
509
510
511
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 502
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
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 352
def query keys, index=nil, option={}
query = {
:table_name => table_name
}
unless keys.nil? || keys.empty?
query[:key_conditions] = keys
end
if index
query[:index_name] = index
end
query.deep_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
280
281
282
283
284
285
286
287
288
289
290
291
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 280
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
77
78
79
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 77
def range_key
@key[2]
end
|
.res2hash(hash) ⇒ Object
273
274
275
276
277
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 273
def res2hash hash
new_hash = {}
return new_hash if hash.nil?
hash
end
|
.save(hash, num_hash = {}, return_values = nil) ⇒ Object
552
553
554
555
556
557
558
559
560
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 552
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
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 184
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
230
231
232
233
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 230
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
|
.secondary_index_option(index_name, option) ⇒ Object
235
236
237
238
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 235
def secondary_index_option index_name, option
@secondary_index_option = {} if @secondary_index_option.nil?
@secondary_index_option[index_name] = option
end
|
.set_init_attribute_definitions ⇒ Object
104
105
106
107
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 104
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
56
57
58
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 56
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
269
270
271
|
# File 'lib/dynamosaurus/dynamo_class.rb', line 269
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.to_s]
end
|
#[]=(key, value) ⇒ Object
27
28
29
|
# File 'lib/dynamosaurus/dynamo_base.rb', line 27
def []=(key,value)
@data[key.to_s] = 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
|