概要: Plagger::Plugin::Filter::SortEntries を改造した。
前に作った P::P::Filter::SortEntries /post/50891542014 をちょっと改造して、 ソートの基準となるプロパティに入ってるオブジェクトのメソッドまで呼び出せるようにしてみた。
要するに、
plugins: - module: Filter::SortEntries config: property: date->format('Epoch') reverse: 1
こんな感じで指定できるようにした。上記設定の場合、
$entry->date->format(*Epoch*)
がソートに使われるプロパティになる。
で、修正したコード。
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('entries'), ); } sub entries { my ( $self, $c, $args ) = @_; my @entries = $args->{'feed'}->entries; my $property = $self->conf->{'property'} or $c->log( error => "Config 'property' is not specified." ) and return; my $sort_sub = '$a->' . $property . ' cmp ' . '$b->' . $property; @entries = sort { eval $sort_sub } @entries; @entries = reverse @entries if ( $self->conf->{'reverse'} ); $args->{'feed'}->{'entries'} = \@entries; return 1; } 1; __END__ =head1 NAME Plagger::Plugin::Filter::SortEntries - Sort entries of Feed. =head1 SYNOPSIS - module: Filter::SortEntries config: property: date->format('Epoch') reverse: 1 =head1 DESCRIPTION This plug-in sorts entry of Feed. =head1 CONFIG =head2 property specification property for sorting. =head2 reverse reverse of sort result =head1 AUTHOR Naoki Okamura (Nyarla,) Ethotep@nyarla.netE =head1 LICENSE This Plug-in is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L =cut
ちなみに SweetPotato さんが同名で中身が違うプラグインを作って いて、 同じ名前なんだからくっつけてしまえーということで改造した。
設定は違うけど、SweetPotato さんの Filter::SortEntries と同等のことが出来るはず。