NAME

Egg::D::Stand - Standard dispatch for Egg.

SYNOPSIS

Example of code in which dispatch is made from control.

sub create_dispatch {
	my($e)= @_;
	$e->{dispatch}= Egg::D::Stand->_new($e);
}

DESCRIPTION

When the constructor is called, dispatch_map of dispatch on the project side is called.

How the behavior at each request is done on the dispatch_map side has been decided. How to call sub-dispatch can be decided with dispatch_map.

If finished of the call of the constructor is effective, nothing is done.

It is an example of dispatch_map as follows.

package MYPROJECT::D;
use strict;
use Egg::Const;

sub dispatch_map {
	my($dis, $e)= @_;
	#
	# The directory name of Request Path of the first hierarchy is received.
	# If it is empty, ARGS is returned to call _default
	#  of MYPROJECT::D::Root.
	#
	my $dir1= $e->snip->[0] || return qw{ Root };
	if ($dir1=~/^hoge/) {
		#
		# The directory name of the second hierarchy is received.
		# If it is empty, the template definition is returned. (It is 0 to
		#  actually extend.)
		# And, it tries always to call _begin and _end though _default of
		# Root is not called.
		#
		my $dir2= $e->snip->[1]
		  || return $dis->_template('/hoge/index.tt');
		if ($dir2=~/^foo/) {
			#
			# Processing is entrusted to index (method)
			#  of MYPROJECT::D::Foo. 
			# The thing that $e->response->body is defined or template by
			# index is expected.
			#
			return qw{ Foo index };
		} else {
			#
			# The method of the leading part of MYPROJECT::D::Foo is undefined.
			# It defines it directly guessing the template.
			# _begin and _end are called.
			# When 1 is given to the second argument of make, existence under
			# of $e->config->{root} is checked.
			# 404 is returned in case of not being.
			#
			return ('Foo', 0, $dis->_template_make("/$dir1/$dir2", 1));
		}
	} elsif ($dir1=~/^boo/) {
		#
		# _default of MYPROJECT::D::Boo operates if it is empty.
		#
		my $dir2= $e->snip->[1] || return qw{ Boo };
		if ($dir=~/.+\.txt$/) {
			#
			# If the second hierarchy is a file name, contents of a suitable
			# file are returned. And, $e->responce->body is defined.
			#
			$e->responce->content_type('text/plain');
			open FH, "/path/to/boo.txt" || return $e->finished( NOT_FOUND );
			$e->responce->body( join '', <FH> );
			close FH;
			return 0;
		} else {
			return $e->finished( FORBIDDEN ); # Forbidden is returned.
		}
	}
	#
	# All requests not matched above are returned by _default
	# of MYPROJECT::D::Root.
	#
	return return qw{ Root };
	#
	#
	# Or, when you return Not Found.
	return $e->finished( NOT_FOUND );
	#
}

METHODS

$e->_template([TEMPLATE PATH], [1]);

The template is decided. When 1 is given to the second argument of make, existence under of $e->config->{root} is checked. 404 is returned in case of not being.

$e->_template_make([REQUEST PATH], [1]);

Template is guessed by given Path. After a suitable template is decided, processing is passed to $e->_template.

$e->_call([PACKAGE NAME]);

After the name supplemented with MYPROJECT::D is packaged in require, the name is returned.

SEE ALSO

Egg::Release

AUTHOR

Masatoshi Mizuno, <mizuno@bomcity.com>

COPYRIGHT AND LICENSE

Copyright (C) 2006 Bee Flag, Corp. <http://egg.bomcity.com/>, All Rights Reserved.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.6 or, at your option, any later version of Perl 5 you may have available.