public
Description: A simple event-oriented application library for Ruby
Homepage: http://rdoc.info/projects/Sutto/perennial
Clone URL: git://github.com/Sutto/perennial.git
name age message
file .gitignore Sat Aug 08 03:13:27 -0700 2009 Fix gem issues [Sutto]
file .gitmodules Thu Oct 08 21:45:02 -0700 2009 Add in fakefs again [Sutto]
file README.md Mon Sep 07 07:16:29 -0700 2009 Add proxy, delegateable and refactor core exts ... [Sutto]
file Rakefile Thu Oct 08 21:42:17 -0700 2009 Temp remove fakefs and add basic reloading tests [Sutto]
directory bin/ Tue Sep 08 04:04:13 -0700 2009 Misc refactoring, add fix for cia on Ruby < 1.8... [Sutto]
directory lib/ Sat Nov 07 06:13:33 -0800 2009 Manifest fix [Sutto]
directory log/ Wed Jul 22 03:28:48 -0700 2009 Add the hook mixin: [Sutto]
file perennial.gemspec Sat Nov 07 06:00:40 -0800 2009 Regenerated gemspec for version 1.1.0 [Sutto]
directory templates/ Mon Sep 07 08:58:45 -0700 2009 Bump version, speel correctly [Sutto]
directory test/ Sat Nov 07 06:00:01 -0800 2009 All tests pass, refactoring the manifest system [Sutto]
directory vendor/ Thu Oct 08 21:45:02 -0700 2009 Add in fakefs again [Sutto]
README.md

Perennial - a Ruby Event-driven application Library

Perennial is yet another god damned event library / framework for Ruby, built on top of EventMachine. The whole goal of Perennial is to make it easy to build a particular style / class of application such as Marvin. Most of the code has been extracted from building Marvin (and later, BirdGrinder - like Marvin but for twitter).

Applications built for Perennial are devised around the concept of 'clients' and 'handlers'. Clients are things which handle the actual processing (e.g. Marvin's IRC client takes the IRC protocol and converts it into events) and handlers respond to messages. In practice, it's an approach inspired by Rack in that we do the simplest thing's possible.

Since each event processed by a handler is incredibly simple (a symbol for a name and a hash of associated options / details), and there are typically few requirements (e.g. a handler only typically needs to define the 'handle' method) it makes it relatively easy to build your application how you like.

In other words, Perennial is mainly a bunch of useful mixings (Dispatchable, Hookable, Delegateable) which fit in with some evented application design along with the framework for building applications around this design.