Criteria 1.0 ============ Criteria is a module for abstracting queries to various data sets. For instance, you might have a flat text file, or an array of Ruby objects, or a SQL database, and wish to perform the same query on any given source, without different versions of code for each. This module was inspired by the work of flgr (on #ruby-talk) on Junction, and the ENV.var work by h9k (also on #ruby-talk). Here are some examples: idx1 = SQLTable.new("orders") q1 = (idx1.price > idx1.paid) & (idx1.duedate < Time.now.to_i) q1.limit = 5 q1.order = :ASC q1.order_by = idx1.name, idx1.age puts q1.select # => SELECT * FROM orders WHERE ((orders.price > orders.paid) AND # (orders.duedate < 1062616643)) LIMIT 5 ORDER BY orders.name, # orders.age ASC The generic Table superclass with the same query: idx2 = Table.new q2 = (idx2.price > idx2.paid) & (idx2.duedate < Time.now.to_i) puts q2.inspect puts q1.inspect # => (& (> :price :paid) (< :duedate 1062616719)) # => (& (> :price :paid) (< :duedate 1062616719)) The very simple 'mysql' table included works like SQLTable, except it actually returns a MysqlRes for immediate use. There are other included table types as well. You can find Criteria at the following location: http://mephle.org/Criteria/ -- Ryan Pavlik <rpav / mephle.com>