class EventMachine::EmailServer::Sqlite3EmailStore
Public Class Methods
new(sqlite3, tablename = "emails")
click to toggle source
# File lib/eventmachine/email_server/sqlite3.rb, line 72 def initialize(sqlite3, tablename = "emails") @class = Email @fields = "'"+@class.members.map {|x| x.to_s}.join("', '")+"'" @tablename = tablename if sqlite3.class == SQLite3::Database @db = sqlite3 else @db = SQLite3::Database.new(sqlite3) end if @db.table_info(tablename).length == 0 fields = @fields.gsub(/'id'/, 'id integer primary key autoincrement') @db.execute("CREATE TABLE #{@tablename} (#{fields})") end end
Public Instance Methods
count()
click to toggle source
# File lib/eventmachine/email_server/sqlite3.rb, line 148 def count sql = "SELECT COUNT(*) FROM #{@tablename}" rs = @db.execute(sql) c = 0 rs.each do |row| c = row[0] end c end
delete_by_field(field, value)
click to toggle source
# File lib/eventmachine/email_server/sqlite3.rb, line 135 def delete_by_field(field, value) sql = "DELETE FROM #{@tablename} WHERE #{field} = ?" @db.execute(sql, value) end
delete_email(email)
click to toggle source
# File lib/eventmachine/email_server/sqlite3.rb, line 129 def delete_email(email) if email.id delete_by_field("id", email.id) end end
delete_id(id)
click to toggle source
# File lib/eventmachine/email_server/sqlite3.rb, line 140 def delete_id(id) delete_by_field("id", id) end
delete_user(uid)
click to toggle source
# File lib/eventmachine/email_server/sqlite3.rb, line 144 def delete_user(uid) delete_by_field("uid", uid) end
emails_by_field(field, value)
click to toggle source
# File lib/eventmachine/email_server/sqlite3.rb, line 87 def emails_by_field(field, value) sql = "SELECT * FROM #{@tablename} WHERE #{quote(field)}='#{quote(value.to_s)}'" rs = @db.execute(sql) return nil unless rs emails = Array.new rs.each do |row| emails << Email.new(*row) end emails end
emails_by_userid(uid)
click to toggle source
# File lib/eventmachine/email_server/sqlite3.rb, line 98 def emails_by_userid(uid) emails_by_field("uid", uid) end
save_email(email)
click to toggle source
# File lib/eventmachine/email_server/sqlite3.rb, line 107 def save_email(email) if email.id # I'm being too crafty here.. this is bad style args = (@class.members - [:id]).map{|f| email.send(f)} args << email.send(:id) @db.execute("UPDATE #{@tablename} SET " + (@class.members - [:id]).map { |field| "#{field} = ?"}.join(", ") + " WHERE id = ?", *args) else email.id = "NULL" args = (@class.members).map{|f| email.send(f)} qs = args.map{|x| "'#{quote(x.to_s)}'"}.join(",").gsub(/'NULL'/, "NULL") sql = "INSERT INTO #{@tablename} (#{@fields}) VALUES (#{qs})" @db.execute(sql) rs = @db.execute("SELECT last_insert_rowid()") rs.each do |row| email.id = *row end end email.id end
Private Instance Methods
quote( string )
click to toggle source
# File lib/eventmachine/email_server/sqlite3.rb, line 102 def quote( string ) string.gsub( /'/, "''" ) end