infopark_component_cache 3.1.0 → 4.1.0
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 +5 -5
- data/.gitignore +1 -1
- data/.rubocop.yml +25 -0
- data/.rubocop_todo.yml +115 -0
- data/.ruby-version +1 -1
- data/.travis.yml +24 -0
- data/Gemfile +3 -1
- data/Gemfile.lock +214 -0
- data/Gemfile.rails50 +6 -0
- data/Gemfile.rails50.lock +206 -0
- data/Gemfile.rails51 +6 -0
- data/Gemfile.rails51.lock +206 -0
- data/README.md +1 -1
- data/Rakefile +7 -7
- data/app/helpers/infopark_component_cache_helper.rb +2 -2
- data/infopark_component_cache.gemspec +16 -13
- data/lib/engine.rb +6 -7
- data/lib/infopark_component_cache.rb +1 -2
- data/lib/infopark_component_cache/abstract_cache_storage.rb +4 -3
- data/lib/infopark_component_cache/cache_storage.rb +1 -0
- data/lib/infopark_component_cache/component.rb +9 -5
- data/lib/infopark_component_cache/component_cache.rb +31 -30
- data/lib/infopark_component_cache/consistency_guard.rb +1 -1
- data/lib/infopark_component_cache/delayed_guard.rb +7 -7
- data/lib/infopark_component_cache/guards/cms_state_guard.rb +6 -5
- data/lib/infopark_component_cache/guards/last_changed.rb +5 -2
- data/lib/infopark_component_cache/guards/obj_count.rb +3 -3
- data/lib/infopark_component_cache/guards/valid_from.rb +7 -10
- data/lib/infopark_component_cache/guards/valid_until.rb +7 -9
- data/lib/infopark_component_cache/key_generator.rb +3 -3
- data/lib/infopark_component_cache/version.rb +1 -1
- data/lib/infopark_component_cache/volatile_cache.rb +1 -1
- data/lib/infopark_component_cache/volatile_cache_storage.rb +1 -0
- data/spec/dummy/Rakefile +1 -1
- data/spec/dummy/config.ru +1 -1
- data/spec/dummy/config/application.rb +4 -2
- data/spec/dummy/config/boot.rb +5 -5
- data/spec/dummy/config/environment.rb +1 -1
- data/spec/dummy/config/environments/development.rb +1 -0
- data/spec/dummy/config/environments/test.rb +1 -0
- data/spec/dummy/config/initializers/secret_token.rb +1 -1
- data/spec/dummy/config/initializers/session_store.rb +1 -1
- data/spec/dummy/db/schema.rb +1 -2
- data/spec/lib/infopark_component_cache/component_cache_spec.rb +118 -0
- data/spec/lib/{delayed_guard_spec.rb → infopark_component_cache/delayed_guard_spec.rb} +3 -3
- data/spec/lib/{guards → infopark_component_cache/guards}/always_consistent_spec.rb +7 -6
- data/spec/lib/{guards → infopark_component_cache/guards}/last_changed_spec.rb +20 -12
- data/spec/lib/{guards → infopark_component_cache/guards}/never_consistent_spec.rb +7 -6
- data/spec/lib/{guards → infopark_component_cache/guards}/obj_count_spec.rb +20 -12
- data/spec/lib/{guards → infopark_component_cache/guards}/valid_from_spec.rb +20 -12
- data/spec/lib/{guards → infopark_component_cache/guards}/valid_until_spec.rb +23 -14
- data/spec/spec_helper.rb +8 -8
- data/spec/support/cache_switching_macros.rb +4 -4
- metadata +96 -40
- data/spec/lib/compontent_cache_spec.rb +0 -116
@@ -1,116 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe InfoparkComponentCache::ComponentCache do
|
4
|
-
let(:obj) { double(name: 'spec_obj', id: 2001) }
|
5
|
-
let(:name) { 'spec_cached_component' }
|
6
|
-
let(:params) { {some: 'additional', params: 'supplied'} }
|
7
|
-
let(:guard) { Class.new(Struct.new(:component)) }
|
8
|
-
|
9
|
-
subject { described_class.new(obj, name, params, [guard]) }
|
10
|
-
|
11
|
-
context 'with caching disabled' do
|
12
|
-
before { allow(Rails.application.config.action_controller).to receive(:perform_caching).and_return(false) }
|
13
|
-
|
14
|
-
describe '#fetch' do
|
15
|
-
let(:value) { 'very_hard_computation_required_for_this_string' }
|
16
|
-
let(:specific_guard) { subject.guards.first }
|
17
|
-
|
18
|
-
it 'returns the passed the block value' do
|
19
|
-
expect(subject.fetch { value }).to eq(value)
|
20
|
-
end
|
21
|
-
|
22
|
-
it 'never calls any methods on the guard' do
|
23
|
-
expect(specific_guard).not_to receive(:consistent?)
|
24
|
-
expect(specific_guard).not_to receive(:guard!)
|
25
|
-
|
26
|
-
subject.fetch { value }
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
context 'with caching enabled' do
|
32
|
-
before { allow(Rails.application.config.action_controller).to receive(:perform_caching).and_return(true) }
|
33
|
-
|
34
|
-
let(:guard) { Class.new(InfoparkComponentCache::ConsistencyGuard) {
|
35
|
-
def consistent?
|
36
|
-
cache.exist?(:guard_called)
|
37
|
-
end
|
38
|
-
|
39
|
-
def guard!
|
40
|
-
cache.write(:guard_called, 1)
|
41
|
-
end
|
42
|
-
} }
|
43
|
-
|
44
|
-
describe '#fetch' do
|
45
|
-
let(:value) { 'very_hard_computation_required_for_this_string' }
|
46
|
-
let(:specific_guard) { subject.guards.first }
|
47
|
-
let(:computer) { double }
|
48
|
-
|
49
|
-
it 'returns the passed the block value' do
|
50
|
-
expect(subject.fetch { value }).to eq(value)
|
51
|
-
end
|
52
|
-
|
53
|
-
it 'calls the required methods on the guard' do
|
54
|
-
expect(specific_guard).to receive(:consistent?).exactly(3).times
|
55
|
-
expect(specific_guard).to receive(:guard!).exactly(3).times
|
56
|
-
|
57
|
-
3.times { subject.fetch { value } }
|
58
|
-
end
|
59
|
-
|
60
|
-
it 'only evalues the block once' do
|
61
|
-
expect(computer).to receive(:compute).and_return(value).once
|
62
|
-
|
63
|
-
3.times { expect(subject.fetch { computer.compute }).to eq(value) }
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
describe '#compontent' do
|
69
|
-
subject { described_class.new(obj, name, params).component }
|
70
|
-
|
71
|
-
it 'stores the passed obj' do
|
72
|
-
expect(subject.obj).to eq(obj)
|
73
|
-
end
|
74
|
-
|
75
|
-
it 'stores the passed name' do
|
76
|
-
expect(subject.name).to eq(name)
|
77
|
-
end
|
78
|
-
|
79
|
-
it 'stores the passed params' do
|
80
|
-
expect(subject.params).to eq(params)
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
describe '#guards' do
|
85
|
-
let(:guard_class1) { Struct.new(:component) }
|
86
|
-
let(:guard_class2) { Struct.new(:compontent, :extra) }
|
87
|
-
let(:guard_params) { {guard: guard_class2, something: 'more'} }
|
88
|
-
|
89
|
-
subject { described_class.new(obj, name, params, [guard_class1, guard_params]).guards }
|
90
|
-
|
91
|
-
it 'contains an array of passed guards' do
|
92
|
-
expect(subject).to match_array([
|
93
|
-
an_instance_of(guard_class1),
|
94
|
-
an_instance_of(guard_class2)
|
95
|
-
])
|
96
|
-
end
|
97
|
-
|
98
|
-
it 'preserves the extra params' do
|
99
|
-
expect(subject.last.extra).to eq(guard_params)
|
100
|
-
end
|
101
|
-
|
102
|
-
context 'with no guards specified in the constructors' do
|
103
|
-
subject { described_class.new(obj, name, params).guards }
|
104
|
-
|
105
|
-
it 'contains standard guards' do
|
106
|
-
expect(subject).to match_array([
|
107
|
-
an_instance_of(InfoparkComponentCache::Guards::ValuePresent),
|
108
|
-
an_instance_of(InfoparkComponentCache::Guards::LastChanged),
|
109
|
-
an_instance_of(InfoparkComponentCache::Guards::ObjCount),
|
110
|
-
an_instance_of(InfoparkComponentCache::Guards::ValidFrom),
|
111
|
-
an_instance_of(InfoparkComponentCache::Guards::ValidUntil)
|
112
|
-
])
|
113
|
-
end
|
114
|
-
end
|
115
|
-
end
|
116
|
-
end
|