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