class Terrestrial::Adapters::MemoryAdapter
Attributes
relations[R]
Public Class Methods
build_from_schema(schema, raw_storage)
click to toggle source
# File lib/terrestrial/adapters/memory_adapter.rb, line 7 def self.build_from_schema(schema, raw_storage) schema.each { |name, _| raw_storage[name] = [] } relations = Hash[schema.map { |name, columns| [name, Relation.new(columns, raw_storage.fetch(name))] }] new(schema, relations) end
new(schema, relations)
click to toggle source
# File lib/terrestrial/adapters/memory_adapter.rb, line 17 def initialize(schema, relations) @schema = schema @relations = relations end
Public Instance Methods
[](table_name)
click to toggle source
# File lib/terrestrial/adapters/memory_adapter.rb, line 54 def [](table_name) @relations.fetch(table_name) end
rename_table(name, new_name)
click to toggle source
# File lib/terrestrial/adapters/memory_adapter.rb, line 38 def rename_table(name, new_name) relations[new_name] = relations[name] relations.delete(name) @schema[new_name] = @schema[name] @schema.delete(name) self end
schema(table_name)
click to toggle source
# File lib/terrestrial/adapters/memory_adapter.rb, line 25 def schema(table_name) @schema.fetch(table_name).map { |column_info| [ column_info.fetch(:name), column_info.fetch(:options, { primary_key: false }), ] } end
tables()
click to toggle source
# File lib/terrestrial/adapters/memory_adapter.rb, line 34 def tables @relations.keys end
transaction(&block)
click to toggle source
# File lib/terrestrial/adapters/memory_adapter.rb, line 46 def transaction(&block) old_state = Marshal.load(Marshal.dump(relations)) block.call rescue Object => e rollback(old_state) raise e end
upsert(record)
click to toggle source
# File lib/terrestrial/adapters/memory_adapter.rb, line 58 def upsert(record) existing = self[record.namespace].where(record.identity) if existing.any? existing.update(record.updatable_attributes) else self[record.namespace].insert(record.to_h) end rescue Object => e raise Terrestrial::UpsertError.new(record.namespace, record.to_h, e) end
Private Instance Methods
rollback(relations)
click to toggle source
# File lib/terrestrial/adapters/memory_adapter.rb, line 72 def rollback(relations) @relations = relations end