Module: Plasma::Storage
- Defined in:
- lib/plasma/storage.rb,
lib/plasma/storage/record.rb,
lib/plasma/storage/variable.rb,
lib/plasma/storage/application_record.rb
Overview
This module handles the storage operations for PLASMA applications
Defined Under Namespace
Classes: ApplicationRecord, Record, Variable
Class Method Summary
collapse
Class Method Details
.add_record(fields = {}) ⇒ Object
58
59
60
|
# File 'lib/plasma/storage.rb', line 58
def self.add_record(fields = {})
Plasma::Storage::Record.create(data: fields)
end
|
.define_default_schema ⇒ Object
rubocop:disable Metrics/MethodLength
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
# File 'lib/plasma/storage.rb', line 13
def self.define_default_schema
ActiveRecord::Schema.define(verbose: false) do
create_table :records do |t|
t.json :data
t.timestamps
end
create_table :variables, id: false do |t|
t.string :key, primary_key: true
t.json :value
end
create_table :settings do |t|
t.string :group, null: false
t.json :data
t.timestamps
end
add_index :settings, :group, unique: true
end
end
|
.dump_to_json ⇒ Object
91
92
93
94
95
96
|
# File 'lib/plasma/storage.rb', line 91
def self.dump_to_json
{
records: find_records,
variables: Plasma::Storage::Variable.all.pluck(:key, :value).to_h
}.to_json
end
|
.establish_connection ⇒ Object
41
42
43
44
45
46
47
|
# File 'lib/plasma/storage.rb', line 41
def self.establish_connection
ActiveRecord::Base.establish_connection(
adapter: "sqlite3",
database: ":memory:"
)
ActiveRecord::Migration.verbose = false
end
|
.find_records ⇒ Object
62
63
64
|
# File 'lib/plasma/storage.rb', line 62
def self.find_records
Plasma::Storage::Record.all.map { |r| r.data.merge(id: r.id, created_at: r.created_at) }
end
|
.find_records_by_field(field, value) ⇒ Object
66
67
68
69
|
# File 'lib/plasma/storage.rb', line 66
def self.find_records_by_field(field, value)
Plasma::Storage::Record.all.select { |r| r.data[field.to_s] == value || r.data[field.to_sym] == value }
.map { |r| r.data.merge(id: r.id, created_at: r.created_at) }
end
|
.find_records_with_field(field) ⇒ Object
71
72
73
74
75
|
# File 'lib/plasma/storage.rb', line 71
def self.find_records_with_field(field)
records = Plasma::Storage::Record.all
filtered = records.select { |r| r.data.key?(field.to_s) || r.data.key?(field.to_sym) }
filtered.map { |r| r.data.merge(id: r.id, created_at: r.created_at) }
end
|
.get_var(key) ⇒ Object
87
88
89
|
# File 'lib/plasma/storage.rb', line 87
def self.get_var(key)
Plasma::Storage::Variable.find_by(key: key)&.value
end
|
.load_schema ⇒ Object
49
50
51
52
53
54
55
56
|
# File 'lib/plasma/storage.rb', line 49
def self.load_schema
schema_path = File.join(Dir.pwd, "db", "schema.rb")
if File.exist?(schema_path)
load schema_path
else
define_default_schema
end
end
|
.set_var(key, value) ⇒ Object
83
84
85
|
# File 'lib/plasma/storage.rb', line 83
def self.set_var(key, value)
Plasma::Storage::Variable.create_or_find_by(key: key).update(value: value)
end
|
.setup ⇒ Object
rubocop:enable Metrics/MethodLength
36
37
38
39
|
# File 'lib/plasma/storage.rb', line 36
def self.setup
establish_connection
load_schema
end
|
.update_record_field(id, field, value) ⇒ Object
77
78
79
80
81
|
# File 'lib/plasma/storage.rb', line 77
def self.update_record_field(id, field, value)
record = Plasma::Storage::Record.find(id)
record.data[field] = value
record.save!
end
|