NAME
Salvation::TC::Utils - Дополнительные публичные функции Salvation::TC
SYNOPSIS
use Salvation::TC::Utils;
subtype 'CustomString',
as 'Str',
where { $_ eq 'asd' };
subtype 'ArrayRefOfCustomStrings',
as 'ArrayRef[CustomString]',
where {};
coerce 'ArrayRefOfCustomStrings',
from 'CustomString',
via { [ $_ ] };
type 'CustomTopLevelType',
where { ( ref( $_ ) eq 'HASH' ) && exists $_ -> { 'asd' } };
enum 'RGB', [ 'red', 'green', 'blue' ];
no Salvation::TC::Utils;
Salvation::TC -> is( 'asd', 'CustomString' ); # true
Salvation::TC -> is( 'qwe', 'CustomString' ); # false
Salvation::TC -> is( 'green', 'RGB' ); # true
Salvation::TC -> is( 'white', 'RGB' ); # false
Salvation::TC -> coerce( 'asd', 'ArrayRefOfCustomStrings' ); # [ 'asd' ]
Salvation::TC -> coerce( 'qwe', 'ArrayRefOfCustomStrings' ); # 'qwe'
Salvation::TC -> ensure( 'asd', 'ArrayRefOfCustomStrings' ); # [ 'asd' ]
Salvation::TC -> ensure( 'qwe', 'ArrayRefOfCustomStrings' ); # BOOM
Salvation::TC -> assert( { asd => 123 }, 'CustomTopLevelType' ); # true
Salvation::TC -> assert( { qwe => 123 }, 'CustomTopLevelType' ); # BOOM
SEE ALSO
METHODS
coerce( Str $to, Salvation::TC::Meta::Type :$from!, CodeRef :$how! )
Объ�вл�ет новое правило приведени� типа. Предполагаемое и�пользование:
coerce 'DestTypeName',
from 'SourceTypeName',
via { do_something_with( $_ ) };
Блок кода, переданный в via
, будет �одержать в $_
значение типа SourceTypeName
, и должен вернуть значение типа DestTypeName
.
Каждое правило приведени� - глобальное, и до�тупно по в�ему коду �разу по�ле определени� правила.
При попытке приве�ти значение к типу будет выбрано первое подход�щее правило приведени�. �апример, е�ли объ�влено два правила:
coerce 'Something',
from 'Str',
via { ... };
coerce 'Something',
from 'Int',
via { ... };
, и прои�ходит попытка приве�ти к типу Something
значение типа Int
, то � указанными выше правилами будет выполнено приведение по правилу дл� типа Str
, так как значение типа Int
подходит и к типу Str
. Е�ли помен�ть правила ме�тами, вот так:
coerce 'Something',
from 'Int',
via { ... };
coerce 'Something',
from 'Str',
via { ... };
, то поведение будет более ожидаемым: при попытке приве�ти к типу Something
значение типа Int
будет выполнено приведение именно по правилу дл� типа Int
: �то правило в�тречает�� раньше, чем правило приведени� дл� типа Str
, и приводимое значение подходит под требуемый правилом тип.
Объ�вление правил приведени� одних �тандартных типов к другим �тандартным типам напр�мую крайне не рекомендует��. Best practice дл� подобных �лучаев:
subtype 'MyCustomArrayOfStrings',
as 'ArrayRef[Str]',
where {}; # не проводить дополнительных проверок
coerce 'MyCustomArrayOfStrings',
from 'Str',
via { [ $_ ] };
from( Str $type )
via( CodeRef $code )
type( Str $name, CodeRef :$validator! )
Объ�вл�ет новый тип верхнего уровн� (без родитель�кого типа). Предполагаемое и�пользование:
type 'NewTypeName',
where { check_value_and_return_true_or_false( $_ ) };
Блок кода, переданный во where
, будет �одержать в $_
значение, которое необходимо проверить на �оответ�твие объ�вл�емому типу, и должен вернуть true
е�ли значение подходит по тип, или false
, е�ли значение не подходит.
Име� в ра�пор�жении �тандартные типы �и�темы типов Moose (Moose::Manual::Types), вме�то type
в�егда до�таточно и�пользовать subtype
, что �охранит отношени� между типами и не потребует дублировани� кода �амой проверки.
where( CodeRef $code )
subtype( Str $name, Salvation::TC::Meta::Type :$parent!, CodeRef :$validator! )
Объ�вл�ет новый тип, на�ледуемый от другого, уже �уще�твующего, типа. Предполагаемое и�пользование:
subtype 'ChildTypeName',
as 'ParentTypeName',
where { check_value_and_return_true_or_false( $_ ) };
Блок кода, переданный во where
, будет �одержать в $_
значение, которое необходимо проверить на �оответ�твие объ�вл�емому типу, и должен вернуть true
е�ли значение подходит по тип, или false
, е�ли значение не подходит.
ТехничеÑ�ки Ñ�начала будет выполнена проверка значениÑ� на Ñ�оответÑ�твие родительÑ�кому типу, и только еÑ�ли Ñ�та проверка прошла уÑ�пешно - будет выполнена проверка Ñ�оответÑ�твиÑ� дочернему типу. Ðто гарантирует, что в $_
у where
типа ChildTypeName
в�егда будет находить�� значение типа ParentTypeName
.
as( Str $type )
enum( Str $name, ArrayRef[Str] $values )
Х�лпер дл� �оздани� enum'ов значений типа Str
. Пример и�пользовани�:
enum 'RGB', [ 'red', 'green', 'blue' ];
1 POD Error
The following errors were encountered while parsing the POD:
- Around line 5:
Non-ASCII character seen before =encoding in 'Дополнительные'. Assuming CP1252