NAME
Data::Sah::Util::Role - Sah utility routines for roles
VERSION
This document describes version 0.917 of Data::Sah::Util::Role (from Perl distribution Data-Sah), released on 2024-02-16.
DESCRIPTION
This module provides some utility routines to be used in roles, e.g. Data::Sah::Type::*
and Data::Sah::FuncSet::*
.
FUNCTIONS
has_clause($name, %opts)
Define a clause. Used in type roles (Data::Sah::Type::*
). Internally it adds a Moo requires
for clause_$name
.
Options:
v => int
Specify clause specification version. Must be 2 (the current version).
schema => sah::schema
Define schema for clause value.
prio => int {min=>0, max=>100, default=>50}
Optional. Default is 50. The higher the priority (the lower the number), the earlier the clause will be processed.
aliases => \@aliases OR $alias
Define aliases. Optional.
inspect_elem => bool
If set to true, then this means clause inspect the element(s) of the data. This is only relevant for types that has elements (see HasElems role). An example of clause like this is
has
oreach_elem
. When the value ofinspect_elem
is true, a compiler must prepare by coercing the elements of the data, if there are coercion rules applicable.subschema => coderef
If set, then declare that the clause value contains a subschema. The coderef must provide a way to get the subschema from
code => coderef
Optional. Define implementation for the clause. The code will be installed as 'clause_$name'.
into => str $package
By default it is the caller package, but can be set to other package.
Example:
has_clause minimum => (arg => 'int*', aliases => 'min');
has_clause_alias TARGET => ALIAS | [ALIAS1, ...]
Specify that clause named ALIAS is an alias for TARGET.
You have to define TARGET clause first (see has_clause above).
Example:
has_clause max_length => ...;
has_clause_alias max_length => "max_len";
has_func($name, %opts)
Define a Sah function. Used in function set roles (Data::Sah::FuncSet::*
). Internally it adds a Moo requires
for func_$name
.
Options:
aliases => \@aliases OR $alias
Optional. Declare aliases.
code => $code
Supply implementation for the function. The code will be installed as 'func_$name'.
into => $package
By default it is the caller package, but can be set to other package.
Example:
has_func abs => (args => 'num');
has_func_alias TARGET => ALIAS | [ALIASES...]
Specify that function named ALIAS is an alias for TARGET.
You have to specify TARGET function first (see has_func above).
Example:
has_func_alias 'atan' => 'arctan';
HOMEPAGE
Please visit the project's homepage at https://metacpan.org/release/Data-Sah.
SOURCE
Source repository is at https://github.com/perlancar/perl-Data-Sah.
AUTHOR
perlancar <perlancar@cpan.org>
CONTRIBUTING
To contribute, you can send patches by email/via RT, or send pull requests on GitHub.
Most of the time, you don't need to build the distribution yourself. You can simply modify the code, then test via:
% prove -l
If you want to build the distribution (e.g. to try to install it locally on your system), you can install Dist::Zilla, Dist::Zilla::PluginBundle::Author::PERLANCAR, Pod::Weaver::PluginBundle::Author::PERLANCAR, and sometimes one or two other Dist::Zilla- and/or Pod::Weaver plugins. Any additional steps required beyond that are considered a bug and can be reported to me.
COPYRIGHT AND LICENSE
This software is copyright (c) 2024, 2022, 2021, 2020, 2019, 2018, 2017, 2016, 2015, 2014, 2013, 2012 by perlancar <perlancar@cpan.org>.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
BUGS
Please report any bugs or feature requests on the bugtracker website https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah
When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature.