wonki 0.0.6 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/VERSION +1 -1
- data/lib/wonki/{page_builder.rb → storage.rb} +3 -5
- data/lib/wonki/wiki_page.rb +30 -6
- data/test/helper.rb +3 -0
- data/test/{page_builder_test.rb → storage_test.rb} +9 -19
- data/test/wiki_page_test.rb +44 -2
- data/wonki.gemspec +6 -6
- metadata +5 -5
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.7
|
@@ -1,9 +1,8 @@
|
|
1
1
|
require 'mime/types'
|
2
2
|
require 'grit'
|
3
|
-
require 'flannel'
|
4
3
|
|
5
4
|
module Wonki
|
6
|
-
class
|
5
|
+
class Storage
|
7
6
|
def initialize(repo_path)
|
8
7
|
@repo_path = repo_path
|
9
8
|
@repository = Grit::Repo.new(@repo_path)
|
@@ -13,8 +12,7 @@ module Wonki
|
|
13
12
|
route_name = route[1..-1] # strip leading slash
|
14
13
|
data = find(route_name)
|
15
14
|
mod_date = get_mod_date(route_name)
|
16
|
-
content
|
17
|
-
{:content => content, :last_modified => mod_date}
|
15
|
+
{:content => data, :last_modified => mod_date, :route_name => route_name}
|
18
16
|
end
|
19
17
|
|
20
18
|
def find(name)
|
@@ -24,7 +22,7 @@ module Wonki
|
|
24
22
|
end
|
25
23
|
|
26
24
|
def get_mod_date(name)
|
27
|
-
@repository.commits.first.committed_date
|
25
|
+
@repository.commits.first.committed_date # date of the last commit to the repo.
|
28
26
|
end
|
29
27
|
end
|
30
28
|
end
|
data/lib/wonki/wiki_page.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
-
require 'wonki/
|
1
|
+
require 'wonki/storage'
|
2
2
|
require 'wonki/page_not_found'
|
3
|
+
require 'flannel'
|
3
4
|
|
4
5
|
module Wonki
|
5
6
|
class WikiPage
|
6
|
-
def initialize(repo_path)
|
7
|
+
def initialize(repo_path, cache_control=nil)
|
8
|
+
@cache_control = cache_control
|
7
9
|
@repo_path = repo_path
|
8
10
|
end
|
9
11
|
|
@@ -14,16 +16,16 @@ module Wonki
|
|
14
16
|
|
15
17
|
def build_response(path)
|
16
18
|
path = "/home" if path == "/"
|
17
|
-
|
19
|
+
storage = Wonki::Storage.new(@repo_path)
|
18
20
|
|
19
21
|
headers = {"Content-Type" => "text/html", "Content-Language" => "en"}
|
20
22
|
|
21
23
|
begin
|
22
|
-
git_data =
|
23
|
-
response_body = git_data
|
24
|
+
git_data = storage.build(path)
|
25
|
+
response_body = format_data(git_data)
|
24
26
|
headers["Last-Modified"] = git_data[:last_modified].httpdate
|
25
27
|
headers["Etag"] = Digest::MD5.hexdigest(git_data[:content])
|
26
|
-
headers
|
28
|
+
headers = set_cache_control headers
|
27
29
|
status = 200
|
28
30
|
rescue Wonki::PageNotFound
|
29
31
|
response_body = "Page Not Found"
|
@@ -35,5 +37,27 @@ module Wonki
|
|
35
37
|
|
36
38
|
[status, headers, response_body]
|
37
39
|
end
|
40
|
+
|
41
|
+
def format_data data
|
42
|
+
%Q{<h2 id="location">#{data[:route_name]}</h2><div id="content">#{Flannel.quilt(data[:content])}</div>}
|
43
|
+
end
|
44
|
+
|
45
|
+
def set_cache_control headers
|
46
|
+
return headers unless @cache_control
|
47
|
+
|
48
|
+
if @cache_control[:max_age]
|
49
|
+
if @cache_control[:response_directive]
|
50
|
+
headers["Cache-Control"] = "max-age=#{@cache_control[:max_age]}, #{@cache_control[:response_directive]}"
|
51
|
+
else
|
52
|
+
headers["Cache-Control"] = "max-age=#{@cache_control[:max_age]}"
|
53
|
+
end
|
54
|
+
else
|
55
|
+
if @cache_control[:response_directive]
|
56
|
+
headers["Cache-Control"] = @cache_control[:response_directive]
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
headers
|
61
|
+
end
|
38
62
|
end
|
39
63
|
end
|
data/test/helper.rb
CHANGED
@@ -1,43 +1,33 @@
|
|
1
1
|
require 'helper'
|
2
|
-
require 'lib/wonki/
|
2
|
+
require 'lib/wonki/storage'
|
3
3
|
require 'lib/wonki/page_not_found'
|
4
4
|
|
5
|
-
class
|
5
|
+
class StorageTest < Test::Unit::TestCase
|
6
6
|
context "Building a Page" do
|
7
7
|
setup do
|
8
|
-
@
|
9
|
-
end
|
10
|
-
|
11
|
-
should "include the location" do
|
12
|
-
out = @builder.build("/cheese")
|
13
|
-
assert_match("cheese", out[:content])
|
8
|
+
@storage = Wonki::Storage.new("~/working/rubyyot-wiki-test")
|
14
9
|
end
|
15
10
|
|
16
11
|
should "include the content" do
|
17
|
-
out = @
|
12
|
+
out = @storage.build("/cheese")
|
18
13
|
assert_match("swiss", out[:content])
|
19
14
|
end
|
20
15
|
|
21
|
-
should "flannel content" do
|
22
|
-
out = @builder.build("/header")
|
23
|
-
assert_match("<h2>foo</h2>", out[:content])
|
24
|
-
end
|
25
|
-
|
26
16
|
context "finding blob data" do
|
27
17
|
should "find page contents in the git repo" do
|
28
|
-
blob_data = @
|
18
|
+
blob_data = @storage.find("foo")
|
29
19
|
assert_match("bar bar", blob_data)
|
30
20
|
end
|
31
21
|
end
|
32
22
|
|
33
23
|
context "last_modified date" do
|
34
24
|
should "not be nil" do
|
35
|
-
out = @
|
25
|
+
out = @storage.build("/foo")
|
36
26
|
assert_not_nil out[:last_modified]
|
37
27
|
end
|
38
|
-
|
28
|
+
|
39
29
|
should "return the commited date" do
|
40
|
-
out = @
|
30
|
+
out = @storage.build("/foo")
|
41
31
|
assert_equal Time, out[:last_modified].class
|
42
32
|
end
|
43
33
|
end
|
@@ -45,7 +35,7 @@ class PageBuilderTest < Test::Unit::TestCase
|
|
45
35
|
context "page doesn't exist" do
|
46
36
|
should "throw page doesn't exist" do
|
47
37
|
begin
|
48
|
-
@
|
38
|
+
@storage.find("walla-walla-bing-bang")
|
49
39
|
assert false, "Should have thrown a page not found exception"
|
50
40
|
rescue Wonki::PageNotFound
|
51
41
|
assert true
|
data/test/wiki_page_test.rb
CHANGED
@@ -28,9 +28,51 @@ class WikiPageTest < Test::Unit::TestCase
|
|
28
28
|
should "set etag" do
|
29
29
|
assert_not_nil @headers['Etag']
|
30
30
|
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context "caching" do
|
34
|
+
should "not set if no info passed" do
|
35
|
+
page = Wonki::WikiPage.new("~/working/rubyyot-wiki-test")
|
36
|
+
status, headers, body = page.build_response("/foo")
|
37
|
+
|
38
|
+
assert_false(headers.has_key?("Cache-Control"))
|
39
|
+
end
|
40
|
+
|
41
|
+
should "set max age" do
|
42
|
+
page = Wonki::WikiPage.new("~/working/rubyyot-wiki-test", :max_age => 300)
|
43
|
+
status, headers, body = page.build_response("/foo")
|
44
|
+
|
45
|
+
assert_equal("max-age=300", headers["Cache-Control"])
|
46
|
+
end
|
47
|
+
|
48
|
+
should "set response directive" do
|
49
|
+
page = Wonki::WikiPage.new("~/working/rubyyot-wiki-test", :response_directive => 'public')
|
50
|
+
status, headers, body = page.build_response("/foo")
|
51
|
+
|
52
|
+
assert_equal("public", headers["Cache-Control"])
|
53
|
+
end
|
54
|
+
|
55
|
+
should "set both response directive and max_age when passed" do
|
56
|
+
page = Wonki::WikiPage.new("~/working/rubyyot-wiki-test", :response_directive => 'public', :max_age => 20)
|
57
|
+
status, headers, body = page.build_response("/foo")
|
58
|
+
|
59
|
+
assert_equal("max-age=20, public", headers["Cache-Control"])
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
context "Formatting" do
|
64
|
+
setup do
|
65
|
+
@page = Wonki::WikiPage.new("~/working/rubyyot-wiki-test")
|
66
|
+
end
|
67
|
+
|
68
|
+
should "include the location" do
|
69
|
+
out = @page.format_data :route_name => 'wonki', :content => 'this is cool'
|
70
|
+
assert_match("wonki", out)
|
71
|
+
end
|
31
72
|
|
32
|
-
should "
|
33
|
-
|
73
|
+
should "flannel content" do
|
74
|
+
out = @page.format_data :route_name => 'test', :content => '==foo'
|
75
|
+
assert_match("<h2>foo</h2>", out)
|
34
76
|
end
|
35
77
|
end
|
36
78
|
|
data/wonki.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{wonki}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.7"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["rubyyot"]
|
12
|
-
s.date = %q{2010-01-
|
12
|
+
s.date = %q{2010-01-13}
|
13
13
|
s.description = %q{a Rack and Git based wiki like thing}
|
14
14
|
s.email = %q{jamal.hansen@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -24,11 +24,11 @@ Gem::Specification.new do |s|
|
|
24
24
|
"Rakefile",
|
25
25
|
"VERSION",
|
26
26
|
"lib/wonki.rb",
|
27
|
-
"lib/wonki/page_builder.rb",
|
28
27
|
"lib/wonki/page_not_found.rb",
|
28
|
+
"lib/wonki/storage.rb",
|
29
29
|
"lib/wonki/wiki_page.rb",
|
30
30
|
"test/helper.rb",
|
31
|
-
"test/
|
31
|
+
"test/storage_test.rb",
|
32
32
|
"test/wiki_page_test.rb",
|
33
33
|
"wonki.gemspec"
|
34
34
|
]
|
@@ -39,8 +39,8 @@ Gem::Specification.new do |s|
|
|
39
39
|
s.summary = %q{a simple Rack and Git based wiki like thing}
|
40
40
|
s.test_files = [
|
41
41
|
"test/wiki_page_test.rb",
|
42
|
-
"test/
|
43
|
-
"test/
|
42
|
+
"test/storage_test.rb",
|
43
|
+
"test/helper.rb"
|
44
44
|
]
|
45
45
|
|
46
46
|
if s.respond_to? :specification_version then
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wonki
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- rubyyot
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-01-
|
12
|
+
date: 2010-01-13 00:00:00 -06:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -59,11 +59,11 @@ files:
|
|
59
59
|
- Rakefile
|
60
60
|
- VERSION
|
61
61
|
- lib/wonki.rb
|
62
|
-
- lib/wonki/page_builder.rb
|
63
62
|
- lib/wonki/page_not_found.rb
|
63
|
+
- lib/wonki/storage.rb
|
64
64
|
- lib/wonki/wiki_page.rb
|
65
65
|
- test/helper.rb
|
66
|
-
- test/
|
66
|
+
- test/storage_test.rb
|
67
67
|
- test/wiki_page_test.rb
|
68
68
|
- wonki.gemspec
|
69
69
|
has_rdoc: true
|
@@ -96,5 +96,5 @@ specification_version: 3
|
|
96
96
|
summary: a simple Rack and Git based wiki like thing
|
97
97
|
test_files:
|
98
98
|
- test/wiki_page_test.rb
|
99
|
+
- test/storage_test.rb
|
99
100
|
- test/helper.rb
|
100
|
-
- test/page_builder_test.rb
|