domain_neutral 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2868d506ab5999b3bdfb949b1486c1a8cef507a9
4
- data.tar.gz: 9c48bcc5503051b3ace5e5e169ec26dd6fb19edc
3
+ metadata.gz: 0f5efbdab266c46f4389694389accd31b416a33b
4
+ data.tar.gz: 4a96857832d7baf3fbf7cf38559430f69d2c4ad7
5
5
  SHA512:
6
- metadata.gz: 28e382c272fc6fbc15b513d5eac723683d97a447405d5d0f64fa58f232b3cdcc92c01572c79b5533951525d737c37ca2e51433fb0ae58f321b7702e0b4722aa4
7
- data.tar.gz: 244d3890989160739db9f88a809a5cb6076448d732d97d4fcc452196c318476e307fd759aeca8a810b67cc4ef2aa7b02df320d9be3fd62f4ec09a4b104a0d066
6
+ metadata.gz: 68c7f2f9b5515b1faee5d87cff549f30daf1c43d3f111bc97e987b8b31c07164f9be063ef4ed095f583673dda8c69695b6a75d0c7aa2b8f9827e710243d2e511
7
+ data.tar.gz: 573e9a8514a100bae77e7281af051fbc2a922b8733cfdbb9c139100bdd9dfbdeee11903036ba6699207f754a7fd137f6caa758ba6f941d3bc2466f66b92a4e6b
@@ -57,9 +57,7 @@ module DomainNeutral
57
57
  # Overrides find by using cache.
58
58
  # The key in cache is [class_name, id] or ':class_name/:id', e.g. 'Role/1'
59
59
  def find(id)
60
- if caching_enabled
61
- Rails.cache.fetch([name, id]) { super }
62
- else
60
+ fetch([name, id]) do
63
61
  super
64
62
  end
65
63
  end
@@ -70,11 +68,7 @@ module DomainNeutral
70
68
  # Descriptor[:symbol]
71
69
  # Descriptor.symbol
72
70
  def find_by_symbol(symbol)
73
- if caching_enabled
74
- Rails.cache.fetch([name, symbol.to_s]) do
75
- where(symbol: symbol).first
76
- end
77
- else
71
+ fetch([name, symbol.to_s]) do
78
72
  where(symbol: symbol).first
79
73
  end
80
74
  end
@@ -107,6 +101,20 @@ module DomainNeutral
107
101
  def enable_caching(*args)
108
102
  self.caching_enabled = args.size > 0 ? args.first : true
109
103
  end
104
+
105
+ private
106
+ # Ensures cache is cleared if nil result
107
+ def fetch(key, options = nil)
108
+ if caching_enabled
109
+ result = Rails.cache.fetch(key, options) do
110
+ yield
111
+ end
112
+ Rails.cache.delete(key) unless result
113
+ else
114
+ result = yield
115
+ end
116
+ result
117
+ end
110
118
  end
111
119
 
112
120
  # Store symbol
@@ -1,3 +1,3 @@
1
1
  module DomainNeutral
2
- VERSION = "1.0.2"
2
+ VERSION = "1.0.3"
3
3
  end
@@ -95,16 +95,24 @@ module DomainNeutral
95
95
  @tc.enable_caching # true
96
96
  end
97
97
  should 'delegate find to super' do
98
- expect_cached [@tc.name, 44] do
98
+ expect_cached [@tc.name, 44], nil do
99
99
  assert_equal 44, @tc.find(44)
100
100
  end
101
101
  end
102
102
  should 'lookup object by symbol' do
103
- expect_cached [@tc.name, 'expert'] do
103
+ expect_cached [@tc.name, 'expert'], nil do
104
104
  @tc.expects(:where).with(symbol: :expert).returns([:ok])
105
105
  assert_equal :ok, @tc.find_by_symbol( :expert)
106
106
  end
107
107
  end
108
+ should 'delete cached entry if not found' do
109
+ expect_cached [@tc.name, 'expert'], nil do |cache|
110
+ @tc.expects(:where).with(symbol: :expert).returns([nil])
111
+ assert_equal nil, @tc.find_by_symbol( :expert)
112
+ assert_equal [@tc.name, 'expert'], cache.called?( :delete)
113
+ end
114
+ end
115
+
108
116
  end
109
117
  end
110
118
 
Binary file