-sub is_public
-{
- my ($self, $action) = @_;
-
- my %attrs = map {$_ => 1} $self->method_attrs($action);
-
- return 1 if $attrs{Exported};
-
- warn "'$action' not exported";
-
- 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;