NAME

Data::Sah::Util::Role - Sah utility routines for roles

VERSION

This document describes version 0.916 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 or each_elem. When the value of inspect_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.