$config->{display_tables} ||= [ $class->config->{loader}->tables ];
for my $subclass (@{$config->{classes}}) {
no strict 'refs';
- push @{$subclass."::ISA"}, $class->config->{model};
+ unshift @{$subclass."::ISA"}, $class->config->{model};
$config->{model}->adopt($subclass)
if $config->{model}->can("adopt");
}
my $self = shift;
my $config = $self->config;
my %ok = map {$_ => 1} @{$config->{display_tables}};
+ warn "We don't have that table ($self->{table})"
+ unless $ok{$self->{table}};
return DECLINED() unless exists $ok{$self->{table}};
# Does the action method exist?
+ # XXX We should set the method class to the class for the table
my $cv = $self->model_class->can($self->{action});
+ warn "We don't have that action ($self->{action})" unless $cv;
return DECLINED() unless $cv;
# Is it exported?
$self->{method_attribs} = join " ", attributes::get($cv);
+ do { warn "$self->{action} not exported";
return DECLINED()
- unless $self->{method_attribs} =~ /\bExported\b/i;
+ } unless $self->{method_attribs} =~ /\bExported\b/i;
return OK();
}
sub FETCH_CODE_ATTRIBUTES { $remember{$_[1]}
}
-sub view :Exported {
- my ($self, $r) = @_;
- return $self->retrieve(shift @{$r->{args}});
-}
-
-sub edit :Exported {
- my ($self, $r) = @_;
- return $self->retrieve(shift @{$r->{args}});
-}
+sub view :Exported { }
+sub edit :Exported { }
sub do_edit { die "This is an abstract method" }
+sub get_objects { die "This is an abstract method" }
sub list :Exported {
my ($self, $r) = @_;
- return $self->retrieve_all;
+ $r->objects([ $self->retrieve_all ]);
}
sub process {
my ($class, $r) = @_;
$r->template( my $method = $r->action );
- $r->objects([ $class->$method($r) ]);
+ $r->objects([ $class->get_objects($r) ]);
+ $class->$method($r)
}
sub column_names { my $class = shift; map { $_ => ucfirst $_ } $class->columns }
+sub get_objects {
+ my ($self, $r) = @_;
+ return $self->retrieve(shift @{$r->{args}});
+}
+
sub do_edit :Exported {
my ($self, $r) = @_;
my $h = CGI::Untaint->new(%{$r->{params}});
my $obj;
if (@{$r->{args}}) {
# We have something to edit
- $obj = $self->retrieve($r->{args}[0]);
+ ($obj) = @{$self->objects};
$obj->update_from_cgi($h);
warn "Updating an object ($obj) with ".Dumper($h); use Data::Dumper;
} else {
return $obj;
}
+sub delete :Exported {
+ my ($self, $r) = @_;
+ $self->delete for @{ $r->objects };
+ $r->objects([ $self->retrieve_all ]);
+ $r->{template} = "list";
+}
+
sub adopt {
my ($self, $child) = @_;
$child->autoupdate(1);