The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
package Plagger::Plugin::Subscription::Config;
use strict;
use base qw( Plagger::Plugin );

use Plagger::Tag;

sub register {
    my($self, $context) = @_;

    $context->register_hook(
        $self,
        'subscription.load' => $self->can('load'),
    );
}

sub load {
    my($self, $context) = @_;

    my $feeds = $self->conf->{feed} or return;
       $feeds = [ $feeds ] unless ref $feeds;

    for my $config (@$feeds) {
        if (!ref($config)) {
            $config = { url => $config };
        }
        my $feed = Plagger::Feed->new;
        $feed->url($config->{url}) or $context->error("Feed URL is missing");
        $feed->link($config->{link})   if $config->{link};
        $feed->title($config->{title}) if $config->{title};
        $feed->meta($config->{meta})   if $config->{meta};

        if (my $tags = $config->{tag}) {
            unless (ref $tags) {
                $tags = [ Plagger::Tag->parse($config->{tag}) ];
            }
            $feed->tags($tags);
        }

        $context->subscription->add($feed);
    }
}

1;

__END__

=head1 NAME

Plagger::Plugin::Subscription::Config - Subscription in config.yaml

=head1 SYNOPSIS

    - module: Subscription::Config
      config:
        feed:
          - url: http://bulknews.typepad.com/blog/atom.xml
          - url: http://blog.bulknews.net/mt/index.rdf

=head1 DESCRIPTION

This plugin allows you to configure your subscription I<hardwired> in
C<config.yaml>.

=head1 AUTHOR

Tatsuhiko Miyagawa

=head1 SEE ALSO

L<Plagger>

=cut