The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Plagger::Plugin::Subscription::DBI - Subscription in database

SYNOPSIS

    - module: Subscription::DBI
      config:
        schema_class: 'My::Schema'
        connect_info: ['dbi:SQLite:/path/to/plagger.db']

DESCRIPTION

This plugin allows you to configure your subscription in a database.

You will need the following:

SQL

    CREATE TABLE feed (
        id INTEGER NOT NULL PRIMARY KEY,
        url TEXT,
        link TEXT,
        title TEXT
    );
    
    CREATE TABLE tag (
        id INTEGER NOT NULL PRIMARY KEY,
        name TEXT NOT NULL
    );
    
    CREATE TABLE feed_tag_map (
        feed INTEGER NOT NULL,
        tag INTEGER NOT NULL,
        PRIMARY KEY (feed, tag)
    );

and the following DBIx::Class::Schema

My::Schema

    package My::Schema;
    use strict;
    use warnings;
    use base qw/DBIx::Class::Schema/;
    
    __PACKAGE__->load_classes();
    
    1;

My::Schema::Feed

    package My::Schema::Feed;
    use strict;
    use warnings;
    use base qw/DBIx::Class/;
    
    __PACKAGE__->load_components(qw/Core/);
    
    __PACKAGE__->table('feed');
    __PACKAGE__->add_columns(qw(
            id
            url
            link
            title
    ));
    __PACKAGE__->set_primary_key(qw/id/);
    
    1;

My::Schema::FeedTagMap

    package My::Schema::FeedTagMap;
    
    use strict;
    use warnings;
    use base qw/DBIx::Class/;
    
    __PACKAGE__->load_components(qw/Core/);
    
    __PACKAGE__->table('feed_tag_map');
    __PACKAGE__->add_columns(qw(
            feed
            tag
    ));
    
    __PACKAGE__->set_primary_key(qw/feed tag/);
    
    __PACKAGE__->belongs_to( feed => 'TEST::Schema::Feed' );
    __PACKAGE__->belongs_to( tag  => 'TEST::Schema::Tag' );
    
    1;

My::Schema::Tag

    package TEST::Schema::Tag;
    use strict;
    use warnings;
    use base qw/DBIx::Class/;
    
    __PACKAGE__->load_components(qw/Core/);
    
    __PACKAGE__->table('tag');
    __PACKAGE__->add_columns(qw(
            id
            name
    ));
    __PACKAGE__->set_primary_key(qw/id/);
    
    __PACKAGE__->has_many( feed_tag_map => 'TEST::Schema::FeedTagMap', 'tag' );
    __PACKAGE__->many_to_many( feeds => feed_tag_map => 'feed' );
    
    1;

AUTHOR

Franck Cuny

Based on the plugin Plagger::Plugin::Subscription::Config by Tatsuhiko Miyagawa

The schema is inspired by the work of Daisuke Murase for Plagger::Plugin::Store::DBIC

SEE ALSO

Plagger