Class: MyActiveRecord::Database

Inherits:
Object
  • Object
show all
Defined in:
lib/my_active_record/database.rb

Class Method Summary collapse

Class Method Details

.adapterObject



54
55
56
# File 'lib/my_active_record/database.rb', line 54

def adapter
  @adapter || raise("Database adapter is not set")
end

.adapter=(adapter) ⇒ Object



50
51
52
# File 'lib/my_active_record/database.rb', line 50

def adapter=(adapter)
  @adapter = adapter
end

.establish_connection(params) ⇒ Object



4
5
6
7
8
9
10
11
# File 'lib/my_active_record/database.rb', line 4

def establish_connection(params)
  if params.delete(:adapter) == "csv"
    self.adapter = MyActiveRecord::CsvAdapter.new(params)
  else
    raise "Unsupported adapter type"
  end
  load_database_schema
end

.insert(table_name, model) ⇒ Object



37
38
39
40
# File 'lib/my_active_record/database.rb', line 37

def insert(table_name, model)
  model.id = model.class.last.id.to_i + 1
  adapter.insert(table_name, model.to_row)
end

.last(table_name) ⇒ Object



46
47
48
# File 'lib/my_active_record/database.rb', line 46

def last(table_name)
  table_to_model(table_name).load_data(adapter.last(table_name))
end

.load_database_schemaObject



17
18
19
20
21
22
23
# File 'lib/my_active_record/database.rb', line 17

def load_database_schema
  @tables = {}
  MyActiveRecord::Base.descendants.each do |descendant|
    @tables[descendant.table_name] = descendant
    load_table_schema(descendant.table_name) if descendant.name
  end
end

.load_table_schema(table_name) ⇒ Object



25
26
27
# File 'lib/my_active_record/database.rb', line 25

def load_table_schema(table_name)
  table_to_model(table_name).fields = adapter.load_table_schema(table_name)
end

.table_to_model(table_name) ⇒ Object



13
14
15
# File 'lib/my_active_record/database.rb', line 13

def table_to_model(table_name)
  @tables[table_name]
end

.update(table_name, model) ⇒ Object



42
43
44
# File 'lib/my_active_record/database.rb', line 42

def update(table_name, model)
  adapter.update(table_name, model.to_row)
end

.where(table_name, params) ⇒ Object



29
30
31
32
33
34
35
# File 'lib/my_active_record/database.rb', line 29

def where(table_name, params)
  results = adapter.where(table_name, params)
  model   = table_to_model(table_name)
  results.map do |result|
    model.load_data(result)
  end
end