Module: Dynameek::Model::DynamoDb
- Included in:
- ClassMethods
- Defined in:
- lib/dynameek/model/dynamo_db.rb
Defined Under Namespace
Classes: StackFrame
Instance Method Summary collapse
- #build! ⇒ Object
- #convert_from_dynamodb(type, value) ⇒ Object
- #convert_to_dynamodb(type, value) ⇒ Object
- #dump_safe(obj) ⇒ Object
- #dynamo_db ⇒ Object
- #exists? ⇒ Boolean
- #index_table ⇒ Object
- #index_table_exists? ⇒ Boolean
- #table ⇒ Object
Instance Method Details
#build! ⇒ Object
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/dynameek/model/dynamo_db.rb', line 76 def build! return if dynamo_db.tables[table_name].exists? opts = {:hash_key => { hash_key_info.field => [:datetime, :integer, :float].include?(hash_key_info.type) ? :number : hash_key_info.type }} if range? opts[:range_key] = { range_info.field => [:datetime, :integer, :float].include?(range_info.type) ? :number : range_info.type } end new_table = nil idx_table = nil if index_table? && !dynamo_db.tables[index_table_name].exists? dynamo_db.tables.create( table_name+"_INDEX", read_units, write_units, opts) new_table = dynamo_db.tables.create( table_name, read_units, write_units, { hash_key: { hash_key_info.field.to_s+"_"+range_info.field.to_s => :string }, range_key: {"dynameek_index" => :number} }) else new_table = dynamo_db.tables.create(table_name, read_units, write_units, opts) end while new_table.status == :creating || (!idx_table.nil? && idx_table.status == :creating) sleep 1 end end |
#convert_from_dynamodb(type, value) ⇒ Object
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/dynameek/model/dynamo_db.rb', line 4 def convert_from_dynamodb(type, value) return nil if value.nil? case type when :integer value.to_i when :float value.to_f when :string value.to_s when :datetime Time.at(value).to_datetime when :binary Marshal.load(value) else value end end |
#convert_to_dynamodb(type, value) ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/dynameek/model/dynamo_db.rb', line 21 def convert_to_dynamodb(type, value) return nil if value.nil? case type when :datetime value.to_time.to_f when :binary dump_safe(value) Marshal.dump(value) else value end end |
#dump_safe(obj) ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/dynameek/model/dynamo_db.rb', line 35 def dump_safe(obj) return obj if(!obj.is_a?(Hash) && !obj.is_a?(Array)) make_safe = lambda do |thing| if thing.is_a?(Hash) #thing.default_proc = nil thing.default = nil end end stack = [] safe = obj make_safe.call(safe) stack.push(StackFrame.new(safe, 0)) while(current_frame = stack.pop) current = current_frame.current index = current_frame.index obj = current.is_a?(Hash) ? current[current.keys[index]] : current[index] make_safe.call(obj) if index - 1 < current.size # Re-add current enumerable if still elements to check stack.push(StackFrame.new(current, index + 1)) end if obj.is_a?(Hash) || obj.is_a?(Array) #If obj is enumerable add to stack stack.push(StackFrame.new(obj, 0)) end end safe end |
#dynamo_db ⇒ Object
103 104 105 106 |
# File 'lib/dynameek/model/dynamo_db.rb', line 103 def dynamo_db @dynamo_db ||= AWS::DynamoDB.new @dynamo_db end |
#exists? ⇒ Boolean
72 73 74 |
# File 'lib/dynameek/model/dynamo_db.rb', line 72 def exists? table.exists? end |
#index_table ⇒ Object
114 115 116 117 118 119 120 121 |
# File 'lib/dynameek/model/dynamo_db.rb', line 114 def index_table build! @index_table ||= dynamo_db.tables[index_table_name] if @index_table.exists? && !@index_table.schema_loaded? @index_table.load_schema end @index_table end |
#index_table_exists? ⇒ Boolean
68 69 70 |
# File 'lib/dynameek/model/dynamo_db.rb', line 68 def index_table_exists? !index_table.nil? && index_table.exists? end |
#table ⇒ Object
108 109 110 111 112 113 |
# File 'lib/dynameek/model/dynamo_db.rb', line 108 def table build! @table ||= dynamo_db.tables[table_name] @table.load_schema if !@table.schema_loaded? @table end |