Class: EventMachine::DNSBL::Zone::Sqlite3Zone

Inherits:
AbstractZone
  • Object
show all
Defined in:
lib/eventmachine/dnsbl/zone/sqlite3_zone.rb

Instance Method Summary collapse

Methods inherited from AbstractZone

#get_records

Constructor Details

#initialize(sqlite3, tablename = "zone") ⇒ Sqlite3Zone

Returns a new instance of Sqlite3Zone.



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 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

Instance Method Details

#add_dnsblresource(dnsblrr) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
# 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) ⇒ Object



55
56
57
# 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) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# 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