GrowthForecast-Aggregator-Declare
view release on metacpan or search on metacpan
lib/GrowthForecast/Aggregator/Declare.pm view on Meta::CPAN
package GrowthForecast::Aggregator::Declare;
use strict;
use warnings;
use 5.008001;
our $VERSION = '0.1.1';
use parent qw(Exporter);
use GrowthForecast::Aggregator::DB;
use GrowthForecast::Aggregator::DBMulti;
use GrowthForecast::Aggregator::Callback;
our @EXPORT = qw(gf section db db_multi callback);
our $_SECTION;
our @_QUERIES;
sub gf(&) {
local @_QUERIES;
$_[0]->();
return @_QUERIES;
}
sub section($&) {
local $_SECTION = shift;
$_[0]->();
}
sub db {
push @_QUERIES, GrowthForecast::Aggregator::DB->new(
section => $_SECTION,
@_,
);
}
sub db_multi {
push @_QUERIES, GrowthForecast::Aggregator::DBMulti->new(
section => $_SECTION,
@_,
);
}
sub callback {
push @_QUERIES, GrowthForecast::Aggregator::Callback->new(
section => $_SECTION,
@_,
);
}
1;
__END__
=encoding utf8
=head1 NAME
GrowthForecast::Aggregator::Declare - Declarative interface for GrowthForecast client
=head1 SYNOPSIS
use GrowthForecast::Aggregator::Declare;
my @queries = gf {
section member => sub {
# post to member/count
db(
name => 'count',
description => 'The number of members',
query => 'SELECT COUNT(*) FROM member',
);
};
section entry => sub {
# post to entry/count, entry/count_unique
db_multi(
names => ['count', 'count_unique'],
descriptions => ['Total count of posts', 'Posted bloggers'],
query => 'SELECT COUNT(*), COUNT(DISTINCT member_id) FROM entry',
( run in 2.295 seconds using v1.01-cache-2.11-cpan-54e63673c56 )