summaryrefslogtreecommitdiff
path: root/app/models/wiki_page.rb
diff options
context:
space:
mode:
authorAlex Braha Stoll <alexbrahastoll@gmail.com>2016-12-16 02:12:21 -0200
committerAlex Braha Stoll <alexbrahastoll@gmail.com>2016-12-31 16:55:50 -0200
commit8bf52a4ae3aebc8c58f51cff696e99ecafe9c7c8 (patch)
tree498f99458cfdb5dc4ff83f2abec6eee5c4136e51 /app/models/wiki_page.rb
parent8dc2163ce580f1d71be1cf45e5dfcb2b4763d7bb (diff)
downloadgitlab-ce-8bf52a4ae3aebc8c58f51cff696e99ecafe9c7c8.tar.gz
Show directory hierarchy when listing wiki pages
Diffstat (limited to 'app/models/wiki_page.rb')
-rw-r--r--app/models/wiki_page.rb25
1 files changed, 25 insertions, 0 deletions
diff --git a/app/models/wiki_page.rb b/app/models/wiki_page.rb
index c3de278f5b7..30db2b13dc0 100644
--- a/app/models/wiki_page.rb
+++ b/app/models/wiki_page.rb
@@ -12,6 +12,23 @@ class WikiPage
ActiveModel::Name.new(self, nil, 'wiki')
end
+ def self.group_by_directory(pages)
+ directories = {}
+
+ pages.each do |page|
+ if page.slug.include?('/')
+ # Directory hierarchy is given by matching from the beginning up to
+ # the last forward slash.
+ directory = page.slug.match(/\A(.+)\//)[1]
+ directories[directory] = add_to_directory(directories[directory], page)
+ else
+ directories['root'] = add_to_directory(directories['root'], page)
+ end
+ end
+
+ directories
+ end
+
def to_key
[:slug]
end
@@ -176,6 +193,14 @@ class WikiPage
private
+ def self.add_to_directory(directory, page)
+ if directory.present?
+ directory << page
+ else
+ [page]
+ end
+ end
+
def set_attributes
attributes[:slug] = @page.url_path
attributes[:title] = @page.title