NAME¶
Class::Forward - Namespace Dispatch and Resolution
VERSION¶
version 0.100006
SYNOPSIS¶
use Class::Forward;
# create a resolution object
my $res = Class::Forward->new(namespace => 'MyApp');
# returns MyApp::Data
say $res->forward('data');
# returns a MyApp::Data instance
my $data = $res->forward('data.new');
# returns the string /my_app/data
my $string = $res->reverse('data.new');
# returns MyApp::Data
say $res->forward($string);
DESCRIPTION¶
Class::Forward is designed to resolve Perl namespaces from shorthand (which is
simply a file-path-like specification). Class::Forward can also be used to
dispatch method calls using said shorthand. See the following exported
functions for examples on how this can be used.
EXPORTS¶
clsf¶
The exported function clsf is responsible for resolving your shorthand. The
following is an example of how it functions:
package App::Store;
use CGI;
use Class::Forward;
clsf; # returns App::Store
clsf './user'; # returns App::Store::User
clsf './user.new', name => 'N30'; # return a new App::Store::User object
clsf './user_profile.new'; # ... App::Store::UserProfile object
clsf '../user'; # returns App::User
clsf '//'; # returns App; (top of the calling class)
clsf '//.new'; # returns a new App object
clsf '//view'; # ... returns App::View
clsf '//view.new'; # ... returns a new App::View object
clsf '//view.new.render'; # ... dispatches methods in succession
clsf 'cgi'; # returns App::Store::Cgi
clsf '/cgi'; # returns Cgi (or CGI if already loaded)
1;
The clsf function takes two arguments, the shorthand to be translated, and an
optional list of arguments to be passed to the last method appended to the
shorthand.
clsr¶
The exported function clsr is responsible for resolving your shorthand. The
following is an example of how it functions:
package App::Store;
use CGI;
use Class::Forward;
clsr; # returns /app/store
clsr './user'; # returns /app/store/user
clsr './user.new', name => 'N30'; # returns /app/store/user
clsr './user_profile'; # returns /app/store/user_profile
clsr '../user'; # returns /app/user
clsr '//'; # returns /app
clsr '//.new'; # returns /app
clsr '//view'; # returns /app/view
clsr '//view.new'; # returns /app/view
clsr '//view.new.render'; # returns /app/view
clsr 'cgi'; # returns /app/store/cgi
clsr '/cgi'; # returns /cgi
1;
The clsr function takes three arguments, the shorthand to be translated
(required), the offset (optional level of namespace nodes to omit
left-to-right), and the delimiter to be used to generate the resulting path
(defaults to forward-slash).
METHODS¶
new¶
The new method is used to instantiate a new instance.
namespace¶
The namespace method is used to get/set the root namespace used as an anchor for
all resolution requests.
my $namespace = $self->namespace('MyApp');
forward¶
The forward (or forward_lookup) method is used to resolve Perl namespaces from
path-like shorthand.
say $self->forward('example');
# given a default namespace of MyApp
# prints MyApp::Example
reverse¶
The reverse method (or reverse_lookup) is used to generate path-like shorthand
from Perl namespaces.
say $self->reverse('Simple::Example');
# given a default namespace of MyApp
# prints /my_app/simple/example
say $self->reverse('Simple::Example', 1);
# given a default namespace of MyApp
# prints simple/example
say $self->reverse('Simple::Example', 1, '_');
# given a default namespace of MyApp
# prints simple_example
SEE ALSO¶
Class::Forward was designed to provide shorthand and easy access to class
namespaces in an environment where you're dealing with a multitude of long
well-named classes. In that vein, it provides an alternative to modules like
aliased, aliased::factory, as, and the like, and also modules like
Namespace::Dispatch which are similar enough to be mentioned but really
address a completely different issue.
AUTHOR¶
Al Newkirk <anewkirk@ana.io>
COPYRIGHT AND LICENSE¶
This software is copyright (c) 2012 by Al Newkirk.
This is free software; you can redistribute it and/or modify it under the same
terms as the Perl 5 programming language system itself.