The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Venus::Role::Assertable - Assertable Role

ABSTRACT

Assertable Role for Perl 5

SYNOPSIS

  package Example;

  use Venus::Class;
  use Venus::Assert;

  with 'Venus::Role::Assertable';

  sub assertion {
    Venus::Assert->new('Example')->constraint('object', sub{
      $_->value->isa('Example')
    })
  }

  package main;

  my $example = Example->new;

  # $example->check;

DESCRIPTION

This package modifies the consuming package and requires methods for making the object assertable.

METHODS

This package provides the following methods:

assert

  assert(Any $data) (Any)

The assert method returns the data provided if it passes the registered type constraints, or throws an exception.

Since 1.23

assert example 1
  # given: synopsis

  package main;

  my $assert = $example->assert;

  # Exception! (isa Venus::Assert::Error)
assert example 2
  # given: synopsis

  package main;

  my $assert = $example->assert({});

  # Exception! (isa Venus::Assert::Error)
assert example 3
  # given: synopsis

  package main;

  my $assert = $example->assert($example);

  # bless({}, "Example")

assertion

  assertion() (Assert)

The assertion method receives no arguments and should returns a Venus::Assert object.

Since 1.23

assertion example 1
  package main;

  my $example = Example->new;

  my $assertion = $example->assertion;

  # bless({name => "Example"}, "Venus::Assert")

check

  check(Any $data) (Bool)

The check method returns true if the data provided passes the registered type constraints, or returns false.

Since 1.23

check example 1
  # given: synopsis

  package main;

  my $check = $example->check;

  # 0
check example 2
  # given: synopsis

  package main;

  my $check = $example->check({});

  # 0
check example 3
  # given: synopsis

  package main;

  my $check = $example->check($example);

  # 1

coerce

  coerce(Any $data) (Any)

The coerce method returns a coerced value if the data provided matches any of the registered type coercions, or returns the data provided.

Since 1.23

coerce example 1
  # given: synopsis

  package main;

  my $assertion = $example->assertion;

  $assertion->coercion('string', sub{ucfirst(lc($_->value))});

  my $coerce = $assertion->coerce;

  # undef
coerce example 2
  # given: synopsis

  package main;

  my $assertion = $example->assertion;

  $assertion->coercion('string', sub{ucfirst(lc($_->value))});

  my $coerce = $assertion->coerce({});

  # {}
coerce example 3
  # given: synopsis

  package main;

  my $assertion = $example->assertion;

  $assertion->coercion('string', sub{ucfirst(lc($_->value))});

  my $coerce = $assertion->coerce('hello');

  # "Hello"

make

  make(Any $data) (Object)

The make method returns an instance of the invocant, if the data provided passes the registered type constraints, allowing for any coercion, or throws an exception. If the data provided is itself an instance of the invocant it will be returned unaltered.

Since 1.23

make example 1
  # given: synopsis

  package main;

  my $make = $example->make;

  # Exception! (isa Venus::Assert::Error)
make example 2
  # given: synopsis

  package main;

  my $make = $example->make($example);

  # bless({}, "Example")
make example 3
  # given: synopsis

  package main;

  my $make = $example->make({});

  # Exception! (isa Venus::Assert::Error)