Rule::Deduped::DBIC

Rule::Deduped::Baseでurlに日付を追加しているので、
http://d.hatena.ne.jp/sfujiwara/20060608/1149799538
に書いてあるソースではentryが見つからず、正しく動作しませんでした。

is_newをオーバーライドしてfind_entryの引数に日付を付けないurlが渡るように修正しました。また、useでPluginを直接ロードしていると、動的にロードするケースで困るので削除しました。

package Plagger::Rule::Deduped::DBIC;
use strict;
use base qw( Plagger::Rule::Deduped::Base );

sub is_new {
   my($self, $entry) = @_;

   my $exists = $self->find_entry( $entry->permalink ) or return 1;

   if ($self->{compare_body}) {
       return $exists ne $entry->digest;
   } else {
       return 0;
   }
}


sub find_entry {
   my($self, $url) = @_;

   my $c = Plagger->context;
   unless($self->{db}){
       my $plugins = $c->{plugins};
       my ($db) = grep { $_->isa('Plagger::Plugin::Store::DBIC') } @$plugins;
       return unless $db;
       $self->{db} = $db;
   }

   my $entry = $self->{db}->schema->resultset('Entry')->find({
           link => $url,
       });
   if($entry){
       # XXX see Plagger::Entry::digest
       my $data = $entry->title . ($entry->body || '');
       Encode::_utf8_off($data);

       return Digest::MD5::md5_hex($data);
   }
   $c->log( debug => "not found." );
   return;
}

sub create_entry {
   my($self, $url, $digest) = @_;
   Plagger->context->log( debug => "$url stored later by Store::DBIC" );
   1;
}
1;