nwiki 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.org +2 -0
- data/lib/nwiki/core/directory.rb +34 -0
- data/lib/nwiki/core/wiki.rb +15 -1
- data/lib/nwiki/core.rb +1 -0
- data/lib/nwiki/frontend/app.rb +1 -1
- data/lib/nwiki/version.rb +1 -1
- data/spec/nwiki/core/wiki_spec.rb +7 -0
- data/spec/requests/articles_spec.rb +7 -11
- metadata +9 -2
data/CHANGELOG.org
CHANGED
@@ -0,0 +1,34 @@
|
|
1
|
+
module Nwiki
|
2
|
+
module Core
|
3
|
+
class Directory
|
4
|
+
class << self
|
5
|
+
attr_accessor :encoding
|
6
|
+
end
|
7
|
+
|
8
|
+
attr_reader :list
|
9
|
+
|
10
|
+
def initialize path, list
|
11
|
+
@path = path
|
12
|
+
@list = list.
|
13
|
+
reject { |e| e =~ /^__nwiki/ }.
|
14
|
+
map { |e| e.sub(/\.org$/){ '' } }
|
15
|
+
end
|
16
|
+
|
17
|
+
def title
|
18
|
+
@path
|
19
|
+
end
|
20
|
+
|
21
|
+
def encoding
|
22
|
+
self.class.encoding
|
23
|
+
end
|
24
|
+
|
25
|
+
def to_html
|
26
|
+
'<ul>' + @list.map { |e|
|
27
|
+
root = './'
|
28
|
+
root << @path if @path != '/'
|
29
|
+
%Q!<li><a href="#{root}#{e}">#{e}</a></li>!
|
30
|
+
}.join + '</ul>'
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/nwiki/core/wiki.rb
CHANGED
@@ -22,9 +22,17 @@ module Nwiki
|
|
22
22
|
|
23
23
|
def find path
|
24
24
|
canonicalized_path = self.class.canonicalize_path path
|
25
|
+
if canonicalized_path == ''
|
26
|
+
find_directory(canonicalized_path)
|
27
|
+
else
|
28
|
+
find_page_or_file(canonicalized_path)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def find_page_or_file path
|
25
33
|
blob_entry = @access
|
26
34
|
.tree('master')
|
27
|
-
.find { |e|
|
35
|
+
.find { |e| path == e.path.sub(/\.org$/){ '' } }
|
28
36
|
return nil unless blob_entry
|
29
37
|
byte_string = blob_entry.blob(@access.repo).data
|
30
38
|
if blob_entry.name =~ /\.org$/
|
@@ -35,6 +43,12 @@ module Nwiki
|
|
35
43
|
end
|
36
44
|
end
|
37
45
|
|
46
|
+
def find_directory path
|
47
|
+
sha = @access.tree('master')
|
48
|
+
Directory.encoding = self.class.repo_filename_encoding
|
49
|
+
Directory.new(path, sha.map(&:path))
|
50
|
+
end
|
51
|
+
|
38
52
|
def name
|
39
53
|
blob_entry = @access
|
40
54
|
.tree('master')
|
data/lib/nwiki/core.rb
CHANGED
data/lib/nwiki/frontend/app.rb
CHANGED
@@ -12,7 +12,7 @@ module Nwiki
|
|
12
12
|
path_info = env["PATH_INFO"]
|
13
13
|
page = @wiki.find path_info
|
14
14
|
case page
|
15
|
-
when Core::Page
|
15
|
+
when Core::Page, Core::Directory
|
16
16
|
[200, {"Content-Type" => "text/html; charset=#{page.encoding}"}, [html(page)]]
|
17
17
|
when Core::File
|
18
18
|
[200, {"Content-Type" => page.content_type}, [page.data]]
|
data/lib/nwiki/version.rb
CHANGED
@@ -15,11 +15,18 @@ module Nwiki
|
|
15
15
|
describe '#find' do
|
16
16
|
it { subject.find('/foo').should eq Page.new("Foo", "* Foo\n** Bar\n[[icon.png]]\n", Wiki.parser) }
|
17
17
|
it { subject.find('/icon.png').should be_kind_of File }
|
18
|
+
it { subject.find('/').should be_kind_of Directory }
|
18
19
|
it { subject.find('/not_exist_page').should be_nil }
|
19
20
|
it { subject.find('/1/2/a').should_not be_nil }
|
20
21
|
it { subject.find('/日本語ディレクトリ/わたしだ').should_not be_nil }
|
21
22
|
end
|
22
23
|
|
24
|
+
describe '#find_directory' do
|
25
|
+
it { subject.find_directory('/').list.should eq \
|
26
|
+
Directory.new('/', ["1/2/a", "1/2/b", "foo", "icon.png", "日本語ディレクトリ/わたしだ"]).list
|
27
|
+
}
|
28
|
+
end
|
29
|
+
|
23
30
|
describe '#name' do
|
24
31
|
it { subject.name.should eq 'ヽ(´・肉・`)ノログ' }
|
25
32
|
end
|
@@ -17,22 +17,18 @@ module Nwiki
|
|
17
17
|
describe 'GET /' do
|
18
18
|
let(:path) { '/' }
|
19
19
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
it { subject.should match %r!\b日本語ディレクトリ\b! }
|
25
|
-
end
|
20
|
+
it { subject.should be_ok }
|
21
|
+
it { subject.should match %r!\bfoo\b! }
|
22
|
+
it { subject.should match %r!\b1\b! }
|
23
|
+
it { subject.should match %r!\b日本語ディレクトリ\b! }
|
26
24
|
end
|
27
25
|
|
28
26
|
describe 'GET /foo' do
|
29
27
|
let(:path) { '/foo' }
|
30
28
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
it { subject.should match %r!<h3[^>]*>Bar</h3>! }
|
35
|
-
end
|
29
|
+
it { subject.should be_ok }
|
30
|
+
it { subject.should match %r!<h2[^>]*>Foo</h2>! }
|
31
|
+
it { subject.should match %r!<h3[^>]*>Bar</h3>! }
|
36
32
|
end
|
37
33
|
|
38
34
|
describe 'GET /icon.png' do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nwiki
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-10-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: gollum
|
@@ -207,6 +207,7 @@ files:
|
|
207
207
|
- config.ru
|
208
208
|
- lib/nwiki.rb
|
209
209
|
- lib/nwiki/core.rb
|
210
|
+
- lib/nwiki/core/directory.rb
|
210
211
|
- lib/nwiki/core/file.rb
|
211
212
|
- lib/nwiki/core/git_access.rb
|
212
213
|
- lib/nwiki/core/page.rb
|
@@ -271,12 +272,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
271
272
|
- - ! '>='
|
272
273
|
- !ruby/object:Gem::Version
|
273
274
|
version: '0'
|
275
|
+
segments:
|
276
|
+
- 0
|
277
|
+
hash: 3374850286995081300
|
274
278
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
275
279
|
none: false
|
276
280
|
requirements:
|
277
281
|
- - ! '>='
|
278
282
|
- !ruby/object:Gem::Version
|
279
283
|
version: '0'
|
284
|
+
segments:
|
285
|
+
- 0
|
286
|
+
hash: 3374850286995081300
|
280
287
|
requirements: []
|
281
288
|
rubyforge_project:
|
282
289
|
rubygems_version: 1.8.23
|