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
         
     |