Components
- urlbuilder: a web form that uses a pile of Javascript, some of it built atop jQuery. The URLs and Widgets it generates reference the webcache application.
- webcache application: a web app that places a cache in front of a Bedework public events calendar server. It is a jRuby implementation. It interacts with the feeder application on the calendar server.
- feeder application (part of the Bedework calendar server) -- a web app that generates public event feeds.
URL/Widget Builder
From the user's perspective it all starts here. The user fills out a web form where she dictates which events she wants (lectures and seminars hosted by the School of Architecture, for example), over what timeframe (the next 21 days, the current month, etc.) and in what form (rss feed, iframe widget, etc.). For those looking for a feed, the form generates a URL that when clicked initiates a download (icalendar) or perhaps an invocation of their feed aggregators (rss). For those looking for a widget, the form writes some paste-able code into a text box.
More information here:
CachedFeeder
CachedFeeder is written in Ruby and uses Ruby's page cache. Read here. Results that Bedework generates are mapped to a unique URL; each URL corresponds to a physical location in the cache's filestore. The filestore is hierarchical and follows the path components in the URL. As you'd expect, when a URL is requested, CachedFeeder first looks for the corresponding cache file. If the file exists, then it returns it. If it doesn't exist, the caching app calls bedework's feeder application and caches the resulting file in the cache's filesystem store.
CachedFeeder uses jruby, an implementation of Ruby that generates JVM code, to compile the program into a war file for deployment.
The cache appears in deployedmentarea/webcache/v1.0. Currently, cache pages aren't expired by the system. See this page for some advice on expiring pages.
Feeder Application
The feeder application is a simplified version of the webclient application. It doesn't need nearly as much functionality, since the app only needs to worry about public event feeds. Code that creates, updates, and deletes was removed.
