use strict;
use warnings;
use Test::More 'tests' => 1;
# Borg is a foreign hash-based class that overloads bool
package Borg;
{
use overload 'bool' => \&bool;
sub new {
my $class = shift;
my %self = @_;
return ( bless( \%self, $class ) );
}
sub get_borg {
my ( $self, $data ) = @_;
return ( $self->{$data} );
}
sub set_borg {
my ( $self, $key, $value ) = @_;
$self->{$key} = $value;
}
sub warn {
return ('Resistance is futile');
}
sub bool { my $self = shift; return scalar keys %$self; }
}
package Foo;
{
use Object::InsideOut qw(Borg);
my @objs : Field('Acc'=>'obj', 'Type' => 'list');
my %init_args : InitArgs = (
'OBJ' => {
'RE' => qr/^obj$/i,
'Field' => \@objs,
'Type' => 'list',
},
'BORG' => { 'RE' => qr/^borg$/i, }
);
sub init : Init {
my ( $self, $args ) = @_;
$self->inherit( Borg->new() );
if ( exists( $args->{'BORG'} ) ) {
$self->set_borg( 'borg' => $args->{'BORG'} );
}
}
}
package main;
MAIN:
{
eval { my $obj = Foo->new(); };
ok( $@ eq '', 'Created object with overloaded bool operation' );
}
exit(0);
# EOF