Eidolon::Core::Attributes - base class for application controllers (only when


Eidolon documentation Contained in the Eidolon distribution.

Index


Code Index:

NAME

Top

Eidolon::Core::Attributes - base class for application controllers (only when Eidolon::Driver::Router::Basic router driver is used).

SYNOPSIS

Top

Controller for example application (lib/Example/Controller/Example.pm):

    package Example::Controller::Example;
    use base qw/Eidolon::Core::Attributes/;

    sub default : Default
    {
        my $r;

        $r = Eidolon::Core::Registry->get_instance;
        $r->cgi->send_header;

        print "Hello there!";
    }

    1;

DESCRIPTION

Top

The Eidolon::Core::Attributes class contains methods to construct application controllers for Eidolon::Driver::Router::Basic router driver. Each controller should contain at least 1 method for request handling. Request routing is done with help of code attributes. For additional information about routing please refer to Eidolon::Driver::Router::Basic.

This class should never be used directly.

METHODS

Top

MODIFY_CODE_ATTRIBUTES($class, $code, @attrs)

Is called when perl finds a method attribute. $class - package name, in which the attribute was found, $code - code reference, @attrs - array of attributes for this method.

FETCH_CODE_ATTRIBUTES($class, $code)

Returns array of attributes for given $code reference in given $class.

SEE ALSO

Top

Eidolon, Eidolon::Driver::Router::Basic

LICENSE

Top

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

AUTHOR

Top

Anton Belousov, <abel@cpan.org>

COPYRIGHT

Top


Eidolon documentation Contained in the Eidolon distribution.

package Eidolon::Core::Attributes;
# ==============================================================================
#
#   Eidolon
#   Copyright (c) 2009, Atma 7
#   ---
#   Eidolon/Core/Attributes.pm - base class for attributes handling
#
# ==============================================================================

use warnings;
use strict;

our $VERSION = "0.02"; # 2009-05-14 04:57:12

# ------------------------------------------------------------------------------
# @ MODIFY_CODE_ATTRIBUTES($class, $code, @attrs)
# modify code attributes (God bless guys from the Catalyst team)
# ------------------------------------------------------------------------------
sub MODIFY_CODE_ATTRIBUTES
{
    my ($class, $code, @attrs) = @_;

    {
        no strict "refs";

        unless (defined ${$class."::_code_cache"})
        {
            ${ $class."::_code_cache" } = {};
            ${ $class."::_attr_cache" } = {};

            *{ $class."::code_cache"  } = sub { return ${ $_[0]."::_code_cache" } }; 
            *{ $class."::attr_cache"  } = sub { return ${ $_[0]."::_attr_cache" } };
        }
    }

    $class->attr_cache->{$code} = [ @attrs ];
    $class->code_cache->{$_}    = $code foreach (@attrs);

    return ();
}

# ------------------------------------------------------------------------------
# @ FETCH_CODE_ATTRIBUTES($class, $code)
# read code attributes
# ------------------------------------------------------------------------------
sub FETCH_CODE_ATTRIBUTES
{
    return @{ $_[0]->attr_cache->{$_[1]} };
}

1;

__END__