The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use DBI;
use Log::Log4perl;
Log::Log4perl::init( 'log4perl.conf' );

use SPOPS::Initialize;

my $DBI_DSN  = 'DBI:Pg:dbname=test';
my $DBI_USER = 'username';
my $DBI_PASS = 'password';

my ( $DBH );

END {
    remove_demo_table();
}

{
    create_demo_table();
    fill_demo_table();

    my $config = {
      'demo' => {
         class               => 'My::Demo',
         isa                 => [ 'SPOPS::DBI' ],
         base_table          => 'spops_find_defaults',
         id_field            => 'email',
         field_discover      => 'yes',
         rules_from          => [ 'SPOPS::Tool::DBI::DiscoverField',
                                  'SPOPS::Tool::DBI::FindDefaults' ],
         find_default_id     => 'test@test.com',
         find_default_field  => [ 'language', 'country' ],
      },
    };
    SPOPS::Initialize->process({ config => $config });

    my $demo = My::Demo->new();
    print "Default for language: ($demo->{language})\n",
          "Default for country:  ($demo->{country})\n";
}


sub create_demo_table {
    My::Demo::global_datasource_handle();
    my $sql = <<DEMO;
CREATE TABLE spops_find_defaults (
  email       varchar(50) not null primary key,
  language    char(2) null,
  country     varchar(20) null
)
DEMO
    $DBH->do( $sql );
}


sub fill_demo_table {
    my $sql = <<'NEW';
INSERT INTO spops_find_defaults ( email, language, country )
VALUES                          ( 'test@test.com', 'en', 'USA' )
NEW
    $DBH->do( $sql );
}

sub remove_demo_table {
    $DBH->do( 'DROP TABLE spops_find_defaults' );
}


sub My::Demo::global_datasource_handle {
    return $DBH if ( $DBH );
    $DBH = DBI->connect( $DBI_DSN, $DBI_USER, $DBI_PASS,
                         { RaiseError => 1, PrintError => 0 } );
    die "Cannot connect! $DBI::errstr" unless ( $DBH );
    return $DBH;
}