Add option to specify index_page

Fix redirect to index_page creation for subdirs

Redirect attempts to access directories to index_page

Add tests
This commit is contained in:
Arran Cudbard-Bell
2013-02-06 22:03:58 -05:00
parent 631a7cccd6
commit 2e2e6457c7
4 changed files with 42 additions and 8 deletions
+9 -7
View File
@@ -89,7 +89,7 @@ module Precious
get '/' do
page_dir = settings.wiki_options[:page_file_dir].to_s
redirect clean_url(::File.join(@base_url, page_dir, 'Home'))
redirect clean_url(::File.join(@base_url, page_dir, wiki_new.index_page))
end
# path is set to name if path is nil.
@@ -98,13 +98,13 @@ module Precious
# extract_path will trim path to 'a'
# name, path, version
def wiki_page(name, path = nil, version = nil, exact = true)
wiki = wiki_new
path = name if path.nil?
name = extract_name(name)
name = extract_name(name) || wiki.index_page
path = extract_path(path)
path = '/' if exact && path.nil?
wiki = wiki_new
OpenStruct.new(:wiki => wiki, :page => wiki.paged(name, path, exact, version),
:name => name, :path => path)
end
@@ -123,6 +123,7 @@ module Precious
wikip = wiki_page(params[:splat].first)
@name = wikip.name
@path = wikip.path
wiki = wikip.wiki
if page = wikip.page
if wiki.live_preview && page.format.to_s.include?('markdown') && supported_useragent?(request.user_agent)
@@ -379,9 +380,10 @@ module Precious
end
def show_page_or_file(fullpath)
name = extract_name(fullpath)
path = extract_path(fullpath) || '/'
wiki = wiki_new
wiki = wiki_new
name = extract_name(fullpath) || wiki.index_page
path = extract_path(fullpath) || '/'
if page = wiki.paged(name, path, exact = true)
@page = page
+6
View File
@@ -12,6 +12,12 @@ module Precious
# Extract the 'page' name from the file_path
def extract_name(file_path)
if file_path[-1, 1] == "/"
return nil
end
# File.basename is too eager to please and will return the last
# component of the path even if it ends with a directory separator.
::File.basename(file_path)
end
+9 -1
View File
@@ -144,6 +144,9 @@ module Gollum
# Sets page title to value of first h1
# Defaults to false
attr_reader :h1_title
# Gets the custom index page for / and subdirs (e.g. foo/)
attr_reader :index_page
# Public: Initialize a new Gollum Repo.
#
@@ -168,6 +171,11 @@ module Gollum
# :show_all - Show all files in file view, not just valid pages.
# Default: false
# :collapse_tree - Start with collapsed file view. Default: false
# :css - Include the custom.css file from the repo.
# :h1_title - Concatenate all h1's on a page to form the
# page title.
# :index_page - The default page to retrieve or create if the
# a directory is accessed.
#
# Returns a fresh Gollum::Repo.
def initialize(path, options = {})
@@ -203,7 +211,7 @@ module Gollum
@collapse_tree = options.fetch :collapse_tree, false
@css = options.fetch :css, false
@h1_title = options.fetch :h1_title, false
@index_page = options.fetch :index_page, 'Home'
@user_icons = ['gravatar', 'identicon'].include?( options[:user_icons] ) ?
options[:user_icons] : 'none'
end
+18
View File
@@ -252,6 +252,24 @@ context "Frontend" do
assert last_response.ok?
end
test "accessing non-existant directory redirects to create index page" do
get "/foo/"
follow_redirect!
assert_equal "/create/foo/Home", last_request.fullpath
assert last_response.ok?
end
test "accessing redirectory redirects to index page" do
post "/create", :content => 'abc', :page => 'Home', :path => '/foo/',
:format => 'markdown', :message => 'foo'
assert_equal "http://example.org/foo/home", last_response.headers['Location']
follow_redirect!
assert last_response.ok?
end
test "edit redirects to create on non-existant page" do
name = "E"
get "/edit/#{name}"