Plagger::Plugin::Filter::SortEntries #2

読了まで:約0分


概要: 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,) [email protected]
=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 と同等のことが出来るはず。

#FIXME

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

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

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