The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Class::Forward - Traverse Class Namspaces

VERSION

version 0.100002

SYNOPSIS

    package MyApp;

    use Class::Forward;

    sub class {

        my ($self, $shorthand, @arguments) = @_;

        my $class = Class::Forward->new(namespace => ref $self);

        return $class->forward($shorthand, @arguments);

    }

    package main;

    my $app  = MyApp->new;
    my $data = $app->class('data.new'); # returns a new MyApp::Data object

DESCRIPTION

Class::Forward is designed to resolve Perl namespaces from shorthand (which is simply a file-system 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 namspace nodes to omit left-to-right), and the delimeter to be used to generate the resulting path (defaults to forward-slash).

METHODS

namespace

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 method is used to resolve Perl namespaces from path-like shorthand.

    say $self->forward('/my_app/example');
    # prints MyApp::Example

reverse

The reverse method is used to generate path-like shorthand from Perl namespaces.

    say $self->reverse('MyApp::Example');
    # prints /my_app/example

    say $self->reverse('MyApp::Example', 1);
    # prints example

    say $self->reverse('MyApp::Example', 0, '_');
    # prints _my_app_example

SEE ALSO

Along my travels I recall visiting a similar module on the CPAN called Namespace::Dispatch which provides somewhat of the same functionality.

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.