Intro
Cache-column aims to make it easy to store the return values of functoins in the database for recall later.
Examples
First add the following code to set-up the before_save filter and include the rest of the methods:
has_cached_columns
Next, we need to set-up the columns that hold our cached values. This is accomplished through a migration
script/generate cache_column OBJECT/TABLENAME feild:type
For example
script/generate cache_column listing high_price:float low_price:float number_of_price_points:integer
The above migration will add cache columns of the defined time to the listings table.
Now we need to add our cache column deffinations to the model.
The general format is
cache_column :column_name,
So for our example we want to add
cache_column :high_price
cache_column :low_price
cache_column :number_of_price_points
Now this dosn’t do much so far other then map the virtual attribute
Object.high_price
to the database field
Ojbect.high_price_cache
No big deal, but the point is to store complex functions in the database. Lets say the high price attribute isn’t so strait forward, and is calculated in the find_high_price function
def find_high_price
sleep(10)
return '10.05'
end
We can now tell the gem to update the cached value every time the object is saved by changing the cache_column deffination to
cache_column :high_price, :on_save => :recheck, :action => :find_high_price
Its fairly self explanitory, but this just tells the gem to recheck the price stored in high_price_cache when the model is saved (or touched). The stored value is retreived from the function named in the :action key
There are a few other options like
cache_column :high_price, :on_save => :blank
and
cache_column :high_price, :on_save => :recheck, :action => :find_high_price, :update_validation => :high_price_changed
The :on_save => :blank just clears the value when it gets saved… not sure what the point of that is yet.
:update_validation should be set to the name of a function, if that function returns false then the cache column will not be updated.
I would love feedback, and bugs reports.
Limitations / Bugs
*Its my first gem.… so sorry for everything I’ve done wrong :) *It dosn’t store variables yet… Mabey next version. Till then use sanitize
Copyright © 2010 Brian Malinconico, released under the MIT license