diff options
author | dakkar <dakkar@thenautilus.net> | 2012-12-09 15:30:06 +0000 |
---|---|---|
committer | dakkar <dakkar@thenautilus.net> | 2012-12-09 15:30:06 +0000 |
commit | 7a005adbf486cbb6c3f64ba26b1aa97c2f696025 (patch) | |
tree | 29f1e82702d43f5e1710a990416d2b032065db50 /lib/Feed/DeDupe.pm | |
parent | maildir publisher (diff) | |
download | feeder-7a005adbf486cbb6c3f64ba26b1aa97c2f696025.tar.gz feeder-7a005adbf486cbb6c3f64ba26b1aa97c2f696025.tar.bz2 feeder-7a005adbf486cbb6c3f64ba26b1aa97c2f696025.zip |
renaming roles
Diffstat (limited to 'lib/Feed/DeDupe.pm')
-rw-r--r-- | lib/Feed/DeDupe.pm | 141 |
1 files changed, 0 insertions, 141 deletions
diff --git a/lib/Feed/DeDupe.pm b/lib/Feed/DeDupe.pm deleted file mode 100644 index f617154..0000000 --- a/lib/Feed/DeDupe.pm +++ /dev/null @@ -1,141 +0,0 @@ -package Feed::DeDupe; -use Moose::Role; -use 5.016; -use namespace::autoclean -also => ['_maybe_build_schema']; -use DBI; -use Try::Tiny; -use Encode; -use Digest::SHA1 'sha1_base64'; - -requires 'get_feed','process','process_entry'; - -has 'dupe_dsn' => ( - is => 'ro', - isa => 'Str', - required => 1, -); - -has dbh => ( - is => 'ro', - lazy_build => 1, -); - -has ['_find_sth','_insert_sth'] => ( - is => 'ro', - lazy_build => 1, -); - -sub _build_dbh { - my ($self) = @_; - - my $dbh = DBI->connect($self->dupe_dsn,undef,undef,{ - RaiseError => 1, - PrintError => 0, - AutoCommit => 0, - }); - - _maybe_build_schema($dbh); - - return $dbh; -} - -sub _maybe_build_schema { - my ($dbh) = @_; - - try { - $dbh->selectrow_array(q{SELECT * FROM seen_items LIMIT 1}); - $dbh->rollback; - } catch { - $dbh->do(<<'SQL'); -CREATE TABLE seen_items ( - id VARCHAR(255) PRIMARY KEY -) -SQL -$dbh->commit; - }; - - return; -} - -sub _build__find_sth { - my ($self) = @_; - - return $self->dbh->prepare(<<'SQL'); -SELECT COUNT(*) -FROM seen_items -WHERE id=? -SQL -} - -sub _build__insert_sth { - my ($self) = @_; - - return $self->dbh->prepare(<<'SQL'); -INSERT INTO seen_items(id) -VALUES (?) -SQL -} - -after process => sub { - my ($self) = @_; - - $self->log->trace('after process'); - - $self->dbh->commit; -}; - -around process_entry => sub { - my ($orig,$self,$entry) = @_; - - $self->log->trace('around process_entry - begin'); - - return if $self->seen_already($entry); - - $self->log->trace('around process_entry - call original'); - - $self->$orig($entry); - - $self->mark_seen($entry); - - $self->log->trace('around process_entry - end'); - - return; -}; - -sub seen_already { - my ($self,$e) = @_; - - $self->log->trace('seen_already - begin'); - - my $id = $self->_entry_id($e); - - $self->_find_sth->execute($id); - my ($count) = $self->_find_sth->fetchrow_array; - - $self->log->trace("seen_already - end ($count)"); - - return $count; -} - -sub mark_seen { - my ($self,$e) = @_; - - $self->log->trace('mark_seen - begin'); - - my $id = $self->_entry_id($e); - - $self->_insert_sth->execute($id); - - $self->log->trace('mark_seen - end'); -} - -sub _entry_id { - my ($self,$e) = @_; - - my $body = $e->content->body; - my $content_digest = sha1_base64(encode('utf-8',$body)); - my $id = join '-',$e->id,$e->modified->iso8601,$content_digest; - return encode('utf-8',$id); -} - -1; |