package Venus::Role::Testable; use 5.018; use strict; use warnings; use Venus::Role 'with'; # METHODS sub is_false { my ($self, $code, @args) = @_; $code ||= $self->can('value') ? 'value' : sub{}; require Venus::Boolean; return $self->$code(@args) ? Venus::Boolean::FALSE() : Venus::Boolean::TRUE(); } sub is_true { my ($self, $code, @args) = @_; $code ||= $self->can('value') ? 'value' : sub{}; require Venus::Boolean; return $self->$code(@args) ? Venus::Boolean::TRUE() : Venus::Boolean::FALSE(); } # EXPORTS sub EXPORT { ['is_false', 'is_true'] } 1; =head1 NAME Venus::Role::Testable - Testable Role =cut =head1 ABSTRACT Testable Role for Perl 5 =cut =head1 SYNOPSIS package Example; use Venus::Class; with 'Venus::Role::Testable'; attr 'value'; sub execute { return pop; } package main; my $example = Example->new; # $example->is_true(sub{0}); =cut =head1 DESCRIPTION This package modifies the consuming package and provides methods for dispatching method calls and returning truthy returns as true and falsy returns as false boolean values. =cut =head1 METHODS This package provides the following methods: =cut =head2 is_false is_false(Str | CodeRef $method, Any @args) (Bool) The is_false method dispatches the method call or executes the callback and returns truthy returns as C and falsy returns as C L<"boolean"|Venus::Boolean> values. I> =over 4 =item is_false example 1 package main; my $example = Example->new; my $true = $example->is_false(execute => 0); # 1 =back =over 4 =item is_false example 2 package main; my $example = Example->new; my $true = $example->is_false(sub{0}); # 1 =back =over 4 =item is_false example 3 package main; my $example = Example->new; my $false = $example->is_false(execute => 1); # 0 =back =cut =head2 is_true is_true(Str | CodeRef $method, Any @args) (Bool) The is_true method dispatches the method call or executes the callback and returns truthy returns as C and falsy returns as C L<"boolean"|Venus::Boolean> values. I> =over 4 =item is_true example 1 package main; my $example = Example->new; my $true = $example->is_true(execute => 1); # 1 =back =over 4 =item is_true example 2 package main; my $example = Example->new; my $true = $example->is_true(sub{1}); # 1 =back =over 4 =item is_true example 3 package main; my $example = Example->new; my $false = $example->is_true(execute => 0); # 0 =back =cut