start work on formatted_page

This commit is contained in:
Tom Preston-Werner
2010-04-08 16:20:05 -07:00
parent c8d9b351e2
commit 3ff115048d
7 changed files with 110 additions and 13 deletions
+3 -3
View File
@@ -225,10 +225,10 @@ Initialize the Gollum::Repo object:
# Require the Gollum library # Require the Gollum library
require 'gollum' require 'gollum'
# Create a new Gollum object by initializing it with the path to the # Create a new Gollum::Wiki object by initializing it with the path to the
# Git repository. # Git repository.
gollum = Gollum::Repo.new("my-gollum-repo.git") gollum = Gollum::Wiki.new("my-gollum-repo.git")
# => <Gollum::Repo> # => <Gollum::Wiki>
Get the latest HTML formatted version of the given canonical page name: Get the latest HTML formatted version of the given canonical page name:
+14 -1
View File
@@ -2,9 +2,22 @@
require 'grit' require 'grit'
# internal # internal
require 'gollum/repo' require 'gollum/wiki'
require 'gollum/page' require 'gollum/page'
module Gollum module Gollum
VERSION = '0.0.1' VERSION = '0.0.1'
# Convert a human page name into a canonical page name.
#
# name - The String human page name.
#
# Examples
# Gollum.canonical_name("Bilbo Baggins")
# # => 'Bilbo-Baggins'
#
# Returns the String canonical name.
def self.canonical_name(name)
name.gsub(/ /, '-').sub(/\.(.+?)$/, '')
end
end end
+74
View File
@@ -1,5 +1,79 @@
module Gollum module Gollum
class Page class Page
attr_accessor :wiki, :data
# Initialize a page.
#
# wiki - The Gollum::Wiki in question.
#
# Returns a newly initialized Gollum::Page.
def initialize(wiki)
self.wiki = wiki
end
# Populate this Page with information from the Blob.
#
# blob - The Grit::Blob that contains the info.
#
# Returns the populated Gollum::Page.
def populate(blob)
self.data = blob.data
self
end
# Find a page in the given Gollum repo.
#
# name - The human or canonical String page name to find.
#
# Returns a Gollum::Page or nil if the page could not be found.
def find(name)
commit = self.wiki.repo.commits.first
content = find_page_in_tree(commit.tree, name)
end
# private
# Find a page in a given commit.
#
# commit - The Grit::Commit in which to look.
# name - The human or canonical String page name.
#
# Returns a Gollum::Page or nil if the page could not be found.
def find_page_in_commit(commit, name)
end
# Find a page in a given tree.
#
# tree - The Grit::Tree in which to look.
# name - The canonical String page name.
#
# Returns a Gollum::Page or nil if the page could not be found.
def find_page_in_tree(tree, name)
trees = [tree]
while !trees.empty?
trees.shift.contents.each do |item|
case item
when Grit::Blob
return populate(item) if page_match(name, item.name)
when Grit::Tree
trees << item
end
end
end
return nil # nothing was found
end
# Compare the canonicalized versions of the two names.
#
# name1 - A human or canonical String page name.
# name2 - A human or canonical String page name.
#
# Returns a Boolean.
def page_match(name1, name2)
Gollum.canonical_name(name1) == Gollum.canonical_name(name2)
end
end end
end end
+3 -3
View File
@@ -1,5 +1,5 @@
module Gollum module Gollum
class Repo class Wiki
attr_accessor :path, :repo attr_accessor :path, :repo
# Initialize a new Gollum Repo. # Initialize a new Gollum Repo.
@@ -14,11 +14,11 @@ module Gollum
# Get the formatted page for a given page name. # Get the formatted page for a given page name.
# #
# name - The String name of the wiki page. # name - The human or canonical String page name of the wiki page.
# #
# Returns a Gollum::Page or nil if no matching page was found. # Returns a Gollum::Page or nil if no matching page was found.
def formatted_page(name) def formatted_page(name)
Page.new() Page.new(self).find(name)
end end
end end
end end
+5 -1
View File
@@ -11,7 +11,11 @@ require 'gollum'
# Make sure we're in the test dir, the tests expect that to be the current # Make sure we're in the test dir, the tests expect that to be the current
# directory. # directory.
Dir.chdir(File.join(File.dirname(__FILE__), *%w[.])) TEST_DIR = File.join(File.dirname(__FILE__), *%w[.])
def testpath(path)
File.join(TEST_DIR, path)
end
# test/spec/mini 3 # test/spec/mini 3
# http://gist.github.com/25455 # http://gist.github.com/25455
+8 -2
View File
@@ -2,10 +2,16 @@ require 'helper'
context "Page" do context "Page" do
setup do setup do
@repo = Gollum::Repo.new("examples/lotr.git") @wiki = Gollum::Wiki.new(testpath("examples/lotr.git"))
end end
test "formatted page" do test "formatted page" do
page = @repo.formatted_page('Bilbo-Baggins') page = @wiki.formatted_page('Bilbo Baggins')
assert_equal Gollum::Page, page.class
assert page.data =~ /^# Bilbo Baggins\n\nBilbo Baggins/
end
test "no page match" do
assert_nil @wiki.formatted_page('I do not exist')
end end
end end
+3 -3
View File
@@ -1,12 +1,12 @@
require 'helper' require 'helper'
context "Repo" do context "Wiki" do
setup do setup do
@repo = Gollum::Repo.new("examples/lotr.git") @repo = Gollum::Wiki.new(testpath("examples/lotr.git"))
end end
test "repo path" do test "repo path" do
assert_equal "examples/lotr.git", @repo.path assert_equal testpath("examples/lotr.git"), @repo.path
end end
test "git repo" do test "git repo" do