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
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
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