![]() |
![]()
| ![]() |
![]()
NAMESub::HandlesVia::Manual::WithMite - using Sub::HandlesVia with Mite SYNOPSISpackage MyApp::Kitchen { use MyApp::Mite; has food => ( is => 'ro', isa => 'ArrayRef[Str]', handles_via => 'Array', default => sub { [] }, handles => { 'add_food' => 'push', 'find_food' => 'grep', }, ); } MANUALSub::HandlesVia allows you to delegate methods from your class to the values of your objects' attributes. Conceptually, it allows you to define "$object->push_number($n)" to be a shortcut for "$object->numbers->push($n)" except that "$object->numbers" is an arrayref, so doesn't have methods you can call on it like "push". Mite 0.009000 and above have built-in "handles_via" support. Mite will co-operate with Sub::HandlesVia to implement "handles_via" and avoid your project having a Sub::HandlesVia dependency! Which Methods Can Be Delegated To?The "handles_via" option indicates which library of methods should be available. Valid values include Array, Blessed, Bool, Code, Counter, Enum, Hash, Number, Scalar, and String. An arrayref can be provided for "handles_via", though many of the options are conceptually contradictory. handles_via => [ 'Number', 'Scalar' ] "use Sub::HandlesVia"Mite goes to a lot of effort to avoid you needing to "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 "use SubHandlesVia" in your code after your "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 "add_food" and "find_food" methods in your Kitchen.pm.mite.pm file when you run "mite compile". Instead, Sub::HandlesVia will generate them at run-time when your application runs. BUGSPlease report any bugs to <https://github.com/tobyink/p5-sub-handlesvia/issues>. SEE ALSOMisc advanced documentation: Sub::HandlesVia::Manual::Advanced. Sub::HandlesVia, Mite. Documentation for delegatable methods: Sub::HandlesVia::HandlerLibrary::Array, Sub::HandlesVia::HandlerLibrary::Blessed, Sub::HandlesVia::HandlerLibrary::Bool, Sub::HandlesVia::HandlerLibrary::Code, Sub::HandlesVia::HandlerLibrary::Counter, Sub::HandlesVia::HandlerLibrary::Enum, Sub::HandlesVia::HandlerLibrary::Hash, Sub::HandlesVia::HandlerLibrary::Number, Sub::HandlesVia::HandlerLibrary::Scalar, and Sub::HandlesVia::HandlerLibrary::String. AUTHORToby Inkster <tobyink@cpan.org>. COPYRIGHT AND LICENCEThis 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. DISCLAIMER OF WARRANTIESTHIS 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.
|