domain_neutral 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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