#!/usr/bin/perl
use strict;
use warnings;
use Test::More 'no_plan';
=head1 NAME
Brick use case for a programming errors in Bricks
=head1 SYNOPSIS
=head1 DESCRIPTION
If there's a programming error in a brick, such as a dynamic regular
expression that doesn't compile, how should we handle that and what should
show up in the error hash?
=cut
my $class = 'Brick';
use_ok( $class );
my $brick = Brick->new();
isa_ok( $brick, $class );
=head2 Create the constraint
Let's make two constraints that I expect to work, and one that fails from
a programming error.
=cut
sub Brick::Bucket::code_error {
my( $bucket, $setup ) = @_;
$setup->{name} ||= ( caller(0) )[3];
$bucket->__make_constraint(
$bucket->add_to_bucket( {
name => 'code_error',
description => 'Length is 5',
code => sub {
my $regex = "abcd(";
length $_[0]->{string} == m/$regex/
or die { message => 'Matches bad regex' };
}
} ),
$setup );
}
sub Brick::Bucket::just_fine {
my( $bucket, $setup ) = @_;
$setup->{name} ||= ( caller(0) )[3];
$bucket->__make_constraint(
$bucket->add_to_bucket( {
name => 'just_fine',
description => 'Length is 5',
code => sub {
length $_[0]->{string} == 5
or die { message => 'Length is not five' };
}
} ),
$setup );
}
sub Brick::Bucket::never_passes {
my( $bucket, $setup ) = @_;
$setup->{name} ||= ( caller(0) )[3];
$bucket->__make_constraint(
$bucket->add_to_bucket( {
name => 'never_passes',
description => 'Has a vowel',
code => sub {
die {
handler => 'never_passes',
message => 'Length is not five'
};
}
} ),
$setup );
}
=head2 Create the profile
=cut
my $Profile = [
[ fine => just_fine => { name => 'foo' } ],
[ good => never_passes => { } ],
[ error => code_error => { } ],
];
my $profile = Brick->profile_class->new( $brick, $Profile );
$profile->lint;
print $profile->explain;
my $results = $brick->apply( $profile, { string => 'hello' } );
use Data::Dumper;
print Dumper( $results );
print $results->explain;