use Maypole::Constants;
use attributes ();
+# don't know why this is a global - drb
our %remember;
sub MODIFY_CODE_ATTRIBUTES
$r->{template} = $method;
my $obj = $class->fetch_objects($r);
$r->objects([$obj]) if $obj;
+
$class->$method( $r, $obj, @{ $r->{args} } );
}
=cut
-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;
+sub is_public {
+ my ( $self, $action, $attrs ) = @_;
+ my $cv = $self->can($action);
+ 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 "is_public failed. $action not exported. attributes are : ", %attrs;
+ return 0;
+ } unless $attrs{Exported};
+ return 1;
}
+
+
=head2 method_attrs
Returns the list of attributes defined for a method. Maypole itself only
=cut
-sub method_attrs
-{
- my ($class, $method) = @_;
+sub method_attrs {
+ my ($class, $method, $cv) = @_;
- my $cv = $class->can($method);
+ $cv ||= $class->can($method);
return unless $cv;
my @attrs = attributes::get($cv);
-
+
return @attrs;
}