NAME
Venus::Coercion - Coercion Class
ABSTRACT
Coercion Class for Perl 5
SYNOPSIS
package main;
use Venus::Coercion;
my $coercion = Venus::Coercion->new;
# $coercion->accept('float');
# $coercion->format(sub{sprintf '%.2f', $_});
# $coercion->result(123.456);
# 123.46
DESCRIPTION
This package provides a mechanism for evaluating type coercions on data. Built-in type coercions are handled via Venus::Check.
INHERITS
This package inherits behaviors from:
INTEGRATES
This package integrates behaviors from:
METHODS
This package provides the following methods:
accept
accept(string $name, any @args) (Venus::Coercion)
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; $coercion = $coercion->accept('float'); # bless(..., "Venus::Coercion") # $coercion->result; # undef # $coercion->result(1.01); # 1.01
- accept example 2
-
# given: synopsis package main; $coercion = $coercion->accept('number'); # bless(..., "Venus::Coercion") # $coercion->result(1.01); # 1.01 # $coercion->result(1_01); # 101
- accept example 3
-
# given: synopsis package Example1; sub new { bless {}; } package Example2; sub new { bless {}; } package main; $coercion = $coercion->accept('object'); # bless(..., "Venus::Coercion") # $coercion->result; # undef # $coercion->result(qr//); # qr// # $coercion->result(Example1->new); # bless(..., "Example1") # $coercion->result(Example2->new); # bless(..., "Example2")
- accept example 4
-
# given: synopsis package Example1; sub new { bless {}; } package Example2; sub new { bless {}; } package main; $coercion = $coercion->accept('Example1'); # bless(..., "Venus::Coercion") # $coercion->result; # undef # $coercion->result(qr//); # qr// # $coercion->result(Example1->new); # bless(..., "Example1") # $coercion->result(Example2->new); # bless(..., "Example2")
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 = $coercion->check(Venus::Check->new); # bless(..., 'Venus::Check')
- check example 2
-
# given: synopsis package main; $coercion->check(Venus::Check->new); my $check = $coercion->check; # bless(..., 'Venus::Check')
clear
clear() (Venus::Coercion)
The clear method resets the "check" attributes and returns the invocant.
Since 3.55
- clear example 1
-
# given: synopsis package main; $coercion->accept('string'); $coercion = $coercion->clear; # bless(..., "Venus::Coercion")
eval
eval(any $data) (boolean)
The eval method dispatches to the "check" object as well as evaluating any custom conditions, and returns the coerced value if all conditions pass, and the original value if any condition fails.
Since 3.55
- eval example 1
-
# given: synopsis package main; use Venus::Float; $coercion->accept('float'); $coercion->format(sub{Venus::Float->new($_)}); my $eval = $coercion->eval('1.00'); # bless(..., "Venus::Float")
- eval example 2
-
# given: synopsis package main; use Venus::Float; $coercion->accept('float'); $coercion->format(sub{Venus::Float->new($_)}); my $eval = $coercion->eval(1_00); # 100
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 = $coercion->evaler; # sub{...} # my $result = $evaler->(); # undef
- evaler example 2
-
# given: synopsis package main; my $evaler = $coercion->accept('any')->evaler; # sub{...} # my $result = $evaler->('hello'); # "hello"
format
format(coderef $code) (Venus::Coercion)
The format method registers a custom (not built-in) coercion condition and returns the invocant.
Since 3.55
- format example 1
-
# given: synopsis package main; $coercion->accept('either', 'float', 'number'); my $format = $coercion->format(sub { int $_ }); # bless(.., "Venus::Coercion")
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; $coercion->accept('float'); $coercion->format(sub{int $_}); my $result = $coercion->result('1.00'); # 1
- result example 2
-
# given: synopsis package main; $coercion->accept('float'); $coercion->format(sub{int $_}); my $result = $coercion->result('0.99'); # 0
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.