+ 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
+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 {