use UNIVERSAL::require;
use strict;
use warnings;
+use Maypole::Config;
our $VERSION = "1.8";
__PACKAGE__->mk_classdata($_) for qw( config init_done view_object );
__PACKAGE__->mk_accessors(
qw( ar params query objects model_class
args action template )
);
-__PACKAGE__->config( {} );
+__PACKAGE__->config( Maypole::Config->new() );
__PACKAGE__->init_done(0);
use Maypole::Constants;
sub { Maypole::handler( $calling_class, @_ ) };
}
my $config = $calling_class->config;
- $config->{model} ||= "Maypole::Model::CDBI";
- $config->{model}->require;
- die "Couldn't load the model class $config->{model}: $@" if $@;
- $config->{model}->setup_database( $config, $calling_class, @_ );
- for my $subclass ( @{ $config->{classes} } ) {
+ $config->model || $config->model("Maypole::Model::CDBI");
+ $config->model->require;
+ die "Couldn't load the model class $config->model: $@" if $@;
+ $config->model->setup_database( $config, $calling_class, @_ );
+ for my $subclass ( @{ $config->classes } ) {
no strict 'refs';
- unshift @{ $subclass . "::ISA" }, $config->{model};
- $config->{model}->adopt($subclass)
- if $config->{model}->can("adopt");
+ unshift @{ $subclass . "::ISA" }, $config->model;
+ $config->model->adopt($subclass)
+ if $config->model->can("adopt");
}
}
sub init {
my $class = shift;
my $config = $class->config;
- $config->{view} ||= "Maypole::View::TT";
- $config->{view}->require;
- die "Couldn't load the view class $config->{view}: $@" if $@;
- $config->{display_tables} ||= [ @{ $class->config->{tables} } ];
- $class->view_object( $class->config->{view}->new );
+ $config->view || $config->view("Maypole::View::TT");
+ $config->view->require;
+ die "Couldn't load the view class ".$config->view.": $@" if $@;
+ $config->display_tables || $config->display_tables([ $class->config->tables ]);
+ $class->view_object( $class->config->view->new );
$class->init_done(1);
}
sub handler_guts {
my $r = shift;
- $r->model_class( $r->config->{model}->class_of( $r, $r->{table} ) );
+ $r->model_class( $r->config->model->class_of( $r, $r->{table} ) );
my $applicable = $r->is_applicable;
unless ( $applicable == OK ) {
sub is_applicable {
my $self = shift;
my $config = $self->config;
- $config->{ok_tables} ||= $config->{display_tables};
- $config->{ok_tables} = { map { $_ => 1 } @{ $config->{ok_tables} } }
- if ref $config->{ok_tables} eq "ARRAY";
+ $config->ok_tables || $config->ok_tables($config->display_tables);
+ $config->ok_tables ({ map { $_ => 1 } @{ $config->ok_tables } })
+ if ref $config->ok_tables eq "ARRAY";
warn "We don't have that table ($self->{table})"
if $self->debug
- and not $config->{ok_tables}{ $self->{table} };
- return DECLINED() unless exists $config->{ok_tables}{ $self->{table} };
+ and not $config->ok_tables->{ $self->{table} };
+ return DECLINED() unless exists $config->ok_tables->{ $self->{table} };
# Does the action method exist?
my $cv = $self->model_class->can( $self->{action} );
package ProductDatabase;
use base 'Apache::MVC';
__PACKAGE__->set_database("dbi:mysql:products");
- ProductDatabase->config->{uri_base} = "http://your.site/catalogue/";
+ ProductDatabase->config->uri_base = "http://your.site/catalogue/";
ProductDatabase::Product->has_a("category" => ProductDatabase::Category);
# ...
Then your top-level application package should change the model class:
(Before calling C<setup>)
- ProductDatabase->config->{model} = "ProductDatabase::Model";
+ ProductDatabase->config->model("ProductDatabase::Model");
(The C<:Exported> attribute means that the method can be called via the
URL C</I<table>/supersearch/...>.)