From 2e497bdd666859a8d6813f1258e3f410821920f8 Mon Sep 17 00:00:00 2001 From: Kulgar Date: Tue, 15 Oct 2019 14:46:47 +0200 Subject: [PATCH] Allow slugs to work with '/' or without. Handled locale in request.path, used path_parameters[:path] instead Updated rspecs --- app/controllers/spree/static_content_controller.rb | 2 +- app/models/spree/page.rb | 2 -- lib/spree_static_content.rb | 7 ++++--- spec/lib/spree_static_content_spec.rb | 6 +++--- spec/models/page_spec.rb | 5 ----- 5 files changed, 8 insertions(+), 14 deletions(-) diff --git a/app/controllers/spree/static_content_controller.rb b/app/controllers/spree/static_content_controller.rb index 7ef41b0e..5ffc8b2e 100644 --- a/app/controllers/spree/static_content_controller.rb +++ b/app/controllers/spree/static_content_controller.rb @@ -4,7 +4,7 @@ class StaticContentController < StoreController layout :determine_layout def show - @page = Spree::StaticPage.finder_scope.by_store(current_store).find_by!(slug: request.path) + @page = Spree::StaticPage.finder_scope.by_store(current_store).find_by!(slug: [params[:path], "/#{params[:path]}"]) end private diff --git a/app/models/spree/page.rb b/app/models/spree/page.rb index 976cf0c1..2ed6aa2d 100644 --- a/app/models/spree/page.rb +++ b/app/models/spree/page.rb @@ -38,8 +38,6 @@ def link private def update_positions_and_slug - # Ensure that all slugs start with a slash. - slug.prepend('/') if not_using_foreign_link? && !slug.start_with?('/') return if new_record? return unless (prev_position = Spree::Page.find(id).position) if prev_position > position diff --git a/lib/spree_static_content.rb b/lib/spree_static_content.rb index b8b28094..cac8ee69 100644 --- a/lib/spree_static_content.rb +++ b/lib/spree_static_content.rb @@ -17,12 +17,13 @@ def remove_spree_mount_point(path) module Spree class StaticPage def self.matches?(request) - return false if request.path =~ %r{\A\/+(admin|account|cart|checkout|content|login|pg\/|orders|products|s\/|session|signup|shipments|states|t\/|tax_categories|user)+} - !self.finder_scope.find_by(slug: request.path).nil? + path = request.path_parameters[:path] + return false if path =~ %r{\A+(admin|account|cart|checkout|content|login|pg\/|orders|products|s\/|session|signup|shipments|states|t\/|tax_categories|user)+} + !self.finder_scope.find_by(slug: [path, "/#{path}"]).nil? end protected - + def self.finder_scope scope = Spree::Page.visible scope = scope.joins(:translations) if defined?(SpreeGlobalize) diff --git a/spec/lib/spree_static_content_spec.rb b/spec/lib/spree_static_content_spec.rb index c4d85b3b..764cfe6f 100644 --- a/spec/lib/spree_static_content_spec.rb +++ b/spec/lib/spree_static_content_spec.rb @@ -11,19 +11,19 @@ context '.matches?' do it 'is true when valid page' do page = create(:page, slug: 'hello', visible: true) - request = double('request', path: page.slug) + request = double('request', path_parameters: {path: page.slug}) expect(described_class.matches?(request)).to be true end it 'is false when using reserved slug name' do page = create(:page, slug: 'login', visible: true) - request = double('request', path: page.slug) + request = double('request', path_parameters: {path: page.slug}) expect(described_class.matches?(request)).to be false end it 'is false when page is not accessible' do page = create(:page, slug: 'hello', visible: false) - request = double('request', path: page.slug) + request = double('request', path_parameters: {path: page.slug}) expect(described_class.matches?(request)).to be false end end diff --git a/spec/models/page_spec.rb b/spec/models/page_spec.rb index b5893a0c..5fa7417b 100644 --- a/spec/models/page_spec.rb +++ b/spec/models/page_spec.rb @@ -7,11 +7,6 @@ end end - it 'always add / prefix to slug' do - page = create(:page, slug: 'hello') - expect(page.slug).to eq '/hello' - end - context '.link' do it 'returns slug if foreign_link blank' do page = create(:page, slug: 'hello')