古いentryからDedupedしつつ1件ずつPublishするyaml

「サンプルコードによるPerl入門」を、最初の記事から順にメールで読みたいなあと思って書いてみた。
昨日のPlugin::Expressionを使ってます。

global:
  ...
plugins:
  - module: Subscription::Config
    config:
      feed: http://d.hatena.ne.jp/taraburo/rss2

  - module: Expression
    config:
      hooks:
        hook: update.feed.fixup
        expression: |
          my ($self, $context, $args) = @_;
          my $dedup = Plagger::Rule->new({
              module => 'Deduped',
              path => '/path/to/deduped.db',
          });
          my @entries = grep {
              $dedup->{deduper}->is_new($_);
          } $args->{feed}->entries;
          my $last_entry;
          if (@entries) {
              $last_entry = pop @entries;
              $dedup->{deduper}->add($last_entry);
              $context->log(debug => "deduper add entry: " . $last_entry->title);
          }
          $args->{feed}->{entries} = $last_entry ? [ $last_entry ] : [];

  - module: Publish::Gmail
    config:
      ...

こんなんしなくてもPluginとRule組み合わせればもっとスマートにいけるような気がするけど気にしない。


最初はFilter::ReverseとFilter::Ruleでいけるかと思ったんだけどなあ。

  - module: Filter::Reverse
  - module: Filter::Rule
    rule:
      - module: RecentN
        count: 1
      - module: Deduped

RecentNで1件に削ってそれをDedupedしてくれるわけじゃないんですね。