The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
package CPAN::Testers::Metabase::Demo;
# ABSTRACT: Demo Metabase backend
our $VERSION = '1.999002'; # VERSION

use Moose;
use Metabase::Archive::SQLite 1.000;
use Metabase::Index::FlatFile 1.000;
use Metabase::Librarian 1.000;
use Path::Class;
use File::Temp;
use namespace::autoclean;

with 'Metabase::Gateway';

has 'data_directory' => (
  is        => 'ro',
  isa       => 'Str',
  lazy      => 1,
  builder   => '_build_data_directory',
);

# keeps the tempdir alive until process exits
has '_cache' => (
  is        => 'ro',
  isa       => 'HashRef',
  default   => sub { {} },
);

sub _build_data_directory {
  my $self = shift;
  return q{} . ( $self->_cache->{tempdir} = File::Temp->newdir ); # stringify
}

sub _build_fact_classes { return [qw/CPAN::Testers::Report/] }

sub _build_public_librarian { return $_[0]->__build_librarian("public") }

sub _build_private_librarian { return $_[0]->__build_librarian("private") }

sub __build_librarian {
  my ($self, $subspace) = @_;

  my $data_dir = dir( $self->data_directory )->subdir($subspace);
  $data_dir->mkpath or die "coudln't make path to $data_dir";

  my $index = $data_dir->file('index.json');
  $index->touch;

  my $archive = $data_dir->file('archive.sqlite');

  return Metabase::Librarian->new(
    archive => Metabase::Archive::SQLite->new(
      filename => "$archive",
    ),
    index => Metabase::Index::FlatFile->new(
      index_file => "$index",
    ),
  );
}

__PACKAGE__->meta->make_immutable;
1;



=pod

=head1 NAME

CPAN::Testers::Metabase::Demo - Demo Metabase backend

=head1 VERSION

version 1.999002

=head1 SYNOPSIS

=head2 Direct usage

   use CPAN::Testers::Metabase::Demo;
 
   # defaults to directory on /tmp
   my $mb = CPAN::Testers::Metabase::Demo->new;
 
   $mb->public_librarian->search( %search spec );

=head2 Metabase::Web config

   ---
   Model::Metabase:
     class: CPAN::Testers::Metabase::Demo

=head1 DESCRIPTION

This is a demo Metabase backend that uses SQLite and a flat file in
a temporary directory.

=head1 USAGE

=head2 new

   my $mb = CPAN::Testers::Metabase::AWS->new( 
     data_directory => "/tmp/my-metabase"
   );

Arguments for C<<< new >>>:

=over

=item *

C<<< data_directory >>> -- optional -- directory path to store data files.  Defaults
to a L<File::Temp> temporary directory

=back

=head1 SEE ALSO

=over

=item *

L<CPAN::Testers::Metabase>

=item *

L<Metabase::Gateway>

=item *

L<Metabase::Web>

=back

=head1 AUTHOR

David Golden <dagolden@cpan.org>

=head1 COPYRIGHT AND LICENSE

This software is Copyright (c) 2012 by David Golden.

This is free software, licensed under:

  The Apache License, Version 2.0, January 2004

=cut


__END__