diff options
author | Alex Braha Stoll <alexbrahastoll@gmail.com> | 2016-12-16 02:12:21 -0200 |
---|---|---|
committer | Alex Braha Stoll <alexbrahastoll@gmail.com> | 2016-12-31 16:55:50 -0200 |
commit | 8bf52a4ae3aebc8c58f51cff696e99ecafe9c7c8 (patch) | |
tree | 498f99458cfdb5dc4ff83f2abec6eee5c4136e51 /app/models/wiki_page.rb | |
parent | 8dc2163ce580f1d71be1cf45e5dfcb2b4763d7bb (diff) | |
download | gitlab-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.rb | 25 |
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 |