カラクリサイクル

『輝かしい青春』なんて失かった人の雑記

Plagger::Plugin::Filter::SortEntries

概要: 任意のプロパティでエントリをソートする


Plagger::Feed->titleで昇順ソートとか、 Plagger::Feed->linkで降順ソートとかしたかったため作ってみた。

package Plagger::Plugin::Filter::SortEntries;
use strict;
use warnings;
use base qw( Plagger::Plugin );
sub register {
    my ( $self, $c ) = @_;
    $c->register_hook(
        $self,
        'publish.feed' => $self->can('feed'),
    );
}
sub feed {
    my ( $self, $c, $args ) = @_;
    my @entries = $args->{'feed'}->entries
        or return;
    my $key = $self->conf->{'key'}
        or $c->log( error => "Config 'key' is not specified." ) and return;
    @entries = sort { $a->$key cmp $b->$key } @entries;
    @entries = reverse @entries if ( $self->conf->{'reverse'} );
    $args->{'feed'}->{'entries'} = \@entries;
}
1;
__END__

ライセンスはPerlと同等で、設定はこんな感じ。

plugin:
  - module: Filter::SortEntries
    config:
      key: title
      reverse: 1

keyがソートをするためのキーを指定、reverseが昇順か降順の指定。 reverseが偽だと昇順、真だと降順になる。

SmartFeedをソートできるようにするため、publish.feedで動作しているので、 ちょっと注意が必要。

Plagger::Feed自体にエントリのソート機能はついてるんだけど、 ソート方法が固定だったので、作ってみた次第。

Publihs::TemplateとかPublihs::Fileとかで使うために作ったものの、 あんまり使い道はないかも。