Class: Terrestrial::Adapters::MemoryAdapter
- Inherits:
-
Object
- Object
- Terrestrial::Adapters::MemoryAdapter
show all
- Includes:
- AbstractAdapter
- Defined in:
- lib/terrestrial/adapters/memory_adapter.rb
Defined Under Namespace
Classes: DuplicateKeyError, Query, Relation, Upsert
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(schema, relations) ⇒ MemoryAdapter
Returns a new instance of MemoryAdapter.
17
18
19
20
|
# File 'lib/terrestrial/adapters/memory_adapter.rb', line 17
def initialize(schema, relations)
@schema = schema
@relations = relations
end
|
Class Method Details
.build_from_schema(schema, raw_storage) ⇒ Object
7
8
9
10
11
12
13
14
15
|
# 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
|
Instance Method Details
#[](table_name) ⇒ Object
54
55
56
|
# File 'lib/terrestrial/adapters/memory_adapter.rb', line 54
def [](table_name)
@relations.fetch(table_name)
end
|
#rename_table(name, new_name) ⇒ Object
38
39
40
41
42
43
44
|
# 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) ⇒ Object
25
26
27
28
29
30
31
32
|
# 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 ⇒ Object
34
35
36
|
# File 'lib/terrestrial/adapters/memory_adapter.rb', line 34
def tables
@relations.keys
end
|
#transaction(&block) ⇒ Object
46
47
48
49
50
51
52
|
# 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) ⇒ Object
58
59
60
61
62
63
64
65
66
67
68
|
# 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
|