Commit 79393a35 authored by Bob Van Landuyt's avatar Bob Van Landuyt

Rebuild the dynamic path before validating it

Otherwise we won't validate updates to the path. Allowing users to
change the path to something that's not allowed.
parent cf3cdd48
...@@ -107,6 +107,14 @@ module Routable ...@@ -107,6 +107,14 @@ module Routable
RequestStore[key] ||= uncached_full_path RequestStore[key] ||= uncached_full_path
end end
def build_full_path
if parent && path
parent.full_path + '/' + path
else
path
end
end
private private
def uncached_full_path def uncached_full_path
...@@ -135,14 +143,6 @@ module Routable ...@@ -135,14 +143,6 @@ module Routable
end end
end end
def build_full_path
if parent && path
parent.full_path + '/' + path
else
path
end
end
def update_route def update_route
prepare_route prepare_route
route.save route.save
......
...@@ -26,7 +26,7 @@ class DynamicPathValidator < ActiveModel::EachValidator ...@@ -26,7 +26,7 @@ class DynamicPathValidator < ActiveModel::EachValidator
end end
def path_valid_for_record?(record, value) def path_valid_for_record?(record, value)
full_path = record.respond_to?(:full_path) ? record.full_path : value full_path = record.respond_to?(:build_full_path) ? record.build_full_path : value
return true unless full_path return true unless full_path
......
...@@ -84,5 +84,14 @@ describe DynamicPathValidator do ...@@ -84,5 +84,14 @@ describe DynamicPathValidator do
expect(group.errors[:path]).to include('users is a reserved name') expect(group.errors[:path]).to include('users is a reserved name')
end end
it 'updating to an invalid path is not allowed' do
project = create(:empty_project)
project.path = 'update'
validator.validate_each(project, :path, 'update')
expect(project.errors[:path]).to include('update is a reserved name')
end
end end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment