The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Venus::Constraint - Constraint Class

ABSTRACT

Constraint Class for Perl 5

SYNOPSIS

package main;

use Venus::Constraint;

my $constraint = Venus::Constraint->new;

# $constraint->accept('float');

# $constraint->ensure(sub{$_ > 1});

# $constraint->result(1.01);

# true

DESCRIPTION

This package provides a mechanism for evaluating type constraints on data. Built-in type constraints are handled via Venus::Check.

INHERITS

This package inherits behaviors from:

Venus::Kind::Utility

INTEGRATES

This package integrates behaviors from:

Venus::Role::Buildable

METHODS

This package provides the following methods:

accept

accept(string $name, any @args) (Venus::Constraint)

The accept method registers a condition via "check" based on the arguments provided. The built-in types are defined as methods in Venus::Check.

Since 3.55

accept example 1
# given: synopsis

package main;

$constraint = $constraint->accept('float');

# bless(..., "Venus::Constraint")

# $constraint->result;

# false

# $constraint->result(1.01);

# true
accept example 2
# given: synopsis

package main;

$constraint = $constraint->accept('number');

# bless(..., "Venus::Constraint")

# $constraint->result(1.01);

# false

# $constraint->result(1_01);

# true
accept example 3
# given: synopsis

package Example1;

sub new {
  bless {};
}

package Example2;

sub new {
  bless {};
}

package main;

$constraint = $constraint->accept('object');

# bless(..., "Venus::Constraint")

# $constraint->result;

# false

# $constraint->result(qr//);

# false

# $constraint->result(Example1->new);

# true

# $constraint->result(Example2->new);

# true
accept example 4
# given: synopsis

package Example1;

sub new {
  bless {};
}

package Example2;

sub new {
  bless {};
}

package main;

$constraint = $constraint->accept('Example1');

# bless(..., "Venus::Constraint")

# $constraint->result;

# false

# $constraint->result(qr//);

# false

# $constraint->result(Example1->new);

# true

# $constraint->result(Example2->new);

# false

check

check(Venus::Check $data) (Venus::Check)

The check method gets or sets the Venus::Check object used for performing runtime data type validation.

Since 3.55

check example 1
# given: synopsis

package main;

my $check = $constraint->check(Venus::Check->new);

# bless(..., 'Venus::Check')
check example 2
# given: synopsis

package main;

$constraint->check(Venus::Check->new);

my $check = $constraint->check;

# bless(..., 'Venus::Check')

clear

clear() (Venus::Constraint)

The clear method resets the "check" attributes and returns the invocant.

Since 3.55

clear example 1
# given: synopsis

package main;

$constraint->accept('string');

$constraint = $constraint->clear;

# bless(..., "Venus::Constraint")

ensure

ensure(coderef $code) (Venus::Constraint)

The ensure method registers a custom (not built-in) constraint condition and returns the invocant.

Since 3.55

ensure example 1
# given: synopsis

package main;

$constraint->accept('number');

my $ensure = $constraint->ensure(sub {
  $_ >= 0
});

# bless(.., "Venus::Constraint")
ensure example 2
# given: synopsis

package main;

$constraint->accept('number');

my $ensure = $constraint->ensure(sub {
  my ($source, $value) = @_;

  if ($value >= 0) {
    return 1;
  }
  else {
    return 0;
  }
});

# bless(..., "Venus::Constraint")

eval

eval(any $data) (boolean)

The eval method dispatches to the "check" object as well as evaluating any custom conditions, and returns true if all conditions pass, and false if any condition fails.

Since 3.55

eval example 1
# given: synopsis

package main;

$constraint->accept('float');

$constraint->ensure(sub{$_ >= 1});

my $eval = $constraint->eval('1.00');

# true
eval example 2
# given: synopsis

package main;

$constraint->accept('float');

$constraint->ensure(sub{$_ >= 1});

my $eval = $constraint->eval('0.99');

# false

evaler

evaler(any @args) (coderef)

The evaler method returns a coderef which calls the "eval" method with the invocant when called.

Since 3.55

evaler example 1
# given: synopsis

package main;

my $evaler = $constraint->evaler;

# sub{...}

# my $result = $evaler->();

# false
evaler example 2
# given: synopsis

package main;

my $evaler = $constraint->accept('any')->evaler;

# sub{...}

# my $result = $evaler->();

# true

result

result(any $data) (boolean)

The result method dispatches to the "eval" method and returns the result.

Since 3.55

result example 1
# given: synopsis

package main;

$constraint->accept('float');

$constraint->ensure(sub{$_ >= 1});

my $result = $constraint->result('1.00');

# true
result example 2
# given: synopsis

package main;

$constraint->accept('float');

$constraint->ensure(sub{$_ >= 1});

my $result = $constraint->result('0.99');

# false

AUTHORS

Awncorp, awncorp@cpan.org

LICENSE

Copyright (C) 2022, Awncorp, awncorp@cpan.org.

This program is free software, you can redistribute it and/or modify it under the terms of the Apache license version 2.0.