Class: NetMate::Model

Inherits:
Object
  • Object
show all
Defined in:
lib/net_mate/model.rb

Constant Summary collapse

@@columns =
[]

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(args = {}) ⇒ Model

Returns a new instance of Model.



36
37
38
39
40
41
# File 'lib/net_mate/model.rb', line 36

def initialize args = {}
  @@columns = []
  get_columns
  make_accessors
  args.each { |k ,v| instance_variable_set("@#{k}".to_sym, v) }
end

Class Method Details

.allObject



65
66
67
# File 'lib/net_mate/model.rb', line 65

def self.all
  return find_by_sql("SELECT * FROM #{ActiveSupport::Inflector.tableize(self.name)}")
end

.find(id) ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/net_mate/model.rb', line 69

def self.find(id)
  id = id.to_i
  dbh = Connection.new.connect
  res = self.new
  dbh.query("SELECT * FROM #{ActiveSupport::Inflector.tableize(self.name)} WHERE ID = #{id}").each do |row|
    row.each { |k ,v| res.instance_variable_set("@#{k}".to_sym, v) }
  end
  rescue 
  ensure
    Connection.disconnect dbh
    return res
end

.find_by(col_name, value) ⇒ Object



96
97
98
# File 'lib/net_mate/model.rb', line 96

def self.find_by(col_name, value)
  return find_by_sql("SELECT * FROM #{ActiveSupport::Inflector.tableize(self.name)} WHERE #{col_name} = '#{value}'")
end

.find_by_sql(sql_query) ⇒ Object



82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/net_mate/model.rb', line 82

def self.find_by_sql(sql_query)
  dbh = Connection.new.connect
  res = []  
  dbh.query(sql_query).each_with_index do |row, i|
    res[i] = self.new
    row.each { |k, v| res[i].instance_variable_set("@#{k}".to_sym, v) }
  end
  rescue 
    puts "An error occurred"
  ensure
    Connection.disconnect dbh
    return res
end

Instance Method Details

#destroyObject



100
101
102
103
104
105
106
107
# File 'lib/net_mate/model.rb', line 100

def destroy
  dbh = Connection.new.connect
  dbh.query "DELETE FROM #{find_name} WHERE id = #{instance_variable_get(:@id)}"
  rescue 
    puts "An error occurred"
  ensure
    Connection.disconnect dbh
end

#find_nameObject



61
62
63
# File 'lib/net_mate/model.rb', line 61

def find_name
  ActiveSupport::Inflector.tableize(self.class.name)      
end

#get_columnsObject



28
29
30
31
32
33
34
# File 'lib/net_mate/model.rb', line 28

def get_columns
  dbh = Connection.new.connect
  dbh.query("desc #{find_name}").each do |row|
      @@columns << row.values[0]
  end      
  Connection.disconnect dbh
end

#make_accessorsObject



9
10
11
12
13
14
15
16
17
18
19
# File 'lib/net_mate/model.rb', line 9

def make_accessors
  self.class.class_eval do
    @@columns.each do |col|
      if col != 'id'
        attr_accessor col.to_sym
      else
        attr_reader :id
      end
    end
  end
end

#saveObject



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/net_mate/model.rb', line 43

def save
  table = find_name
  dbh = Connection.new.connect
  values = []
  cols = @@columns.reject { |e| e == 'id' }
  cols.each do |col|
    values << self.send(col.to_sym)
  end
  values = values.map { |v| "'#{v}'" }.join(', ')
  dbh.query "INSERT INTO #{table}(#{cols.join(',')}) VALUES (#{values})"
  rescue
    puts "An error occurred while saving into the database."
  else 
    puts "New record was saved/added successfully."
  ensure
    Connection.disconnect dbh
end

#updateObject



21
22
23
24
25
26
# File 'lib/net_mate/model.rb', line 21

def update
  dbh = Connection.new.connect
  cols = @@columns.reject { |e| e == 'id' }
  attributes = cols.each_with_index.map { |c, i| "#{c} = '#{self.send(c.to_sym)}'" }.join(', ')
  dbh.query("UPDATE #{find_name} SET #{attributes} WHERE id = #{@id} ")
end