Class: NetMate::Model
- Inherits:
-
Object
- Object
- NetMate::Model
- Defined in:
- lib/net_mate/model.rb
Constant Summary collapse
- @@columns =
[]
Class Method Summary collapse
- .all ⇒ Object
- .find(id) ⇒ Object
- .find_by(col_name, value) ⇒ Object
- .find_by_sql(sql_query) ⇒ Object
Instance Method Summary collapse
- #destroy ⇒ Object
- #find_name ⇒ Object
- #get_columns ⇒ Object
-
#initialize(args = {}) ⇒ Model
constructor
A new instance of Model.
- #make_accessors ⇒ Object
- #save ⇒ Object
- #update ⇒ Object
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
.all ⇒ Object
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
#destroy ⇒ Object
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_name ⇒ Object
61 62 63 |
# File 'lib/net_mate/model.rb', line 61 def find_name ActiveSupport::Inflector.tableize(self.class.name) end |
#get_columns ⇒ Object
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_accessors ⇒ Object
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 |
#save ⇒ Object
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 |
#update ⇒ Object
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 |