Class: Grimm::GrimmRecord

Inherits:
Object show all
Defined in:
lib/grimm/orm/queries.rb,
lib/grimm/orm/grimm_record.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.allObject



10
11
12
13
14
15
16
# File 'lib/grimm/orm/queries.rb', line 10

def self.all
  data = DatabaseConnector.execute "SELECT #{properties_keys.join(',')}
  FROM #{@table}"
  data.map do |row|
    map_object(row)
  end
end

.autoincrement_query(value = false) ⇒ Object



41
42
43
# File 'lib/grimm/orm/grimm_record.rb', line 41

def self.autoincrement_query(value = false)
  "AUTOINCREMENT" if value
end

.create_tableObject



17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/grimm/orm/grimm_record.rb', line 17

def self.create_table
  prop_array = []
  @properties.each do |key, value|
    properties ||= []
    properties << key.to_s
    value.each do |name, type|
      properties << send("#{name.downcase}_query", type)
    end
    prop_array << properties.join(" ")
  end
  query = "CREATE TABLE IF NOT EXISTS #{@table} (#{prop_array.join(', ')})"
  DatabaseConnector.execute(query)
  make_methods
end

.delete(id) ⇒ Object



26
27
28
# File 'lib/grimm/orm/queries.rb', line 26

def self.delete(id)
  DatabaseConnector.execute "DELETE FROM #{@table} WHERE id = ?", id
end

.delete_allObject



30
31
32
# File 'lib/grimm/orm/queries.rb', line 30

def self.delete_all
  DatabaseConnector.execute "DELETE FROM #{@table}"
end

.find(id) ⇒ Object



4
5
6
7
8
# File 'lib/grimm/orm/queries.rb', line 4

def self.find(id)
  row = DatabaseConnector.execute("SELECT #{properties_keys.join(',')}
  FROM #{@table} WHERE id = ?", id).first
  map_object(row)
end

.firstObject



39
40
41
42
# File 'lib/grimm/orm/queries.rb', line 39

def self.first
  query = "SELECT * FROM #{@table} ORDER BY id LIMIT 1"
  (DatabaseConnector.execute query).first
end

.lastObject



34
35
36
37
# File 'lib/grimm/orm/queries.rb', line 34

def self.last
  query = "SELECT * FROM #{@table} ORDER BY id DESC LIMIT 1"
  (DatabaseConnector.execute query).first
end

.latestObject



18
19
20
21
22
23
24
# File 'lib/grimm/orm/queries.rb', line 18

def self.latest
  data = DatabaseConnector.execute "SELECT #{properties_keys.join(',')}
  FROM #{@table} ORDER BY created_at DESC"
  data.map do |row|
    map_object(row)
  end
end

.make_methodsObject



32
33
34
35
# File 'lib/grimm/orm/grimm_record.rb', line 32

def self.make_methods
  mtds = @properties.keys.map(&:to_sym)
  mtds.each { |mtd| attr_accessor mtd }
end

.map_object(row) ⇒ Object



88
89
90
91
92
93
94
# File 'lib/grimm/orm/grimm_record.rb', line 88

def self.map_object(row)
  model_name = new
  @properties.each_key.with_index do |value, index|
    model_name.send("#{value}=", row[index])
  end
  model_name
end

.nullable_query(value = true) ⇒ Object



45
46
47
# File 'lib/grimm/orm/grimm_record.rb', line 45

def self.nullable_query(value = true)
  "NOT NULL" unless value
end

.primary_key_query(value = false) ⇒ Object



37
38
39
# File 'lib/grimm/orm/grimm_record.rb', line 37

def self.primary_key_query(value = false)
  "PRIMARY KEY AUTOINCREMENT" if value
end

.properties_keysObject



53
54
55
# File 'lib/grimm/orm/grimm_record.rb', line 53

def self.properties_keys
  @properties.keys
end

.property(column_name, args) ⇒ Object



12
13
14
15
# File 'lib/grimm/orm/grimm_record.rb', line 12

def self.property(column_name, args)
  @properties ||= {}
  @properties[column_name] = args
end

.table_nameObject



44
45
46
# File 'lib/grimm/orm/queries.rb', line 44

def self.table_name
  @table
end

.to_table(table_name) ⇒ Object



8
9
10
# File 'lib/grimm/orm/grimm_record.rb', line 8

def self.to_table(table_name)
  @table = table_name
end

.type_query(value) ⇒ Object



49
50
51
# File 'lib/grimm/orm/grimm_record.rb', line 49

def self.type_query(value)
  value.to_s
end

Instance Method Details

#get_columnsObject



69
70
71
72
73
# File 'lib/grimm/orm/grimm_record.rb', line 69

def get_columns
  columns = self.class.properties_keys
  columns.delete(:id)
  columns.join(",")
end

#get_valuesObject



57
58
59
60
61
# File 'lib/grimm/orm/grimm_record.rb', line 57

def get_values
  attributes = self.class.properties_keys
  attributes.delete(:id)
  attributes.map { |method| send(method) }
end

#new_record_placeholdersObject



83
84
85
86
# File 'lib/grimm/orm/grimm_record.rb', line 83

def new_record_placeholders
  properties = self.class.properties_keys
  (["?"] * (properties.size - 1)).join(",")
end

#new_record_valueObject



79
80
81
# File 'lib/grimm/orm/grimm_record.rb', line 79

def new_record_value
  get_values
end

#saveObject



48
49
50
51
52
53
54
55
56
57
# File 'lib/grimm/orm/queries.rb', line 48

def save
  table_name = self.class.table_name
  if id
    DatabaseConnector.execute "UPDATE #{table_name} SET
    #{update_records_placeholders} WHERE id = ?", update_records
  else
    DatabaseConnector.execute "INSERT INTO #{table_name} (#{get_columns})
    VALUES  (#{new_record_placeholders})", new_record_value
  end
end

#update_recordsObject



75
76
77
# File 'lib/grimm/orm/grimm_record.rb', line 75

def update_records
  get_values << send(:id)
end

#update_records_placeholdersObject



63
64
65
66
67
# File 'lib/grimm/orm/grimm_record.rb', line 63

def update_records_placeholders
  columns = self.class.properties_keys
  columns.delete(:id)
  columns.map { |col| "#{col}=?" }.join(",")
end