Plagger::Plugin::Filter::ForceDate

読了まで:約1分


概要: エントリに日付がセットされてない場合、無理やりくっつけるプラグイン。


Plagger::Entry->dateに Plagger::Date オブジェクトがなんらかの理由でセットされなかった場合、 更新されているかチェックして無理やり Plagger::Date オブジェクトをセットするプラグインを作った。

package Plagger::Plugin::Filter::ForceDate;
use strict;
use warnings;
use Plagger::CacheProxy;
use Plagger::Date;
use base qw( Plagger::Plugin );
sub register {
my ( $self, $c ) = @_;
$c->register_hook(
$self,
'update.entry.fixup' => $self->can('update'),
);
}
sub init {
my $self = shift;
$self->SUPER::init( @_ );
$self->{'cache'} = Plagger::CacheProxy->new( $self, Plagger->context->cache );
}
sub update {
my ( $self, $c, $args ) = @_;
return if ( ref $args->{'entry'}->date );
my $entry = $args->{'entry'};
my $cache = $self->{'cache'};
my $data = $cache->get( $entry->permalink );
if ( defined $data ) {
if ( $data->{'body'} eq $entry->body ) {
$entry->date( $data->{'date'} );
return;
}
else {
$entry->date( Plagger::Date->now );
}
}
else {
$entry->date( Plagger::Date->now );
}
$cache->set(
$entry->permalink => {
body => $entry->body,
date => $entry->date,
},
);
}
1;
__END__

ライセンスは Perl と同等で。

使い方は単に読み込むだけ。configとかはない。

更新をチェックするのに Plagger のキャッシュ機構をそのまんま使っているので、 Plagger 全体のキャッシュの設定に影響される。

動作としては、

  1. Plagger::Entry->date に Plagger::Date がセットされてない
  2. キャッシュから前のデータを読み込み
  3. Plagger::Entry->body を使って更新されているかチェック
  4. 更新されていなかったら前のデータ(Plagger::Date オブジェクト)をセット
  5. 更新されていたら Plagger::Date->now をセット

と言う感じ。

とにかく無理やり日付をくっつけてるだけなので、 日付が取れなかった場合の最終手段として使うのがいいかも。

ちなみにこれ、Filter::EntryFullText でどうしても日付が取れなかったのをなんとかするために作ったので、 あんまり細かいことは考えてない。

まあ、とりあえず最終手段としてはそれなりかな、と。

#FIXME

にゃるら(カラクリスタ)

『輝かしい青春』なんて失かった人。
次に備えて待機中。

今は趣味でプログラミングをして
生活しています。