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