From 4e705fd1eb50e00a6abc176847cb3ad4c25578dc Mon Sep 17 00:00:00 2001 From: Eric Davis Date: Wed, 13 Oct 2010 16:54:48 -0700 Subject: [PATCH] [#4604] Simplify the cost caching system --- lib/rate_time_entry_patch.rb | 22 ++++++++------------- test/unit/lib/rate_time_entry_patch_test.rb | 3 ++- 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/lib/rate_time_entry_patch.rb b/lib/rate_time_entry_patch.rb index 5a2e959..3cd3267 100644 --- a/lib/rate_time_entry_patch.rb +++ b/lib/rate_time_entry_patch.rb @@ -9,8 +9,7 @@ module RateTimeEntryPatch unloadable # Send unloadable so it will not be unloaded in development belongs_to :rate - before_save :clear_cost_cache - before_save :cache_cost + before_save :cost end @@ -31,8 +30,10 @@ module RateTimeEntryPatch module InstanceMethods # Returns the current cost of the TimeEntry based on it's rate and hours + # + # Is a read-through cache method def cost - unless @cost + unless read_attribute(:cost) if self.rate.nil? amount = Rate.amount_for(self.user, self.project, self.spent_on.to_s) else @@ -40,27 +41,20 @@ module RateTimeEntryPatch end if amount.nil? - @cost = 0.0 + write_attribute(:cost, 0.0) else - @cost = amount.to_f * hours.to_f + # Write the cost to the database for caching + update_attribute(:cost, amount.to_f * hours.to_f) end - - cache_cost end - @cost + read_attribute(:cost) end def clear_cost_cache - @cost = nil write_attribute(:cost, nil) end - def cache_cost - @cost ||= cost - write_attribute(:cost, @cost) - end - def save_cached_cost clear_cost_cache update_attribute(:cost, cost) diff --git a/test/unit/lib/rate_time_entry_patch_test.rb b/test/unit/lib/rate_time_entry_patch_test.rb index 6e48ee1..76c5afd 100644 --- a/test/unit/lib/rate_time_entry_patch_test.rb +++ b/test/unit/lib/rate_time_entry_patch_test.rb @@ -50,7 +50,8 @@ class RateTimeEntryPatchTest < ActiveSupport::TestCase context "with a cache" do setup do - @time_entry.cache_cost + @time_entry.update_attribute(:cost, 2000.0) + @time_entry.reload end should "return the cached cost" do