Commit cfb94bca authored by Igor's avatar Igor Committed by Douwe Maan

Fix grouping wiki pages by directory

If a page has the same name as a directory
the WikiPage#group_by_directory method can have
a wrong behaviour

This commit fixes it
parent 004e8627
...@@ -31,7 +31,9 @@ class WikiPage ...@@ -31,7 +31,9 @@ class WikiPage
pages.each_with_object([]) do |page, grouped_pages| pages.each_with_object([]) do |page, grouped_pages|
next grouped_pages << page unless page.directory.present? next grouped_pages << page unless page.directory.present?
directory = grouped_pages.find { |dir| dir.slug == page.directory } directory = grouped_pages.find do |obj|
obj.is_a?(WikiDirectory) && obj.slug == page.directory
end
next directory.pages << page if directory next directory.pages << page if directory
......
...@@ -22,6 +22,7 @@ describe WikiPage do ...@@ -22,6 +22,7 @@ describe WikiPage do
create_page('dir_1/dir_1_1/page_3', 'content') create_page('dir_1/dir_1_1/page_3', 'content')
create_page('page_1', 'content') create_page('page_1', 'content')
create_page('dir_1/page_2', 'content') create_page('dir_1/page_2', 'content')
create_page('dir_2', 'page with dir name')
create_page('dir_2/page_5', 'content') create_page('dir_2/page_5', 'content')
create_page('page_6', 'content') create_page('page_6', 'content')
create_page('dir_2/page_4', 'content') create_page('dir_2/page_4', 'content')
...@@ -29,6 +30,7 @@ describe WikiPage do ...@@ -29,6 +30,7 @@ describe WikiPage do
let(:page_1) { wiki.find_page('page_1') } let(:page_1) { wiki.find_page('page_1') }
let(:page_6) { wiki.find_page('page_6') } let(:page_6) { wiki.find_page('page_6') }
let(:page_dir_2) { wiki.find_page('dir_2') }
let(:dir_1) do let(:dir_1) do
WikiDirectory.new('dir_1', [wiki.find_page('dir_1/page_2')]) WikiDirectory.new('dir_1', [wiki.find_page('dir_1/page_2')])
...@@ -44,7 +46,7 @@ describe WikiPage do ...@@ -44,7 +46,7 @@ describe WikiPage do
context 'sort by title' do context 'sort by title' do
let(:grouped_entries) { described_class.group_by_directory(wiki.pages) } let(:grouped_entries) { described_class.group_by_directory(wiki.pages) }
let(:expected_grouped_entries) { [dir_1_1, dir_1, dir_2, page_1, page_6] } let(:expected_grouped_entries) { [dir_1_1, dir_1, page_dir_2, dir_2, page_1, page_6] }
it 'returns an array with pages and directories' do it 'returns an array with pages and directories' do
grouped_entries.each_with_index do |page_or_dir, i| grouped_entries.each_with_index do |page_or_dir, i|
...@@ -59,7 +61,7 @@ describe WikiPage do ...@@ -59,7 +61,7 @@ describe WikiPage do
context 'sort by created_at' do context 'sort by created_at' do
let(:grouped_entries) { described_class.group_by_directory(wiki.pages(sort: 'created_at')) } let(:grouped_entries) { described_class.group_by_directory(wiki.pages(sort: 'created_at')) }
let(:expected_grouped_entries) { [dir_1_1, page_1, dir_1, dir_2, page_6] } let(:expected_grouped_entries) { [dir_1_1, page_1, dir_1, page_dir_2, dir_2, page_6] }
it 'returns an array with pages and directories' do it 'returns an array with pages and directories' do
grouped_entries.each_with_index do |page_or_dir, i| grouped_entries.each_with_index do |page_or_dir, i|
...@@ -73,7 +75,7 @@ describe WikiPage do ...@@ -73,7 +75,7 @@ describe WikiPage do
end end
it 'returns an array with retained order with directories at the top' do it 'returns an array with retained order with directories at the top' do
expected_order = ['dir_1/dir_1_1/page_3', 'dir_1/page_2', 'dir_2/page_4', 'dir_2/page_5', 'page_1', 'page_6'] expected_order = ['dir_1/dir_1_1/page_3', 'dir_1/page_2', 'dir_2', 'dir_2/page_4', 'dir_2/page_5', 'page_1', 'page_6']
grouped_entries = described_class.group_by_directory(wiki.pages) grouped_entries = described_class.group_by_directory(wiki.pages)
......
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