expiration-date version 1.1.0
by Tim P.
http://codeforpeople.rubyforge.org/expiration-date
(the “Screaming Bacon” release)
== DESCRIPTION
Really simple caching by attaching an expiration date to attributes.
The ExpirationDate module adss two methods to a class – expiring_attr
and
expiring_class_attr. These two methods are used to declare attributes in
the
instance and in the class, respectively, that will expire after some
period of
seconds have elapsed. The attribute is re-initialized from the given
block
after it has expired. This is a very simple form of caching.
== CHANGES
- 1 minor enhancement
- added expiring class attributes
== SYNOPSIS
A simple example demonstrating how the block gets called after the
expiration
time is passed.
class A
include ExpirationDate
expiring_attr( :foo, 60 ) { ‘foo’ }
end
a = A.new
a.foo #=> ‘foo’
a.foo = ‘bar’
a.foo #=> ‘bar’
sleep 61
a.foo #=> ‘foo’
A slightly more useful example. Here we are going to extract information
from a
database every five minutes. This assumes you have the ‘activesupport’
and
‘activerecord’ gems installed.
class MyModel < ::ActiveRecord::Base
include ExpirationDate
expiring_class_attr( :costly_data, 5.minutes ) {
models = MyModel.find( :all, :conditions => [‘costly query
conditions’] )
result = models.map {|m| # costly operations here}
result
}
end
MyModel.costly_data #=> result
Attributes can be expired manually, and the time it takes them to expire
can be
modified as well.
class AgeDemo
include ExpirationDate
expiring_attr( :bar, 120 ) { Time.now }
end
demo = AgeDemo.new
demo.bar #=> now
sleep 60
demo.bar #=> 60 seconds ago
demo.expire_bar_now
demo.bar #=> now
demo.alter_bar_age( 10 )
demo.expire_bar_now
demo.bar #=> now
sleep 11
demo.bar #=> now
Blessings,
TwP