class EventMachine::DNSBL::Zone::Sqlite3Zone

Public Class Methods

new(sqlite3, tablename = "zone") click to toggle source
# File lib/eventmachine/dnsbl/zone/sqlite3_zone.rb, line 10
def initialize(sqlite3, tablename = "zone")
  @class = DNSBLResourceRecord
  @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
    @db.execute("CREATE TABLE #{@tablename} (#{@fields})")
  end            
  @zones = Array.new
  @backend = Hash.new
end

Public Instance Methods

add_dnsblresource(dnsblrr) click to toggle source
# File lib/eventmachine/dnsbl/zone/sqlite3_zone.rb, line 26
def add_dnsblresource(dnsblrr)
  dnsblrr.answer = dnsblrr.answer.address.to_s
  args = (@class.members).map{|f| dnsblrr.send(f)}
  qs = args.map{|x| "'#{quote(x.to_s)}'"}.join(",").gsub(/'NULL'/, "NULL")
  zone = dnsblrr[:zone]
  if not @zones.include?(zone)
    @zones << zone
    @zones = @zones.uniq.sort {|a,b| b.length <=> a.length}
  end
  sql = "INSERT INTO #{@tablename} (#{@fields}) VALUES (#{qs})"
  @db.execute(sql)
end
get_all_records_for_zone(zone) click to toggle source
# File lib/eventmachine/dnsbl/zone/sqlite3_zone.rb, line 55
def get_all_records_for_zone(zone)
  get_records_by_field_and_value("zone", zone)
end
get_records_by_field_and_value(field, value) click to toggle source
# File lib/eventmachine/dnsbl/zone/sqlite3_zone.rb, line 39
def get_records_by_field_and_value(field, value)
  records = Array.new
  rs = @db.execute("SELECT #{@fields} FROM #{@tablename} WHERE #{field}='#{value}'")
  rs.each do |row|
    row[1] = Regexp.new(row[1])
    row[3] = Resolv::DNS::Resource::IN::A.new(row[3])
    if row[4] =~ /\d/
      row[4] = row[4].to_i
    else
      row[4] = nil
    end
    records << DNSBLResourceRecord.new(*row)
  end
  records
end

Private Instance Methods

quote( string ) click to toggle source
# File lib/eventmachine/dnsbl/zone/sqlite3_zone.rb, line 59
def quote( string )
  string.gsub( /'/, "''" )
end