This repository has been archived on 2021-11-24. You can view files and clone it, but cannot push or open issues or pull requests.
2021-08-23 10:26:02 +02:00

85 lines
1.7 KiB
Ruby

# QI ActsAsCaching V0.7
module ActsAsCaching::Hook
def acts_as_caching(*args)
@acts_as_caching_options = args.extract_options!
def self.qi_cache_fields
@acts_as_caching_options[:fields]
end
@acts_as_caching_options[:fields].each do |s|
define_method("#{s}") {
if self.methods.include?(eval(":ca_#{s}"))
return eval("(!self.respond_to?('ac_#{s}') or !self.ac_#{s}) ? self.ca_#{s} : self.ac_#{s}")
end
}
end
define_method("qi_dynamics_cache"){
if self.methods.include?(:to_no_archive)
self.to_no_archive.each do |noc|
eval("self.ac_#{noc} = nil") if self.respond_to?("ac_#{noc}")
end
end
self.class.qi_cache_fields.each do |s|
if self.methods.include?(eval(":ca_#{s}"))
eval("self.cc_#{s} = self.#{s}")
end
end
}
after_validation :qi_dynamics_cache
define_method("archive_now"){
self.qi_dynamics_cache
self.archived = true
self.class.qi_cache_fields.each do |s|
if self.respond_to?("ac_#{s}")
eval("self.ac_#{s} = self.cc_#{s} ")
end
end
self.personalised_archive if self.methods.include?(:personalised_archive)
self.save
}
define_method("unarchive_now"){
self.archived = false
self.qi_dynamics_cache
self.class.qi_cache_fields.each do |s|
if self.respond_to?("ac_#{s}")
eval("self.ac_#{s} = nil ")
end
end
self.personalised_unarchive if self.methods.include?(:personalised_unarchive)
self.save
}
end
end