Class: Microframe::ORM::Base

Inherits:
Object
  • Object
show all
Extended by:
QueryUtils, Relationships
Defined in:
lib/microframe/orm/base.rb,
lib/microframe/orm/class_queries.rb

Constant Summary collapse

@@queryset =
{}

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Relationships

belongs_to, has_many

Methods included from QueryUtils

add_query, build_query, execute, parse_result_to_objects, process_from, process_generic, process_limit, process_order, process_query, process_select, process_where, query_processes

Class Method Details

.allObject



62
63
64
65
# File 'lib/microframe/orm/class_queries.rb', line 62

def all
  add_query("SELECT", "*") unless @@queryset && @@queryset["SELECT"]
  fetch_result
end

.countObject



85
86
87
88
# File 'lib/microframe/orm/class_queries.rb', line 85

def count
  result = all
  result.size
end

.create(options = {}) ⇒ Object



50
51
52
53
54
55
56
# File 'lib/microframe/orm/class_queries.rb', line 50

def create(options={})
  keys = options.keys.join(", ")
  values = options.values
  placeholders = Array.new(values.size, "?").join(", ")
  Connection.connect.execute("INSERT INTO #{table_name} (#{keys}) VALUES (#{placeholders})", values)
  self
end

.create_tableObject



26
27
28
29
30
31
32
# File 'lib/microframe/orm/class_queries.rb', line 26

def create_table
  query = "CREATE TABLE IF NOT EXISTS #{table_name} (#{@@create_table_query.join(", ")})"
  if Connection.execute(query)
    @@create_table_query = nil
    define_attributes
  end
end

.define_attributesObject



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/microframe/orm/class_queries.rb', line 34

def define_attributes
  Connection.retrieve_columns(table_name).each do |column|
    define_method("#{column}=") do |val|
      instance_var = "@#{column}"
      instance_variable_set("@save_queryset", {}) unless @save_queryset
      @save_queryset[column] = val unless column == "id"
      instance_variable_set(instance_var, val)
    end

    define_method(column) do
      instance_var = "@#{column}"
      instance_variable_get(instance_var)
    end
  end
end

.destroy(id) ⇒ Object



110
111
112
# File 'lib/microframe/orm/class_queries.rb', line 110

def destroy(id)
  destroy_all("WHERE id = #{id}")
end

.destroy_all(xtra = "; VACUUM") ⇒ Object



114
115
116
117
118
# File 'lib/microframe/orm/class_queries.rb', line 114

def destroy_all(xtra = "; VACUUM")
  query = "DELETE FROM #{table_name} #{xtra}"
  execute(query)
  self
end

.fetch_resultObject



125
126
127
128
129
# File 'lib/microframe/orm/class_queries.rb', line 125

def fetch_result
  result = process_query(@@queryset)
  @@queryset = {}
  parse_result_to_objects(result)
end

.find(id) ⇒ Object



67
68
69
# File 'lib/microframe/orm/class_queries.rb', line 67

def find(id)
  find_by(id: id)
end

.find_by(options = {}) ⇒ Object



71
72
73
# File 'lib/microframe/orm/class_queries.rb', line 71

def find_by(options = {})
  where(options)
end

.firstObject



90
91
92
93
# File 'lib/microframe/orm/class_queries.rb', line 90

def first
  limit(1)
  fetch_result
end

.inherited(base) ⇒ Object



13
14
15
16
# File 'lib/microframe/orm/class_queries.rb', line 13

def inherited(base)
  base.include InstanceQueries
  base.include QueryUtils
end

.lastObject



95
96
97
98
# File 'lib/microframe/orm/class_queries.rb', line 95

def last
  limit(1).order("id DESC")
  fetch_result
end

.limit(val) ⇒ Object



100
101
102
103
# File 'lib/microframe/orm/class_queries.rb', line 100

def limit(val)
  @@queryset["LIMIT"] = val
  self
end

.order(val) ⇒ Object



105
106
107
108
# File 'lib/microframe/orm/class_queries.rb', line 105

def order(val)
  @@queryset["ORDER BY"] = val
  self
end

.property(col_name, options = {}) ⇒ Object



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

def property(col_name, options = {})
  @@create_table_query ||= []
  options[:type] = options[:type].to_s.upcase
  options[:nullable] = options[:nullable] ? "NULL" : "NOT NULL"
  options[:primary_key] = options[:primary_key] ? "PRIMARY KEY AUTOINCREMENT" : ""
  @@create_table_query << col_name.to_s + " " + options.values.join(" ")
end

.select(val) ⇒ Object



81
82
83
# File 'lib/microframe/orm/class_queries.rb', line 81

def select(val)
  add_query("SELECT", val)
end

.table_nameObject



58
59
60
# File 'lib/microframe/orm/class_queries.rb', line 58

def table_name
  self.to_s.downcase + "s"
end

.update_queryset(key, value) ⇒ Object



120
121
122
123
# File 'lib/microframe/orm/class_queries.rb', line 120

def update_queryset(key, value)
  @@queryset ||= {}
  @@queryset[key] = @@queryset[key] ?  @@queryset[key] << value : [value]
end

.where(options = {}) ⇒ Object



75
76
77
78
79
# File 'lib/microframe/orm/class_queries.rb', line 75

def where(options = {})
  sql = ""
  options.each {|key, val| sql << "#{key.to_s} = '#{val}'"}
  add_query("WHERE",  sql)
end

Instance Method Details

#table_nameObject



13
14
15
# File 'lib/microframe/orm/base.rb', line 13

def table_name
  self.class.table_name
end

#update_queryset(key, value) ⇒ Object



8
9
10
11
# File 'lib/microframe/orm/base.rb', line 8

def update_queryset(key, value)
  @queryset ||= Hash.new(Array.new)
  @queryset[key] = @queryset[key] << value
end