The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

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