=pod =encoding utf-8 =head1 NAME Sub::HandlesVia::Manual::WithMite - using Sub::HandlesVia with Mite =head1 SYNOPSIS package MyApp::Kitchen { use MyApp::Mite; has food => ( is => 'ro', isa => 'ArrayRef[Str]', handles_via => 'Array', default => sub { [] }, handles => { 'add_food' => 'push', 'find_food' => 'grep', }, ); } =head1 MANUAL Sub::HandlesVia allows you to delegate methods from your class to the values of your objects' attributes. Conceptually, it allows you to define C<< $object->push_number($n) >> to be a shortcut for C<< $object->numbers->push($n) >> except that C<< $object->numbers >> is an arrayref, so doesn't have methods you can call on it like C<push>. Mite 0.009000 and above have built-in C<handles_via> support. Mite will co-operate with Sub::HandlesVia to implement C<handles_via> and avoid your project having a Sub::HandlesVia dependency! =head2 Which Methods Can Be Delegated To? The C<handles_via> option indicates which library of methods should be available. Valid values include L<Array|Sub::HandlesVia::HandlerLibrary::Array>, L<Blessed|Sub::HandlesVia::HandlerLibrary::Blessed>, L<Bool|Sub::HandlesVia::HandlerLibrary::Bool>, L<Code|Sub::HandlesVia::HandlerLibrary::Code>, L<Counter|Sub::HandlesVia::HandlerLibrary::Counter>, L<Enum|Sub::HandlesVia::HandlerLibrary::Enum>, L<Hash|Sub::HandlesVia::HandlerLibrary::Hash>, L<Number|Sub::HandlesVia::HandlerLibrary::Number>, L<Scalar|Sub::HandlesVia::HandlerLibrary::Scalar>, and L<String|Sub::HandlesVia::HandlerLibrary::String>. An arrayref can be provided for C<handles_via>, though many of the options are conceptually contradictory. handles_via => [ 'Number', 'Scalar' ] =head2 C<< use Sub::HandlesVia >> Mite goes to a lot of effort to avoid you needing to C<< use Sub::HandlesVia >> directly in your classes and roles, and thus avoid you needing to add it as a dependency. However, there are edge cases that it might not handle. In these cases, you should be able to C<< use SubHandlesVia >> in your code I<< after >> your C<< use MyApp::Mite >> and Sub::HandlesVia will intervene and make things work. This adds a dependency on Sub::HandlesVia though. package MyApp::Kitchen { use MyApp::Mite; use Sub::HandlesVia; has food => ( is => 'ro', isa => 'ArrayRef[Str]', handles_via => 'Array', default => sub { [] }, handles => { 'add_food' => 'push', 'find_food' => 'grep', }, ); } Now Mite will no longer generate C<add_food> and C<find_food> methods in your F<Kitchen.pm.mite.pm> file when you run C<< mite compile >>. Instead, Sub::HandlesVia will generate them at run-time when your application runs. =head1 BUGS Please report any bugs to L<https://github.com/tobyink/p5-sub-handlesvia/issues>. =head1 SEE ALSO Misc advanced documentation: L<Sub::HandlesVia::Manual::Advanced>. L<Sub::HandlesVia>, L<Mite>. Documentation for delegatable methods: L<Sub::HandlesVia::HandlerLibrary::Array>, L<Sub::HandlesVia::HandlerLibrary::Blessed>, L<Sub::HandlesVia::HandlerLibrary::Bool>, L<Sub::HandlesVia::HandlerLibrary::Code>, L<Sub::HandlesVia::HandlerLibrary::Counter>, L<Sub::HandlesVia::HandlerLibrary::Enum>, L<Sub::HandlesVia::HandlerLibrary::Hash>, L<Sub::HandlesVia::HandlerLibrary::Number>, L<Sub::HandlesVia::HandlerLibrary::Scalar>, and L<Sub::HandlesVia::HandlerLibrary::String>. =head1 AUTHOR Toby Inkster E<lt>tobyink@cpan.orgE<gt>. =head1 COPYRIGHT AND LICENCE This software is copyright (c) 2022 by Toby Inkster. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. =head1 DISCLAIMER OF WARRANTIES THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.