package Bot::Infobot::Importer::Factpack;
use strict;
use Fcntl qw(:seek);
sub handle {
return $_[0] =~ m!\.fact$!i;
}
sub new {
my $class = shift;
my $file = shift;
my $fh;
open($fh, $file) || die "Couldn't open $file for reading : $!\n";
my $rows = 0;
$rows++ while <$fh>;
seek $fh, 0, SEEK_SET;
return bless { _fh => $fh, _rows => $rows }, $class;
}
sub fetch {
my ($self, $table, $key) = @_;
$self->{_table} = $table;
$self->{_key} = (defined $key)? $key : undef;
}
sub rows {
my $self = shift;
return 0 if $self->{_table} ne 'is';
return $self->{_rows};
}
sub next {
my $self = shift;
return unless $self->{_table} eq 'is';
my $fh = $self->{_fh};
while ( my $line = <$fh> ) {
chomp($line);
$line =~ s!\s*$!!; # trim
my ($left, $right) = split(/\s*=>\s*/, $line, 2);
next unless defined $left;
next if defined $self->{_key} && $left ne $self->{_key};
return { key => $left, value => $right };
}
return;
}
sub finish {
my $self = shift;
close($self->{_fh});
}
1;