Compare commits
33 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c7729f81ad | |||
| 7e12de0087 | |||
| c9c7db5a53 | |||
| aadbdd8b76 | |||
| b2d372ab3c | |||
| c47a47bc30 | |||
| ad5ec77f41 | |||
| c0bf387cb4 | |||
| 267323c7c3 | |||
| d9b1ea3d51 | |||
| 70bf86f561 | |||
| e1eebb2f75 | |||
| aa258dbe6b | |||
| 5a7659e1c3 | |||
| d51a829038 | |||
| b7ffc4051c | |||
| bb06b566cd | |||
| fc6149a171 | |||
| 4abc32f1ec | |||
| efd734d962 | |||
| 8158610587 | |||
| 2bb62309be | |||
| 401e41b699 | |||
| 3015831d66 | |||
| c2919897e2 | |||
| 83d6cae53f | |||
| 7ad54e3c94 | |||
| c1fc3a92c0 | |||
| 23508d3867 | |||
| b5cb2e6dd6 | |||
| 1ff486e16c | |||
| c22050fca8 | |||
| e910dd0ccf |
@@ -0,0 +1,6 @@
|
||||
rvm:
|
||||
- 1.8.7
|
||||
- 1.9.2
|
||||
- rbx-2.0
|
||||
notifications:
|
||||
disabled: true
|
||||
+13
@@ -1,3 +1,16 @@
|
||||
# 1.3.1 / 2011-07-21
|
||||
|
||||
* Major Enhancements
|
||||
* Allow prefixed ID attributes in headers to support internal linking
|
||||
(#146).
|
||||
* Markdown pages are rendered through Redcarpet by default (#176).
|
||||
* Minor Enhancements
|
||||
* Remove Edit button on Preview pages (#164).
|
||||
* Simplify Wiki#inspect and Page#inspect.
|
||||
* Bug Fixes
|
||||
* Fixed broken preview functionality (#157).
|
||||
* Fixed sidebar/footer rendering problems related to whitespace (#145).
|
||||
|
||||
# 1.3.0 / 2011-04-25
|
||||
|
||||
* Major Enhancements
|
||||
|
||||
@@ -318,7 +318,7 @@ and `\]`. For example:
|
||||
Inline equations are delimited by `\(` and `\)`. These equations will appear
|
||||
inline with regular text. For example:
|
||||
|
||||
The Pythagorean theorum is \( a^2 + b^2 = c^2 \).
|
||||
The Pythagorean theorem is \( a^2 + b^2 = c^2 \).
|
||||
|
||||
Gollum uses [MathJax](http://www.mathjax.org/) to convert the TeX syntax into
|
||||
output suitable for display in web browsers.
|
||||
|
||||
+4
-3
@@ -4,8 +4,8 @@ Gem::Specification.new do |s|
|
||||
s.rubygems_version = '1.3.5'
|
||||
|
||||
s.name = 'gollum'
|
||||
s.version = '1.3.0'
|
||||
s.date = '2011-04-25'
|
||||
s.version = '1.3.1'
|
||||
s.date = '2011-07-21'
|
||||
s.rubyforge_project = 'gollum'
|
||||
|
||||
s.summary = "A simple, Git-powered wiki."
|
||||
@@ -18,7 +18,6 @@ Gem::Specification.new do |s|
|
||||
s.require_paths = %w[lib]
|
||||
|
||||
s.executables = ["gollum"]
|
||||
s.default_executable = 'gollum'
|
||||
|
||||
s.rdoc_options = ["--charset=UTF-8"]
|
||||
s.extra_rdoc_files = %w[README.md LICENSE]
|
||||
@@ -30,6 +29,7 @@ Gem::Specification.new do |s|
|
||||
s.add_dependency('mustache', [">= 0.11.2", "< 1.0.0"])
|
||||
s.add_dependency('sanitize', "~> 2.0.0")
|
||||
s.add_dependency('nokogiri', "~> 1.4")
|
||||
s.add_dependency('redcarpet')
|
||||
|
||||
s.add_development_dependency('RedCloth')
|
||||
s.add_development_dependency('mocha')
|
||||
@@ -38,6 +38,7 @@ Gem::Specification.new do |s|
|
||||
s.add_development_dependency('shoulda')
|
||||
s.add_development_dependency('rack-test')
|
||||
s.add_development_dependency('wikicloth')
|
||||
s.add_development_dependency('rake', '~> 0.9.2')
|
||||
|
||||
# = MANIFEST =
|
||||
s.files = %w[
|
||||
|
||||
+11
-11
@@ -8,19 +8,19 @@ require 'github/markup'
|
||||
require 'sanitize'
|
||||
|
||||
# internal
|
||||
require 'gollum/git_access'
|
||||
require 'gollum/committer'
|
||||
require 'gollum/pagination'
|
||||
require 'gollum/blob_entry'
|
||||
require 'gollum/wiki'
|
||||
require 'gollum/page'
|
||||
require 'gollum/file'
|
||||
require 'gollum/markup'
|
||||
require 'gollum/albino'
|
||||
require 'gollum/sanitization'
|
||||
require File.expand_path('../gollum/git_access', __FILE__)
|
||||
require File.expand_path('../gollum/committer', __FILE__)
|
||||
require File.expand_path('../gollum/pagination', __FILE__)
|
||||
require File.expand_path('../gollum/blob_entry', __FILE__)
|
||||
require File.expand_path('../gollum/wiki', __FILE__)
|
||||
require File.expand_path('../gollum/page', __FILE__)
|
||||
require File.expand_path('../gollum/file', __FILE__)
|
||||
require File.expand_path('../gollum/markup', __FILE__)
|
||||
require File.expand_path('../gollum/albino', __FILE__)
|
||||
require File.expand_path('../gollum/sanitization', __FILE__)
|
||||
|
||||
module Gollum
|
||||
VERSION = '1.3.0'
|
||||
VERSION = '1.3.1'
|
||||
|
||||
class Error < StandardError; end
|
||||
|
||||
|
||||
@@ -118,7 +118,7 @@ module Gollum
|
||||
def update_working_dir(dir, name, format)
|
||||
unless @wiki.repo.bare
|
||||
if @wiki.page_file_dir
|
||||
dir = dir.size.zero? ? @wiki.page_file_dir : File.join(dir, @wiki.page_file_dir)
|
||||
dir = dir.size.zero? ? @wiki.page_file_dir : ::File.join(dir, @wiki.page_file_dir)
|
||||
end
|
||||
|
||||
path =
|
||||
|
||||
@@ -106,10 +106,11 @@ module Precious
|
||||
end
|
||||
|
||||
post '/preview' do
|
||||
wiki = Gollum::Wiki.new(settings.gollum_path, settings.wiki_options)
|
||||
@name = "Preview"
|
||||
@page = wiki.preview_page(@name, params[:content], params[:format])
|
||||
@content = @page.formatted_data
|
||||
wiki = Gollum::Wiki.new(settings.gollum_path, settings.wiki_options)
|
||||
@name = "Preview"
|
||||
@page = wiki.preview_page(@name, params[:content], params[:format])
|
||||
@content = @page.formatted_data
|
||||
@editable = false
|
||||
mustache :page
|
||||
end
|
||||
|
||||
@@ -155,6 +156,7 @@ module Precious
|
||||
@page = page
|
||||
@name = name
|
||||
@content = page.formatted_data
|
||||
@editable = true
|
||||
mustache :page
|
||||
else
|
||||
halt 404
|
||||
@@ -186,6 +188,7 @@ module Precious
|
||||
@page = page
|
||||
@name = name
|
||||
@content = page.formatted_data
|
||||
@editable = true
|
||||
mustache :page
|
||||
elsif file = wiki.file(name)
|
||||
content_type file.mime_type
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
// get form fields
|
||||
var oldAction = $('#gollum-editor form').attr('action');
|
||||
var $form = $($('#gollum-editor form').get(0));
|
||||
$form.attr('action', this.href);
|
||||
$form.attr('action', '/preview');
|
||||
$form.attr('target', '_blank');
|
||||
$form.submit();
|
||||
|
||||
|
||||
@@ -6,15 +6,17 @@
|
||||
class="action-all-pages">All Pages</a></li>
|
||||
<li class="minibutton" class="jaws">
|
||||
<a href="#" id="minibutton-new-page">New Page</a></li>
|
||||
{{#editable}}
|
||||
<li class="minibutton"><a href="/edit/{{escaped_name}}"
|
||||
class="action-edit-page">Edit Page</a></li>
|
||||
{{/editable}}
|
||||
<li class="minibutton"><a href="/history/{{escaped_name}}"
|
||||
class="action-page-history">Page History</a></li>
|
||||
</ul>
|
||||
{{>searchbar}}
|
||||
</div>
|
||||
<div id="wiki-content">
|
||||
<div class="wrap{{#has_footer}} has-footer{{/has_footer}}{{#has_sidebar}} has-rightbar{{/has_sidebar}}">
|
||||
<div class="wrap {{#has_footer}} has-footer {{/has_footer}} {{#has_sidebar}} has-rightbar{{/has_sidebar}}">
|
||||
<div id="wiki-body" class="gollum-{{format}}-content">
|
||||
<div id="template">
|
||||
{{{content}}}
|
||||
|
||||
@@ -18,6 +18,10 @@ module Precious
|
||||
def date
|
||||
@page.version.authored_date.strftime("%Y-%m-%d %H:%M:%S")
|
||||
end
|
||||
|
||||
def editable
|
||||
@editable
|
||||
end
|
||||
|
||||
def has_footer
|
||||
@footer = (@page.footer || false) if @footer.nil?
|
||||
|
||||
@@ -28,13 +28,17 @@ module Gollum
|
||||
#
|
||||
# ref - a String Git reference (ex: "master")
|
||||
#
|
||||
# Returns a String.
|
||||
# Returns a String, or nil if the ref isn't found.
|
||||
def ref_to_sha(ref)
|
||||
if sha?(ref)
|
||||
ref
|
||||
else
|
||||
get_cache(:ref, ref) { ref_to_sha!(ref) }
|
||||
end
|
||||
ref = ref.to_s
|
||||
return if ref.empty?
|
||||
sha =
|
||||
if sha?(ref)
|
||||
ref
|
||||
else
|
||||
get_cache(:ref, ref) { ref_to_sha!(ref) }
|
||||
end.to_s
|
||||
sha.empty? ? nil : sha
|
||||
end
|
||||
|
||||
# Public: Gets a recursive list of Git blobs for the whole tree at the
|
||||
@@ -238,4 +242,4 @@ module Gollum
|
||||
path
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -2,6 +2,7 @@ require 'digest/sha1'
|
||||
require 'cgi'
|
||||
|
||||
module Gollum
|
||||
|
||||
class Markup
|
||||
# Initialize a new Markup object.
|
||||
#
|
||||
@@ -437,4 +438,49 @@ module Gollum
|
||||
def update_cache(type, id, data)
|
||||
end
|
||||
end
|
||||
|
||||
begin
|
||||
require 'redcarpet'
|
||||
|
||||
class MarkupGFM < Markup
|
||||
def render(no_follow = false)
|
||||
sanitize = no_follow ?
|
||||
@wiki.history_sanitizer :
|
||||
@wiki.sanitizer
|
||||
|
||||
data = extract_tex(@data.dup)
|
||||
data = extract_tags(data)
|
||||
|
||||
flags = [
|
||||
:autolink,
|
||||
:fenced_code,
|
||||
:tables,
|
||||
:strikethrough,
|
||||
:lax_htmlblock,
|
||||
:gh_blockcode,
|
||||
:no_intraemphasis
|
||||
]
|
||||
data = Redcarpet.new(data, *flags).to_html
|
||||
data = process_tags(data)
|
||||
|
||||
doc = Nokogiri::HTML::DocumentFragment.parse(data)
|
||||
|
||||
doc.search('pre').each do |node|
|
||||
next unless lang = node['lang']
|
||||
text = node.inner_text
|
||||
html = Gollum::Albino.colorize(text, lang)
|
||||
node.replace(html)
|
||||
end
|
||||
|
||||
doc = sanitize.clean_node!(doc) if sanitize
|
||||
yield doc if block_given?
|
||||
|
||||
data = doc_to_html(doc)
|
||||
data = process_tex(data)
|
||||
data
|
||||
end
|
||||
end
|
||||
rescue LoadError
|
||||
MarkupGFM = Markup
|
||||
end
|
||||
end
|
||||
|
||||
+5
-1
@@ -168,7 +168,7 @@ module Gollum
|
||||
#
|
||||
# Returns the String data.
|
||||
def formatted_data(&block)
|
||||
@blob && @wiki.markup_class.new(self).render(historical?, &block)
|
||||
@blob && @wiki.markup_classes[format].new(self).render(historical?, &block)
|
||||
end
|
||||
|
||||
# Public: The format of the page.
|
||||
@@ -390,5 +390,9 @@ module Gollum
|
||||
|
||||
find_page_in_tree(map, name, '')
|
||||
end
|
||||
|
||||
def inspect
|
||||
%(#<#{self.class.name}:#{object_id} #{name} (#{format}) @wiki=#{@wiki.repo.path.inspect}>)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -47,6 +47,27 @@ module Gollum
|
||||
'img' => {'src' => ['http', 'https', :relative]}
|
||||
}.freeze
|
||||
|
||||
# Default transformers to force @id attributes with 'wiki-' prefix
|
||||
|
||||
TRANSFORMERS = [
|
||||
lambda do |env|
|
||||
node = env[:node]
|
||||
return if env[:is_whitelisted] || !node.element? || !node['id']
|
||||
prefix = env[:config][:id_prefix]
|
||||
node['id'] = node['id'].gsub(/\A(#{prefix})?/, prefix)
|
||||
|
||||
{:node_whitelist => [node]}
|
||||
end,
|
||||
lambda do |env|
|
||||
node = env[:node]
|
||||
return unless node['href']
|
||||
prefix = env[:config][:id_prefix]
|
||||
node['href'] = node['href'].gsub(/\A\#(#{prefix})?/, '#'+prefix)
|
||||
|
||||
{:node_whitelist => [node]}
|
||||
end
|
||||
].freeze
|
||||
|
||||
# Gets an Array of whitelisted HTML elements. Default: ELEMENTS.
|
||||
attr_reader :elements
|
||||
|
||||
@@ -58,6 +79,13 @@ module Gollum
|
||||
# attributes. Default: PROTOCOLS
|
||||
attr_reader :protocols
|
||||
|
||||
# Gets a Hash describing which URI protocols are allowed in HTML
|
||||
# attributes. Default: TRANSFORMERS
|
||||
attr_reader :transformers
|
||||
|
||||
# Gets a String prefix which is added to ID attributes. Default: 'wiki-'
|
||||
attr_reader :id_prefix
|
||||
|
||||
# Gets a Hash describing HTML attributes that Sanitize should add.
|
||||
# Default: {}
|
||||
attr_reader :add_attributes
|
||||
@@ -70,8 +98,10 @@ module Gollum
|
||||
@elements = ELEMENTS
|
||||
@attributes = ATTRIBUTES
|
||||
@protocols = PROTOCOLS
|
||||
@transformers = TRANSFORMERS
|
||||
@add_attributes = {}
|
||||
@allow_comments = false
|
||||
@id_prefix = 'wiki-'
|
||||
yield self if block_given?
|
||||
end
|
||||
|
||||
@@ -100,7 +130,9 @@ module Gollum
|
||||
:attributes => attributes,
|
||||
:protocols => protocols,
|
||||
:add_attributes => add_attributes,
|
||||
:allow_comments => allow_comments?
|
||||
:allow_comments => allow_comments?,
|
||||
:transformers => transformers,
|
||||
:id_prefix => id_prefix
|
||||
}
|
||||
end
|
||||
|
||||
|
||||
+40
-14
@@ -10,7 +10,7 @@ module Gollum
|
||||
attr_writer :file_class
|
||||
|
||||
# Sets the markup class used by all instances of this Wiki.
|
||||
attr_writer :markup_class
|
||||
attr_writer :markup_classes
|
||||
|
||||
# Sets the default ref for the wiki.
|
||||
attr_accessor :default_ref
|
||||
@@ -53,15 +53,33 @@ module Gollum
|
||||
|
||||
# Gets the markup class used by all instances of this Wiki.
|
||||
# Default: Gollum::Markup
|
||||
def markup_class
|
||||
@markup_class ||
|
||||
if superclass.respond_to?(:markup_class)
|
||||
superclass.markup_class
|
||||
def markup_classes
|
||||
@markup_classes ||
|
||||
if superclass.respond_to?(:markup_classes)
|
||||
superclass.markup_classes
|
||||
else
|
||||
::Gollum::Markup
|
||||
classes = Hash.new(::Gollum::Markup)
|
||||
|
||||
# Add custom markup classes for different languages
|
||||
classes[:markdown] = ::Gollum::MarkupGFM
|
||||
classes
|
||||
end
|
||||
end
|
||||
|
||||
# Gets the default markup class used by all instances of this Wiki.
|
||||
# Kept for backwards compatibility until Gollum v2.x
|
||||
def markup_class
|
||||
markup_classes[:default]
|
||||
end
|
||||
|
||||
# Sets the default markup class used by all instances of this Wiki.
|
||||
# Kept for backwards compatibility until Gollum v2.x
|
||||
def markup_class=(default)
|
||||
new_classes = Hash.new default
|
||||
@markup_classes = Hash.new(default).update(markup_classes)
|
||||
default
|
||||
end
|
||||
|
||||
# Gets the default sanitization options for current pages used by
|
||||
# instances of this Wiki.
|
||||
def sanitization
|
||||
@@ -113,7 +131,8 @@ module Gollum
|
||||
# Default: "/"
|
||||
# :page_class - The page Class. Default: Gollum::Page
|
||||
# :file_class - The file Class. Default: Gollum::File
|
||||
# :markup_class - The markup Class. Default: Gollum::Markup
|
||||
# :markup_classes - A hash containing the markup Classes for each
|
||||
# document type. Default: { Gollum::Markup }
|
||||
# :sanitization - An instance of Sanitization.
|
||||
# :page_file_dir - String the directory in which all page files reside
|
||||
# :ref - String the repository ref to retrieve pages from
|
||||
@@ -130,7 +149,7 @@ module Gollum
|
||||
@base_path = options[:base_path] || "/"
|
||||
@page_class = options[:page_class] || self.class.page_class
|
||||
@file_class = options[:file_class] || self.class.file_class
|
||||
@markup_class = options[:markup_class] || self.class.markup_class
|
||||
@markup_classes = options[:markup_classes] || self.class.markup_classes
|
||||
@repo = @access.repo
|
||||
@ref = options[:ref] || self.class.default_ref
|
||||
@sanitization = options[:sanitization] || self.class.sanitization
|
||||
@@ -492,7 +511,7 @@ module Gollum
|
||||
attr_reader :file_class
|
||||
|
||||
# Gets the markup class used by all instances of this Wiki.
|
||||
attr_reader :markup_class
|
||||
attr_reader :markup_classes
|
||||
|
||||
# Normalize the data.
|
||||
#
|
||||
@@ -520,11 +539,14 @@ module Gollum
|
||||
#
|
||||
# Returns a flat Array of Gollum::Page instances.
|
||||
def tree_list(ref)
|
||||
sha = @access.ref_to_sha(ref)
|
||||
commit = @access.commit(sha)
|
||||
tree_map_for(sha).inject([]) do |list, entry|
|
||||
next list unless @page_class.valid_page_name?(entry.name)
|
||||
list << entry.page(self, commit)
|
||||
if sha = @access.ref_to_sha(ref)
|
||||
commit = @access.commit(sha)
|
||||
tree_map_for(sha).inject([]) do |list, entry|
|
||||
next list unless @page_class.valid_page_name?(entry.name)
|
||||
list << entry.page(self, commit)
|
||||
end
|
||||
else
|
||||
[]
|
||||
end
|
||||
end
|
||||
|
||||
@@ -593,5 +615,9 @@ module Gollum
|
||||
rescue Grit::GitRuby::Repository::NoSuchShaFound
|
||||
[]
|
||||
end
|
||||
|
||||
def inspect
|
||||
%(#<#{self.class.name}:#{object_id} #{@repo.path}>)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -38,6 +38,12 @@ def commit_details
|
||||
:email => "tom@github.com" }
|
||||
end
|
||||
|
||||
def normal(text)
|
||||
text.gsub!(' ', '')
|
||||
text.gsub!("\n", '')
|
||||
text
|
||||
end
|
||||
|
||||
# test/spec/mini 3
|
||||
# http://gist.github.com/25455
|
||||
# chris@ozmm.org
|
||||
|
||||
+17
-3
@@ -173,7 +173,7 @@ context "Markup" do
|
||||
@wiki.write_page("Potato", :mediawiki, "a [[Potato|Potato Heaad]] ", commit_details)
|
||||
page = @wiki.page("Potato")
|
||||
output = page.formatted_data
|
||||
assert_equal "<p>\na <a class=\"internal present\" href=\"/Potato\">Potato Heaad</a> </p>", output
|
||||
assert_equal normal("<p>\na <a class=\"internal present\" href=\"/Potato\">Potato Heaad</a> </p>"), normal(output)
|
||||
end
|
||||
|
||||
#########################################################################
|
||||
@@ -467,6 +467,20 @@ context "Markup" do
|
||||
compare(content, output, 'org')
|
||||
end
|
||||
|
||||
test "id with prefix ok" do
|
||||
content = "h2(example#wiki-foo). xxxx"
|
||||
output = %(<h2 class="example" id="wiki-foo">xxxx</h2>)
|
||||
compare(content, output, :textile)
|
||||
end
|
||||
|
||||
test "id prefix added" do
|
||||
content = "h2(#foo). xxxx[1]\n\nfn1.footnote"
|
||||
output = "<h2 id=\"wiki-foo\">xxxx" +
|
||||
"<sup class=\"footnote\" id=\"wiki-fnr1\"><a href=\"#wiki-fn1\">1</a></sup></h2>" +
|
||||
"\n<p class=\"footnote\" id=\"wiki-fn1\"><a href=\"#wiki-fnr1\"><sup>1</sup></a> footnote</p>"
|
||||
compare(content, output, :textile)
|
||||
end
|
||||
|
||||
#########################################################################
|
||||
#
|
||||
# TeX
|
||||
@@ -499,7 +513,7 @@ context "Markup" do
|
||||
page = @wiki.page("Bilbo Baggins")
|
||||
rendered = Gollum::Markup.new(page).render
|
||||
if regexes.empty?
|
||||
assert_equal output, rendered
|
||||
assert_equal normal(output), normal(rendered)
|
||||
else
|
||||
regexes.each { |r| assert_match r, output }
|
||||
end
|
||||
@@ -514,6 +528,6 @@ context "Markup" do
|
||||
@wiki.clear_cache
|
||||
page = @wiki.page("Bilbo Baggins")
|
||||
rendered = Gollum::Markup.new(page).render
|
||||
assert_equal output, rendered
|
||||
assert_equal normal(output), normal(rendered)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -4,6 +4,20 @@ require File.expand_path(File.join(File.dirname(__FILE__), "helper"))
|
||||
context "Wiki" do
|
||||
setup do
|
||||
@wiki = Gollum::Wiki.new(testpath("examples/lotr.git"))
|
||||
Gollum::Wiki.markup_classes = nil
|
||||
end
|
||||
|
||||
test "#markup_class gets default markup" do
|
||||
assert_equal Gollum::Markup, Gollum::Wiki.markup_class
|
||||
end
|
||||
|
||||
test "#markup_class= doesn't clobber alternate markups" do
|
||||
custom = Class.new(Gollum::Markup)
|
||||
Gollum::Wiki.markup_class = custom
|
||||
|
||||
assert_equal custom, Gollum::Wiki.markup_class
|
||||
assert_equal custom, Gollum::Wiki.markup_classes[:orgmode]
|
||||
assert_equal Gollum::MarkupGFM, Gollum::Wiki.markup_classes[:markdown]
|
||||
end
|
||||
|
||||
test "repo path" do
|
||||
@@ -282,6 +296,11 @@ context "page_file_dir option" do
|
||||
assert_equal "Hi", File.read(File.join(@path, @page_file_dir, "New-Page.md"))
|
||||
assert !File.exist?(File.join(@path, "New-Page.md"))
|
||||
end
|
||||
|
||||
test "edit a page in a sub directory" do
|
||||
page = @wiki.page('foo')
|
||||
@wiki.update_page(page, page.name, page.format, 'new contents', commit_details)
|
||||
end
|
||||
|
||||
test "a file in page file dir should be found" do
|
||||
assert @wiki.page("foo")
|
||||
|
||||
Reference in New Issue
Block a user