package Maypole::Model::Base;
+use strict;
use Maypole::Constants;
use attributes ();
+# don't know why this is a global - drb
our %remember;
-sub MODIFY_CODE_ATTRIBUTES { $remember{ $_[1] } = $_[2]; () }
+sub MODIFY_CODE_ATTRIBUTES
+{
+ shift; # class name not used
+ my ($coderef, @attrs) = @_;
+
+ $remember{$coderef} = \@attrs;
+
+ # previous version took care to return an empty array, not sure why,
+ # but shall cargo cult it until know better
+ return;
+}
-sub FETCH_CODE_ATTRIBUTES { $remember{ $_[1] } }
+sub FETCH_CODE_ATTRIBUTES { @{ $remember{$_[1]} || [] } }
sub process {
my ( $class, $r ) = @_;
my $method = $r->action;
- return if $r->{template}; # Authentication has set this, we're done.
$r->{template} = $method;
- $r->objects([ $class->fetch_objects($r) ]);
+ my $obj = $class->fetch_objects($r);
+ $r->objects([$obj]) if $obj;
+
$class->$method( $r, $obj, @{ $r->{args} } );
}
Empty Action.
+=item index
+
+Empty Action, calls list if provided with a table.
=back
sub edit : Exported {
}
+sub index : Exported {
+ my ( $self, $r ) = @_;
+ if ($r->table) {
+ $r->template("list");
+ return $self->list($r);
+ }
+}
+
=pod
Also, see the exported commands in C<Maypole::Model::CDBI>.
} $class->columns;
}
-=head2 description
-
-A description of the class to be passed to the template.
-
-=cut
-
-sub description { "A poorly defined class" }
-
=head2 is_public
should return true if a certain action is supported, or false otherwise.
=cut
sub is_public {
- my ( $self, $action ) = @_;
+ my ( $self, $action, $attrs ) = @_;
my $cv = $self->can($action);
- return 0 unless $cv;
- my $attrs = join " ", attributes::get($cv);
+ warn "is_public failed . action is $action. self is $self" and return 0 unless $cv;
+
+ my %attrs = (ref $attrs) ? %$attrs : map {$_ => 1} $self->method_attrs($action,$cv) ;
+
do {
- warn "$action not exported" if Maypole->debug;
- return 0;
- } unless $attrs =~ /\bExported\b/i;
+ warn "is_public failed. $action not exported. attributes are : ", %attrs;
+ return 0;
+ } unless $attrs{Exported};
return 1;
}
+
+=head2 add_model_superclass
+
+Adds model as superclass to model classes (if necessary)
+
+=cut
+
+sub add_model_superclass { return; }
+
+=head2 method_attrs
+
+Returns the list of attributes defined for a method. Maypole itself only
+defines the C<Exported> attribute.
+
+=cut
+
+sub method_attrs {
+ my ($class, $method, $cv) = @_;
+
+ $cv ||= $class->can($method);
+
+ return unless $cv;
+
+ my @attrs = attributes::get($cv);
+
+ return @attrs;
+}
+
=head2 related
This can go either in the master model class or in the individual
1;
+=head1 SEE ALSO
+
+L<Maypole>, L<Maypole::Model::CDBI>.
+
+=head1 AUTHOR
+
+Maypole is currently maintained by Aaron Trevena.
+
+=head1 AUTHOR EMERITUS
+
+Simon Cozens, C<simon#cpan.org>
+
+Simon Flack maintained Maypole from 2.05 to 2.09
+
+Sebastian Riedel, C<sri#oook.de> maintained Maypole from 1.99_01 to 2.04
+
+=head1 LICENSE
+
+You may distribute this code under the same terms as Perl itself.
+
+=cut