From 279b028c5e14252d9279e4e3398ac3c05da9e7bf Mon Sep 17 00:00:00 2001 From: Nathan Lowe Date: Wed, 20 May 2015 10:16:19 -0400 Subject: [PATCH 1/2] Fix #1012: /Pages should render Folders First, then files, alphabetically --- lib/gollum/views/pages.rb | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/lib/gollum/views/pages.rb b/lib/gollum/views/pages.rb index bd020d2a..ff11fcf7 100644 --- a/lib/gollum/views/pages.rb +++ b/lib/gollum/views/pages.rb @@ -31,9 +31,11 @@ module Precious def files_folders if has_results - folder_links = [] + folders = {} + page_files = {} - @results.map { |page| + # 1012: Folders and Pages need to be separated + @results.each do |page| page_path = page.path.sub(/^#{@path}\//, '') if page_path.include?('/') @@ -41,19 +43,23 @@ module Precious folder_path = @path ? "#{@path}/#{folder}" : folder folder_link = %{
  • #{folder}
  • } - unless folder_links.include?(folder_link) - folder_links << folder_link - - folder_link - end + folders[folder] = folder_link unless folders.key?(folder) elsif page_path != ".gitkeep" if defined? page.format - %{
  • #{page.name}
  • } + page_link = %{
  • #{page.name}
  • } + page_files[page.name] = page_link else - %{
  • #{page.name}
  • } + page_link = %{
  • #{page.name}
  • } + page_files[page.name] = page_link end end - }.compact.join("\n") + end + + # 1012: All Pages should be rendered as Folders first, then Pages, each sorted alphabetically + result = Hash[folders.sort_by{| key, value | key.downcase} ].values.join("\n") + "\n" + result += Hash[page_files.sort_by{ | key, value | key.downcase } ].values.join("\n") + + result else "" end From 2db2cfb81c2e0b3a14bcc43bd1ec1d774b607e36 Mon Sep 17 00:00:00 2001 From: Nathan Lowe Date: Wed, 20 May 2015 11:14:43 -0400 Subject: [PATCH 2/2] Update test coverage to account for #1012 The existing 'files_folders' test only covered the /Mordor subdirectory, which does not include a diverse enough set of pages and folders to account for the new rendering logic. This test uses the results from the root of the lotr.git example repository as it exists at this point in time. The mock '@results' are not passed as a sorted array in order to test the sorting logic. The existing 'files_folders' test has been renamed to 'files_folders from subdir' because the 'files_folders' function should be tested in a situation when viewing /pages from a subdirectory to ensure proper functionality. --- test/test_pages_view.rb | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/test/test_pages_view.rb b/test/test_pages_view.rb index 868ccacd..9f279d0e 100644 --- a/test/test_pages_view.rb +++ b/test/test_pages_view.rb @@ -39,12 +39,19 @@ context "Precious::Views::Pages" do assert_equal 'Home', @page.breadcrumb end - test "files_folders" do + test "folders first" do + @page.instance_variable_set("@base_url", "") + results = [FakePageResult.new("Gondor/Bromir.md"), FakePageResult.new("Hobbit.md"), FakePageResult.new("Home.md"), FakePageResult.new("Mordor/Eye-Of-Sauron.md"), FakePageResult.new("Mordor/todo.md"), FakePageResult.new("Rivendell/Elrond.md"), FakePageResult.new("My-Precious.md"), FakePageResult.new("Zamin.md"), FakePageResult.new("Samwise-Gamgee.md"), FakePageResult.new("roast-mutton.md"), FakePageResult.new("Bilbo-Baggins.md")] + @page.instance_variable_set("@results", results) + assert_equal %{
  • Gondor
  • \n
  • Mordor
  • \n
  • Rivendell
  • \n
  • Bilbo Baggins
  • \n
  • Hobbit
  • \n
  • Home
  • \n
  • My Precious
  • \n
  • roast mutton
  • \n
  • Samwise Gamgee
  • \n
  • Zamin
  • }, @page.files_folders + end + + test "files_folders from subdir" do @page.instance_variable_set("@path", "Mordor") @page.instance_variable_set("@base_url", "") results = [FakePageResult.new("Mordor/Eye-Of-Sauron.md"), FakeFileResult.new("Mordor/Aragorn.pdf"), FakePageResult.new("Mordor/Orc/Saruman.md"), FakeFileResult.new("Mordor/.gitkeep")] @page.instance_variable_set("@results", results) - assert_equal %{
  • Eye Of Sauron
  • \n
  • Aragorn.pdf
  • \n
  • Orc
  • }, @page.files_folders + assert_equal %{
  • Orc
  • \n
  • Aragorn.pdf
  • \n
  • Eye Of Sauron
  • }, @page.files_folders end test "base url" do @@ -53,6 +60,6 @@ context "Precious::Views::Pages" do @page.instance_variable_set("@base_url", "/wiki") results = [FakePageResult.new("Mordor/Eye-Of-Sauron.md"), FakeFileResult.new("Mordor/Aragorn.pdf"), FakePageResult.new("Mordor/Orc/Saruman.md"), FakePageResult.new("Mordor/.gitkeep")] @page.instance_variable_set("@results", results) - assert_equal %{
  • Eye Of Sauron
  • \n
  • Aragorn.pdf
  • \n
  • Orc
  • }, @page.files_folders + assert_equal %{
  • Orc
  • \n
  • Aragorn.pdf
  • \n
  • Eye Of Sauron
  • }, @page.files_folders end end