using the cache directly in the filesystem adapter prevents weird issues in integration tests (and it makes more sense)

did committed Feb 23, 2015
commit 01d3d61baa85bd2763b8b1150a6fd3953f6fdc1e
Showing 10 changed files with 57 additions and 67 deletions
locomotive/steam/adapters/filesystem.rb b/lib/locomotive/steam/adapters/filesystem.rb +7 -17
@@ @@ -20,18 +20,8 @@ module Locomotive::Steam
Locomotive::Steam::Adapters::Filesystem::SimpleCacheStore.new
end
- register :yaml_loaders do
- build_yaml_loaders(cache)
- end
-
- register :sanitizers do
- build_sanitizers
- end
-
- def initialize(site_path)
- super
- @datasets = {}
- end
+ register(:yaml_loaders) { build_yaml_loaders }
+ register(:sanitizers) { build_sanitizers }
def all(mapper, scope)
memoized_dataset(mapper, scope)
@@ @@ -56,13 +46,13 @@ module Locomotive::Steam
end
def memoized_dataset(mapper, scope)
- return @datasets[mapper.name] if @datasets[mapper.name]
- dataset(mapper, scope)
+ cache.fetch(mapper.name) do
+ dataset(mapper, scope)
+ end
end
def dataset(mapper, scope)
Locomotive::Steam::Adapters::Memory::Dataset.new(mapper.name).tap do |dataset|
- @datasets[mapper.name] = dataset
populate_dataset(dataset, mapper, scope)
end
end
@@ @@ -84,9 +74,9 @@ module Locomotive::Steam
yaml_loaders[mapper.name].load(scope)
end
- def build_yaml_loaders(cache)
+ def build_yaml_loaders
%i(sites pages).inject({}) do |memo, name|
- memo[name] = build_klass('YAMLLoaders', name).new(site_path, cache)
+ memo[name] = build_klass('YAMLLoaders', name).new(site_path)
memo
end
end
locomotive/steam/adapters/filesystem/yaml_loader.rb b/lib/locomotive/steam/adapters/filesystem/yaml_loader.rb +3 -7
@@ @@ -4,10 +4,10 @@ module Locomotive::Steam
module YAMLLoader
- attr_reader :site_path, :cache
+ attr_reader :site_path
- def initialize(site_path, cache)
- @site_path, @cache = site_path, cache
+ def initialize(site_path)
+ @site_path = site_path
end
def load(scope = nil)
@@ @@ -18,10 +18,6 @@ module Locomotive::Steam
@scope.locale
end
- def fetch(key, &block)
- cache.nil? ? yield : cache.fetch(key, &block)
- end
-
def _load(path, frontmatter = false, &block)
if File.exists?(path)
yaml = File.open(path).read.force_encoding('utf-8')
locomotive/steam/adapters/filesystem/yaml_loaders/page.rb b/lib/locomotive/steam/adapters/filesystem/yaml_loaders/page.rb +1 -1
@@ @@ -10,7 +10,7 @@ module Locomotive
def load(scope)
super
- fetch('app/views/pages') { load_tree }
+ load_tree
end
private
locomotive/steam/adapters/filesystem/yaml_loaders/site.rb b/lib/locomotive/steam/adapters/filesystem/yaml_loaders/site.rb +1 -3
@@ @@ -9,9 +9,7 @@ module Locomotive
include Adapters::Filesystem::YAMLLoader
def load(scope)
- fetch('config/site') do
- [_load(File.join(site_path, 'config', 'site.yml'))]
- end
+ [_load(File.join(site_path, 'config', 'site.yml'))]
end
end
spec/integration/repositories/page_repository_spec.rb +28 -22
@@ @@ -5,29 +5,11 @@ require_relative '../../../lib/locomotive/steam/adapters/mongodb.rb'
describe Locomotive::Steam::PageRepository do
- let(:site) { Locomotive::Steam::Site.new(_id: 1, locales: %w(en fr nb)) }
- let(:locale) { :en }
- let(:repository) { Locomotive::Steam::PageRepository.new(adapter, site, locale) }
+ shared_examples_for 'page repository' do
- # context 'MongoDB' do
-
- # let(:adapter) { Locomotive::Steam::MongoDBAdapter.new('steam_test', ['127.0.0.1:27017']) }
-
- # describe '#all' do
- # subject { repository.all }
- # it { expect(subject.size).to eq 1 }
- # end
-
- # describe '#query' do
- # subject { repository.query { where(handle: 'acme') }.first }
- # it { expect(subject.name).to eq 'My portfolio' }
- # end
-
- # end
-
- context 'Filesystem' do
-
- let(:adapter) { Locomotive::Steam::FilesystemAdapter.new(default_fixture_site_path) }
+ let(:site) { Locomotive::Steam::Site.new(_id: site_id, locales: %w(en fr nb)) }
+ let(:locale) { :en }
+ let(:repository) { Locomotive::Steam::PageRepository.new(adapter, site, locale) }
describe '#all' do
subject { repository.all }
@@ @@ -51,4 +33,28 @@ describe Locomotive::Steam::PageRepository do
end
+ context 'MongoDB' do
+
+ it_should_behave_like 'page repository' do
+
+ let(:site_id) { Moped::BSON::ObjectId.from_string('54eb49c12475804b2b000002') }
+ let(:adapter) { Locomotive::Steam::MongoDBAdapter.new('steam_test', ['127.0.0.1:27017']) }
+
+ end
+
+ end
+
+ context 'Filesystem' do
+
+ it_should_behave_like 'page repository' do
+
+ let(:site_id) { 1 }
+ let(:adapter) { Locomotive::Steam::FilesystemAdapter.new(default_fixture_site_path) }
+
+ after(:all) { Locomotive::Steam::Adapters::Filesystem::SimpleCacheStore.new.clear }
+
+ end
+
+ end
+
end
spec/integration/repositories/site_repository_spec.rb +10 -12
@@ @@ -7,9 +7,7 @@ describe Locomotive::Steam::SiteRepository do
let(:repository) { Locomotive::Steam::SiteRepository.new(adapter) }
- context 'MongoDB' do
-
- let(:adapter) { Locomotive::Steam::MongoDBAdapter.new('steam_test', ['127.0.0.1:27017']) }
+ shared_examples_for 'site repository' do
describe '#all' do
subject { repository.all }
@@ @@ -23,19 +21,19 @@ describe Locomotive::Steam::SiteRepository do
end
+ context 'MongoDB' do
+
+ let(:adapter) { Locomotive::Steam::MongoDBAdapter.new('steam_test', ['127.0.0.1:27017']) }
+
+ it_behaves_like 'site repository'
+
+ end
+
context 'Filesystem' do
let(:adapter) { Locomotive::Steam::FilesystemAdapter.new(default_fixture_site_path) }
- describe '#all' do
- subject { repository.all }
- it { expect(subject.size).to eq 1 }
- end
-
- describe '#query' do
- subject { repository.query { where(subdomain: 'sample') }.first }
- it { expect(subject.name).to eq 'Sample website' }
- end
+ it_behaves_like 'site repository'
end
spec/unit/adapters/filesystem/yaml_loaders/page_spec.rb +1 -2
@@ @@ -6,8 +6,7 @@ require_relative '../../../../../lib/locomotive/steam/adapters/filesystem/yaml_l
describe Locomotive::Steam::Adapters::Filesystem::YAMLLoaders::Page do
let(:site_path) { default_fixture_site_path }
- let(:cache) { NoCacheStore.new }
- let(:loader) { Locomotive::Steam::Adapters::Filesystem::YAMLLoaders::Page.new(site_path, cache) }
+ let(:loader) { Locomotive::Steam::Adapters::Filesystem::YAMLLoaders::Page.new(site_path) }
describe '#load' do
spec/unit/adapters/filesystem/yaml_loaders/site_spec.rb +1 -2
@@ @@ -6,8 +6,7 @@ require_relative '../../../../../lib/locomotive/steam/adapters/filesystem/yaml_l
describe Locomotive::Steam::Adapters::Filesystem::YAMLLoaders::Site do
let(:site_path) { default_fixture_site_path }
- let(:cache) { NoCacheStore.new }
- let(:loader) { Locomotive::Steam::Adapters::Filesystem::YAMLLoaders::Site.new(site_path, cache) }
+ let(:loader) { Locomotive::Steam::Adapters::Filesystem::YAMLLoaders::Site.new(site_path) }
describe '#load' do
spec/unit/repositories/page_repository_spec.rb +1 -0
@@ @@ -13,6 +13,7 @@ describe Locomotive::Steam::PageRepository do
before do
allow(adapter).to receive(:collection).and_return(pages)
+ adapter.cache = NoCacheStore.new
end
describe '#all' do
spec/unit/repositories/site_repository_spec.rb +4 -1
@@ @@ -7,7 +7,10 @@ describe Locomotive::Steam::SiteRepository do
let(:adapter) { Locomotive::Steam::FilesystemAdapter.new(nil) }
let(:repository) { Locomotive::Steam::SiteRepository.new(adapter) }
- before { allow(adapter).to receive(:collection).and_return([{ name: 'Acme', handle: 'acme', domains: ['example.org'] }]) }
+ before do
+ allow(adapter).to receive(:collection).and_return([{ name: 'Acme', handle: 'acme', domains: ['example.org'] }])
+ adapter.cache = NoCacheStore.new
+ end
describe '#by_handle_or_domain' do