prosto_cache 0.2.2 → 0.2.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.
@@ -137,10 +137,11 @@ module ProstoCache
137
137
 
138
138
  cache_values = model_class.all
139
139
  self.cache = build_cache(cache_values, accessor_keys)
140
- cache.values(sorted_cache_values(cache_values))
141
- cache.keys(sorted_keys(cache.values))
142
140
  self.validated_at = time
143
141
  self.signature = current_cache_signature
142
+
143
+ cache.values(sorted_cache_values(cache_values))
144
+ cache.keys(sorted_keys(cache.values))
144
145
  end
145
146
 
146
147
 
@@ -169,8 +170,9 @@ module ProstoCache
169
170
 
170
171
  def sorted_cache_values(cache_values)
171
172
  cache_values.sort_by { |o|
172
- sort_keys.inject('') { |memo, k|
173
- memo << o.public_send(k)
173
+ sort_keys.each_with_object('') { |k, memo|
174
+ sort_key = o.public_send(k)
175
+ memo << sort_key if sort_key
174
176
  }
175
177
  }
176
178
  end
@@ -178,7 +180,9 @@ module ProstoCache
178
180
  def sorted_keys(cache_values)
179
181
  cache_values.map { |o|
180
182
  accessor_keys.inject([]) { |memo, k|
181
- memo << o.public_send(k).to_sym
183
+ sort_key = o.public_send(k)
184
+ raise BadCacheValuesError, "Null key '#{k}' found in value #{o.inspect}" unless sort_key
185
+ memo << sort_key.to_sym
182
186
  }
183
187
  }.tap { |rtn|
184
188
  rtn.flatten! if accessor_keys.length == 1
@@ -45,6 +45,14 @@ describe ProstoCache::ProstoModelCache do
45
45
  it "should return all keys from the cache" do
46
46
  model_class.cache.keys.should == [:bar, :foo]
47
47
  end
48
+
49
+ context 'when key for one of the rows is nil' do
50
+ it "should raise meaningful error" do
51
+ model_class.should_receive(:all).once.and_return(['foo', nil].map { |n| model_class.new(n) })
52
+
53
+ expect { model_class.cache.keys }.to raise_error ProstoCache::BadCacheValuesError
54
+ end
55
+ end
48
56
  end
49
57
 
50
58
  describe "#values" do
@@ -61,6 +69,14 @@ describe ProstoCache::ProstoModelCache do
61
69
  values.map(&:name).should == %w(bar foo)
62
70
  end
63
71
 
72
+ context 'when key for one of the rows is nil' do
73
+ it "should raise meaningful error" do
74
+ model_class.should_receive(:all).once.and_return(['foo', nil].map { |n| model_class.new(n) })
75
+
76
+ expect { model_class.cache.values }.to raise_error ProstoCache::BadCacheValuesError
77
+ end
78
+ end
79
+
64
80
  context 'when sort_keys are provided' do
65
81
  let(:model_class) {
66
82
  Class.new {
@@ -98,6 +114,14 @@ describe ProstoCache::ProstoModelCache do
98
114
  model_class.cache[:foo]
99
115
  end
100
116
 
117
+ context 'when key for one of the rows is nil' do
118
+ it "should raise meaningful error when other key is accessed" do
119
+ model_class.should_receive(:all).once.and_return(['foo', nil].map { |n| model_class.new(n) })
120
+
121
+ expect { model_class.cache[:foo] }.to raise_error ProstoCache::BadCacheValuesError
122
+ end
123
+ end
124
+
101
125
  context 'when key is symbol' do
102
126
  it "should raise an error for key that was not found" do
103
127
  expect { model_class.cache[:nondef] }.to raise_error ProstoCache::BadCacheKeyError
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prosto_cache
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-10-31 00:00:00.000000000 Z
12
+ date: 2013-11-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec