#!/usr/bin/perl
my
$class
=
'Brick'
;
use_ok(
$class
);
my
$brick
= Brick->new();
isa_ok(
$brick
,
$class
);
sub
Brick::Bucket::three_digit_odd_number
{
my
(
$bucket
,
$setup
) =
@_
;
$setup
->{exact_length} = 3;
$setup
->{filter_fields} = [
qw(just_right)
];
$setup
->{name} =
"Remove non-digits"
;
my
$filter
=
$bucket
->_remove_non_digits(
$setup
);
$setup
->{regex} =
qr/
[13579]
\z
/
x;
my
$regex
=
$bucket
->_matches_regex(
{
%$setup
,
name
=>
'Odd-Even regex test'
}
);
$setup
->{name} =
"Length is three characters"
;
my
$length
=
$bucket
->_value_length_is_exactly(
$setup
);
$setup
->{name} =
"Three digit odd number"
;
my
$composed
=
$bucket
->__compose_satisfy_all(
$filter
,
$regex
,
$length
);
$bucket
->__make_constraint(
$composed
,
$setup
);
}
sub
Brick::Bucket::twofer
{
my
(
$bucket
,
$setup
) =
@_
;
$setup
->{exact_length} = 3;
$setup
->{filter_fields} =
$setup
->{fields};
$setup
->{name} =
"Remove non-digits"
;
my
$filter
=
$bucket
->_remove_non_digits(
$setup
);
$setup
->{regex} =
qr/
[13579]
\z
/
x;
my
$regex
=
$bucket
->_matches_regex(
{
%$setup
,
name
=>
'Odd-Even regex test'
,
field
=>
'even_number'
,
}
);
$setup
->{name} =
"Length is three characters"
;
my
$length
=
$bucket
->_value_length_is_exactly(
{
%$setup
,
field
=>
'short_number'
}
);
$setup
->{name} =
"Three digit odd number"
;
my
$composed
=
$bucket
->__compose_satisfy_all(
$filter
,
$regex
,
$length
);
$bucket
->__make_constraint(
$composed
,
$setup
);
}
my
$Profile
= [
[
just_right
=>
three_digit_odd_number
=> {
field
=>
'just_right'
} ],
[
too_long
=>
three_digit_odd_number
=> {
field
=>
'long_number'
} ],
[
too_short
=>
three_digit_odd_number
=> {
field
=>
'short_number'
} ],
[
even_number
=>
three_digit_odd_number
=> {
field
=>
'even_number'
} ],
[
two_fields
=>
twofer
=> {
fields
=> [
qw(even_number short_number)
] } ],
];
my
$lint
=
$brick
->profile_class->lint(
$Profile
);
unless
( is(
$lint
, 0,
"Profile has no errors"
) )
{
my
%lint
=
$brick
->profile_class->lint(
$Profile
);
diag( Data::Dumper->Dumper( \
%lint
) );
}
my
$profile
=
$brick
->profile_class->new(
$brick
,
$Profile
);
isa_ok(
$profile
,
$brick
->profile_class );
print
STDERR
"="
x 73,
"\n"
if
$ENV
{DEBUG};
print
STDERR
"\nExplaining profile:\n"
,
$profile
->explain
if
$ENV
{DEBUG};
my
%Input
= (
just_right
=> 123,
long_number
=> 12345,
short_number
=> 13,
even_number
=> 24,
);
my
$result
=
$brick
->apply(
$profile
, \
%Input
);
ok(
$result
, Brick->result_class );
print
STDERR
"="
x 73,
"\n"
if
$ENV
{DEBUG};
print
STDERR
"\nExplaining result:\n"
,
$result
->explain
if
$ENV
{DEBUG};
{
my
$flatten
=
$result
->flatten;
ok(
$flatten
);
print
STDERR
"="
x 73,
"\n"
if
$ENV
{DEBUG};
print
STDERR Data::Dumper->Dump( [
$flatten
], [
qw($flatten)
] )
if
$ENV
{DEBUG};
}
{
my
$flatten
=
$result
->flatten_by_field;
ok(
$flatten
);
print
STDERR
"="
x 73,
"\n"
if
$ENV
{DEBUG};
print
STDERR Data::Dumper->Dump( [
$flatten
], [
qw($flatten)
] )
if
$ENV
{DEBUG};
}
{
my
$flatten
=
$result
->flatten_by(
'handler'
);
ok(
$flatten
);
print
STDERR
"="
x 73,
"\n"
if
$ENV
{DEBUG};
print
STDERR Data::Dumper->Dump( [
$flatten
], [
qw($flatten)
] )
if
$ENV
{DEBUG};
}