NAME
Perinci::Sub::Gen::FromClass - Generate function (and its Rinci metadata) from a class
VERSION
This document describes version 0.02 of Perinci::Sub::Gen::FromClass (from Perl distribution Perinci-Sub-Gen-FromClass), released on 2014-08-04.
SYNOPSIS
Given a Mo/Moo/Mouse/Moose class:
# MyClass
use Moo;
has attr1 => (is => 'ro', required=>1);
has attr2 => (is => 'rw');
sub do_this { ... }
sub do_that { ... }
1;
you can generate a function for it:
use Perinci::Sub::Gen::FromClass qw(gen_func_from_class);
gen_func_from_class(
name => 'do_this',
class => 'MyClass',
type => 'Moo',
method => 'do_this',
method_args => [3, 4, 5], # optional
);
then if you call this function:
do_this(attr1=>1, attr2=>2);
it will do something like (instantiate class and call a method):
MyClass->new(attr1=>1, attr2=>2)->do_this(3, 4, 5);
DESCRIPTION
Sometimes some module annoyingly only provides OO interface like:
my $obj = Foo->new(arg1=>1, arg2=>2);
$obj->some_action;
when it could very well just be:
some_action(arg1=>1, arg2=>2);
This module helps you create that function from a class.
FUNCTIONS
gen_func_from_class(%args) -> [status, msg, result, meta]
Generate function from a class.
gen_func_from_class will create a function and Rinci metadata from a {Mo,Moo,Moose,Mouse} class. Given a class like this:
# MyClass
use Moo;
has attr1 => (is => 'ro', required=>1);
has attr2 => (is => 'rw');
sub meth1 { ... }
sub meth2 { ... }
1;
will create a function that does something like this (it will basically instantiate a class, set its attributes, and call a method):
MyClass->new(attr1=>..., attr2=>...)->meth1;
along with Rinci metadata like this:
{
v => 1.1,
args => {
attr1 => { req=>1, schema=>'any' },
attr2 => { schema=>'any' },
},
}
Currently only Mo- and Moo-based class is supported. Support for other Mo* family members will be added.
Arguments ('*' denotes required arguments):
class* => any
Class name, will be loaded with require().
description => str
Generated function's description.
install => bool (default: 1)
Whether to install generated function (and metadata).
By default, generated function will be installed to the specified (or caller's) package, as well as its generated metadata into %SPEC. Set this argument to false to skip installing.
method* => any
Method of class to call.
method_args => array
name => str
Generated function's name, e.g. `myfunc`.
package => str
Generated function's package, e.g. `My::Package`.
This is needed mostly for installing the function. You usually don't need to supply this if you set
installto false.If not specified, caller's package will be used by default.
summary => str
Generated function's summary.
Return value:
Returns an enveloped result (an array).
First element (status) is an integer containing HTTP status code (200 means OK, 4xx caller error, 5xx function error). Second element (msg) is a string containing error message, or 'OK' if status is 200. Third element (result) is optional, the actual result. Fourth element (meta) is called result metadata and is optional, a hash that contains extra information.
A hash containing generated function, metadata (hash)
TODO
Translate isa option in has into argument schema.
SEE ALSO
HOMEPAGE
Please visit the project's homepage at https://metacpan.org/release/Perinci-Sub-Gen-FromClass.
SOURCE
Source repository is at https://github.com/sharyanto/perl-Perinci-Sub-Gen-FromClass.
BUGS
Please report any bugs or feature requests on the bugtracker website https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-Sub-Gen-FromClass
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.
AUTHOR
Steven Haryanto <stevenharyanto@gmail.com>
COPYRIGHT AND LICENSE
This software is copyright (c) 2014 by Steven Haryanto.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.