first and successful attempt to render a site directly from a MongoDB database (still issues though)
did
committed Mar 15, 2015
commit e76aebe96cee7944ac3f64672ec7a4ea6008911a
Showing 11
changed files with
55 additions
and 28 deletions
locomotive/steam/decorators/template_decorator.rb b/lib/locomotive/steam/decorators/template_decorator.rb
+1
-1
| @@ | @@ -7,7 +7,7 @@ module Locomotive |
| class TemplateDecorator < I18nDecorator | |
| def liquid_source | |
| - | if respond_to?(:template_path) |
| + | if respond_to?(:template_path) && template_path |
| source_from_template_file | |
| else | |
| self.source | |
locomotive/steam/entities/editable_element.rb b/lib/locomotive/steam/entities/editable_element.rb
+6
-0
| @@ | @@ -6,6 +6,12 @@ module Locomotive::Steam |
| attr_accessor :page | |
| + | def initialize(attributes = {}) |
| + | super({ |
| + | source: nil |
| + | }.merge(attributes)) |
| + | end |
| + | |
| def default_content? | |
| !!self[:default_content] | |
| end | |
locomotive/steam/liquid/tags/editable/base.rb b/lib/locomotive/steam/liquid/tags/editable/base.rb
+4
-5
| @@ | @@ -30,15 +30,14 @@ module Locomotive |
| end | |
| def render(context) | |
| - | repository = context.registers[:services].repositories.page |
| - | page = context.registers[:page] |
| - | block = context['block'].try(:name) |
| + | service = context.registers[:services].editable_element |
| + | page = context.registers[:page] |
| + | block = context['block'].try(:name) |
| - | if element = repository.editable_element_for(page, block, @slug) |
| + | if element = service.find(page, block, @slug) |
| render_element(context, element) | |
| else | |
| # Locomotive::Common::Logger.error "[#{page.fullpath}] missing #{@tag_name} \"#{@slug}\" (#{context['block'].try(:name) || 'default'})" | |
| - | # render_default_content |
| super | |
| end | |
| end | |
locomotive/steam/liquid/tags/editable/file.rb b/lib/locomotive/steam/liquid/tags/editable/file.rb
+2
-2
| @@ | @@ -16,8 +16,8 @@ module Locomotive |
| def render_element(context, element) | |
| default_timestamp = context.registers[:page].updated_at.to_i | |
| - | url, timestamp = (if element.source? |
| - | [element.source.url, default_timestamp] |
| + | url, timestamp = (if element.source |
| + | [element.source, default_timestamp] |
| else | |
| if element.default_source_url.present? | |
| [element.default_source_url, default_timestamp] | |
locomotive/steam/server.rb b/lib/locomotive/steam/server.rb
+1
-1
| @@ | @@ -28,7 +28,7 @@ module Locomotive::Steam |
| if configuration.serve_assets | |
| use ::Rack::Static, { | |
| root: configuration.assets_path, | |
| - | urls: ['/images', '/fonts', '/samples', '/media'] |
| + | urls: ['/images', '/fonts', '/samples', '/media', '/sites'] |
| } | |
| use Middlewares::DynamicAssets, { | |
| root: configuration.assets_path, | |
locomotive/steam/services.rb b/lib/locomotive/steam/services.rb
+4
-0
| @@ | @@ -35,6 +35,10 @@ module Locomotive |
| Steam::ParentFinderService.new(repositories.page) | |
| end | |
| + | register :editable_element do |
| + | Steam::EditableElementService.new(repositories.page, locale) |
| + | end |
| + | |
| register :snippet_finder do | |
| Steam::SnippetFinderService.new(repositories.snippet) | |
| end | |
locomotive/steam/services/editable_element_service.rb b/lib/locomotive/steam/services/editable_element_service.rb
+17
-0
| @@ | @@ -0,0 +1,17 @@ |
| + | module Locomotive |
| + | module Steam |
| + | |
| + | class EditableElementService < Struct.new(:repository, :locale) |
| + | |
| + | include Locomotive::Steam::Services::Concerns::Decorator |
| + | |
| + | def find(page, block, slug) |
| + | decorate do |
| + | repository.editable_element_for(page, block, slug) |
| + | end |
| + | end |
| + | |
| + | end |
| + | |
| + | end |
| + | end |
spec/support/helpers.rb
+1
-0
| @@ | @@ -25,6 +25,7 @@ module Spec |
| Locomotive::Steam.configure do |config| | |
| config.mode = :test | |
| config.adapter = { name: :filesystem, path: default_fixture_site_path } | |
| + | # config.adapter = { name: :'mongoDB', database: 'steam_test', hosts: ['127.0.0.1'] } |
| config.assets_path = File.expand_path(File.join(default_fixture_site_path, 'public')) | |
| config.serve_assets = true | |
| config.minify_assets = true | |
spec/unit/liquid/tags/editable/control_spec.rb
+6
-6
| @@ | @@ -70,12 +70,12 @@ describe Locomotive::Steam::Liquid::Tags::Editable::Control do |
| let(:inline_editing) { false } | |
| - | let(:page) { instance_double('Page', fullpath: 'hello-world') } |
| - | let(:element) { instance_double('EditableControl', id: 42, content: false) } |
| - | let(:services) { Locomotive::Steam::Services.build_instance(nil) } |
| - | let(:context) { ::Liquid::Context.new({ 'inline_editing' => inline_editing }, {}, { page: page, services: services }) } |
| + | let(:page) { instance_double('Page', fullpath: 'hello-world') } |
| + | let(:element) { instance_double('EditableControl', id: 42, content: false) } |
| + | let(:services) { Locomotive::Steam::Services.build_instance(nil) } |
| + | let(:context) { ::Liquid::Context.new({ 'inline_editing' => inline_editing }, {}, { page: page, services: services }) } |
| - | before { allow(services.repositories.page).to receive(:editable_element_for).and_return(element) } |
| + | before { allow(services.editable_element).to receive(:find).and_return(element) } |
| subject { render_template(source, context, options) } | |
| @@ | @@ -99,7 +99,7 @@ describe Locomotive::Steam::Liquid::Tags::Editable::Control do |
| let(:source) { '{% block wrapper %}{% block sidebar %}{% editable_control menu %}true{% endeditable_control %}{% endblock %}{% endblock %}' } | |
| - | before { expect(services.repositories.page).to receive(:editable_element_for).with(page, 'wrapper/sidebar', 'menu').and_return(element) } |
| + | before { expect(services.editable_element).to receive(:find).with(page, 'wrapper/sidebar', 'menu').and_return(element) } |
| it { is_expected.to eq 'false' } | |
| end | |
spec/unit/liquid/tags/editable/file_spec.rb
+7
-7
| @@ | @@ -69,12 +69,12 @@ describe Locomotive::Steam::Liquid::Tags::Editable::File do |
| let(:inline_editing) { false } | |
| - | let(:page) { instance_double('Page', fullpath: 'hello-world', updated_at: DateTime.parse('2007-06-29 21:00:00')) } |
| - | let(:element) { instance_double('EditableFile', id: 42, default_source_url: nil, source?: false, source: nil) } |
| - | let(:services) { Locomotive::Steam::Services.build_instance(nil) } |
| - | let(:context) { ::Liquid::Context.new({}, {}, { page: page, services: services }) } |
| + | let(:page) { instance_double('Page', fullpath: 'hello-world', updated_at: DateTime.parse('2007-06-29 21:00:00')) } |
| + | let(:element) { instance_double('EditableFile', id: 42, default_source_url: nil, source?: false, source: nil) } |
| + | let(:services) { Locomotive::Steam::Services.build_instance(nil) } |
| + | let(:context) { ::Liquid::Context.new({}, {}, { page: page, services: services }) } |
| - | before { allow(services.repositories.page).to receive(:editable_element_for).and_return(element) } |
| + | before { allow(services.editable_element).to receive(:find).and_return(element) } |
| subject { render_template(source, context, options) } | |
| @@ | @@ -96,7 +96,7 @@ describe Locomotive::Steam::Liquid::Tags::Editable::File do |
| context 'modified value' do | |
| - | let(:file) { instance_double('Source', url: 'http://www.placehold.it/250x250') } |
| + | let(:file) { 'http://www.placehold.it/250x250' } |
| let(:element) { instance_double('EditableFile', source: file, source?: true, default_source_url: false) } | |
| it { is_expected.to eq 'http://www.placehold.it/250x250?1183150800' } | |
| @@ | @@ -106,7 +106,7 @@ describe Locomotive::Steam::Liquid::Tags::Editable::File do |
| let(:source) { '{% block wrapper %}{% block sidebar %}{% editable_file banner %}http://www.placehold.it/250x250{% endeditable_file %}{% endblock %}{% endblock %}' } | |
| - | before { expect(services.repositories.page).to receive(:editable_element_for).with(page, 'wrapper/sidebar', 'banner').and_return(element) } |
| + | before { expect(services.editable_element).to receive(:find).with(page, 'wrapper/sidebar', 'banner').and_return(element) } |
| it { is_expected.to eq 'http://www.placehold.it/250x250' } | |
| end | |
spec/unit/liquid/tags/editable/text_spec.rb
+6
-6
| @@ | @@ -72,12 +72,12 @@ describe Locomotive::Steam::Liquid::Tags::Editable::Text do |
| let(:inline_editing) { false } | |
| - | let(:page) { instance_double('Page', fullpath: 'hello-world') } |
| - | let(:element) { instance_double('EditableText', id: 42, default_content?: true, inline_editing?: true) } |
| - | let(:services) { Locomotive::Steam::Services.build_instance(nil) } |
| - | let(:context) { ::Liquid::Context.new({ 'inline_editing' => inline_editing }, {}, { page: page, services: services }) } |
| + | let(:page) { instance_double('Page', fullpath: 'hello-world') } |
| + | let(:element) { instance_double('EditableText', id: 42, default_content?: true, inline_editing?: true) } |
| + | let(:services) { Locomotive::Steam::Services.build_instance(nil) } |
| + | let(:context) { ::Liquid::Context.new({ 'inline_editing' => inline_editing }, {}, { page: page, services: services }) } |
| - | before { allow(services.repositories.page).to receive(:editable_element_for).and_return(element) } |
| + | before { allow(services.editable_element).to receive(:find).and_return(element) } |
| subject { render_template(source, context, options) } | |
| @@ | @@ -101,7 +101,7 @@ describe Locomotive::Steam::Liquid::Tags::Editable::Text do |
| let(:source) { '{% block wrapper %}{% block sidebar %}{% editable_text title %}Hello world{% endeditable_text %}{% endblock %}{% endblock %}' } | |
| - | before { expect(services.repositories.page).to receive(:editable_element_for).with(page, 'wrapper/sidebar', 'title').and_return(element) } |
| + | before { expect(services.editable_element).to receive(:find).with(page, 'wrapper/sidebar', 'title').and_return(element) } |
| it { is_expected.to eq 'Hello world' } | |
| end | |