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.
This commit is contained in:
Bob Van Landuyt 2017-06-16 12:11:33 +02:00
parent cf3cdd48bb
commit 79393a351d
3 changed files with 18 additions and 9 deletions

View File

@ -107,6 +107,14 @@ module Routable
RequestStore[key] ||= uncached_full_path
end
def build_full_path
if parent && path
parent.full_path + '/' + path
else
path
end
end
private
def uncached_full_path
@ -135,14 +143,6 @@ module Routable
end
end
def build_full_path
if parent && path
parent.full_path + '/' + path
else
path
end
end
def update_route
prepare_route
route.save

View File

@ -26,7 +26,7 @@ class DynamicPathValidator < ActiveModel::EachValidator
end
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

View File

@ -84,5 +84,14 @@ describe DynamicPathValidator do
expect(group.errors[:path]).to include('users is a reserved name')
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