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

Cache::Keys::DSL - Declare cache key generator by DSL

SYNOPSIS

    package MyProj::Keys;
    use Cache::Keys::DSL base_version => 0.01; # base_version is optional

    key 'all_items';
    keygen 'item';

    keygen 'user';

    keygen with_version user_item => 0.01, sub {
        my ($user, $item) = @_;
        return $user->{id}, $item->{id};
    };

    1;

    package MyProj;
    use MyProj::Keys qw/key_for_all_items gen_key_for_item gen_key_for_user gen_key_for_user_item/;

    sub search_all_items {
        my $key = key_for_all_items();
        $cache->get_or_set($key => sub { $dbh->selectall_arrayref('SELECT * FROM item ORDER BY id', { Slice => {} }) });
    }

    sub fetch_item_by_id {
        my $item_id = shift;
        my $key = gen_key_for_item($item_id);
        $cache->get_or_set($key => sub { $dbh->selectrow_hashref('SELECT * FROM item WHERE id = ?', undef, $item_id) });
    }

    sub fetch_user_by_id {
        my $user_id = shift;
        my $key = gen_key_for_user($user_id);
        $cache->get_or_set($key => sub { $dbh->selectrow_hashref('SELECT * FROM user WHERE id = ?', undef, $user_id) });
    }

    sub fetch_user_item {
        my ($user, $item) = @_;
        my $key = gen_key_for_user_item($user, $item);
        $cache->get_or_set($key => sub {
            $dbh->selectrow_hashref('SELECT * FROM user_item WHERE user_id = ? AND item_id = ?', undef, $user->{id}, $item->{id});
        });
    }

DESCRIPTION

Cache::Keys::DSL provides DSL for declaring cache key.

FUNCTIONS

key $name

For declaring static key. It generates exportable constant subroutine named key_for_$name.

keygen $name

For declaring dynamic key. It generates exportable subroutine named gen_key_for_$name.

with_version $name, $version

For declaring cache version.

LICENSE

Copyright (C) karupanerura.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

AUTHOR

karupanerura <karupa@cpan.org>