X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=lib%2FApache%2FMVC%2FModel%2FBase.pm;h=b7337be7e2996808434cb9bacc3c364983275bf2;hb=4c4e58eb02155a43397f30b900c5b30f755cb874;hp=89feb7c07278538e5ead90319fcbc3695e355dc6;hpb=fd44a844f551caa56dfaaacb4ba2c6e69d9a4157;p=maypole.git diff --git a/lib/Apache/MVC/Model/Base.pm b/lib/Apache/MVC/Model/Base.pm index 89feb7c..b7337be 100644 --- a/lib/Apache/MVC/Model/Base.pm +++ b/lib/Apache/MVC/Model/Base.pm @@ -1,31 +1,91 @@ package Apache::MVC::Model::Base; our %remember; -sub MODIFY_CODE_ATTRIBUTES { - $remember{$_[1]} = $_[2]; () -} - -sub FETCH_CODE_ATTRIBUTES { $remember{$_[1]} -} +sub MODIFY_CODE_ATTRIBUTES { $remember{$_[1]} = $_[2]; () } -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 do_edit { die "This is an abstract method" } +sub FETCH_CODE_ATTRIBUTES { $remember{$_[1]} } +sub view :Exported { } +sub edit :Exported { } 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->retrieve(shift @{$r->{args}}) ]); + $class->$method($r); } + +=head1 NAME + +Apache::MVC::Model::Base - Base class for model classes + +=head1 DESCRIPTION + +Anyone subclassing this for a different database abstraction mechanism +needs to provide the following methods: + +=head2 do_edit + +If there is an object in C<$r-Eobjects>, then it should be edited +with the parameters in C<$r-Eparams>; otherwise, a new object should +be created with those parameters, and put back into C<$r-Eobjects>. +The template should be changed to C, or C if there were any +errors. A hash of errors will be passed to the template. + +=cut + +sub do_edit { die "This is an abstract method" } + +=head2 retrieve + +This turns an ID into an object of the appropriate class. + +=head2 adopt + +This is called on an model class representing a table and allows the +master model class to do any set-up required. + +=head2 related + +This can go either in the master model class or in the individual +classes, and returns a list of has-many accessors. A brewery has many +beers, so C needs to return C. + +=head2 columns + +This is a list of the columns in a table. + +=head2 table + +This is the name of the table. + +=head2 Commands + +See the exported commands in C. + +=head1 Other overrides + +Additionally, individual derived model classes may want to override the +following methods: + +=head2 column_names + +Return a hash mapping column names with human-readable equivalents. + +=cut + +sub column_names { my $class = shift; map { $_ => ucfirst $_ } $class->columns } + +=head2 description + +A description of the class to be passed to the template. + +=cut + +sub description { "A poorly defined class" } + +1; +