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 | |