7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
# File 'lib/model_cached.rb', line 7
def cache_by(*column_names)
options = {logical_delete: nil, scope: nil}.merge(column_names.)
options[:columns] = column_names
after_save :refresh_mc_keys
after_touch :refresh_mc_keys
after_destroy :expire_mc_keys
class_eval %{ def self.mc_options; #{options}; end }
column_names.each do |column|
class_eval %{ def self.find_by_#{column}(value); find_cached_by(#{column.to_s.inspect}, value); end }
end
if column_names.include?(:id)
class_eval do
def self.find(*args)
if args.size == 1 and (id = args.first).is_a?(Integer)
find_by_id(id) || raise(ActiveRecord::RecordNotFound, "Couldn't find #{name} with ID=#{id}")
else
super(*args)
end
end
end
end
include ModelCached::InstanceMethods
end
|