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:
parent
cf3cdd48bb
commit
79393a351d
3 changed files with 18 additions and 9 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue