+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;
+}
+
+=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;
+}
+
+=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<BeerDB::Brewery> needs to return C<beers>.
+
+=cut
+
+sub related {
+}