The right way . . . is to separate the meaning of a program from the implementation details.
Saying less about implementation should also make programs more flexible. Specifications change while a program is being written, and this is not only inevitable, but desirable.
---Paul Graham, ``The Hundred-Year Language''
Gestinanna uses XML vocabularies to describe workflows and controllers as state machines. Using taglibs, it provides various extensions for accessing the Gestinanna::POF packages, workflows, scripting, authorization and authentication, and various misc. odds and ends.
I finally got around to getting the code released. Twice as much code as the previous release :) Work got a bit funner for a few weeks.
Change log:
o Basic workflow support. See the listserv package for an example.
o Added a package system. Shell support is not complete, but sufficient for installing a package.
o Moved sample pages into packages installable via the package system.
o Added site configuration single inheritance.
o Extensive unit tests in the low-level modules. Not yet complete.
o Split state machine XML schema into two namespaces: state machine and scripting.
o shell tool may be configured not to use a pager.
o Added `site clone' command to the shell. Both cloning and creating a site will now create a site configuration as well.
o Added `site config' command to the shell to edit an existing site's configuration. The resulting configuration must be parsable by XML::LibXML.
o The `site uri add' command now takes an argument to indicate the object type the URI refers to.
o Gestinanna::Request::get_url added to resolve an object to a url (for use by Apache::AxKit::Provider::Gestinanna).
o Alzabo naming routine updated for Alzabo 0.82.
o Namespace handlers for XSM scripts are now configurable on a per-site basis.
o Namespaces can be specified for namespace handlers, overriding the default. This is useful for using different handlers that offer the same interface but work with different backends.
o Configuration information specific to a content handler type is now enclosed in a