Added capability to store multiple attributes to Mp-Model-Base.
Split method_attrs method out of is_public in Mp-Model-Base.
git-svn-id: http://svn.maypole.perl.org/Maypole/trunk@390
48953598-375a-da11-a14b-
00016c27c3ee
=item parse_args
=item parse_location
=item send_output
=item parse_args
=item parse_location
=item send_output
+=item redirect_request
+
=item parse_args
=item parse_location
=item send_output
=item parse_args
=item parse_location
=item send_output
+=item redirect_request
+
+
=back
=head1 DEPENDANCIES
=back
=head1 DEPENDANCIES
Maypole backend. It should return something that looks like an Apache
or CGI request object, it defaults to blank.
Maypole backend. It should return something that looks like an Apache
or CGI request object, it defaults to blank.
+=head3 default_table_view
-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 ) = @_;
sub process {
my ( $class, $r ) = @_;
-sub is_public {
- my ( $self, $action ) = @_;
- my $cv = $self->can($action);
- return 0 unless $cv;
- my $attrs = join " ", (attributes::get($cv) || ());
- do {
- warn "$action not exported" if Maypole->debug;
- return 0;
- } unless $attrs =~ /\bExported\b/i;
- return 1;
+sub is_public
+{
+ my ($self, $action) = @_;
+
+ my %attrs = map {$_ => 1} $self->method_attrs($action);
+
+ return 1 if $attrs{Exported};
+
+ warn "$action not exported" if Maypole->debug;
+
+ return 0;
+}
+
+=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) = @_;
+
+ my $cv = $class->can($method);
+
+ return unless $cv;
+
+ my @attrs = attributes::get($cv);
+
+ return @attrs;