forked from sr/git-wiki
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathpage.rb
66 lines (53 loc) · 1.38 KB
/
page.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
class Page
attr_reader :name
def initialize(name, rev=nil)
@name = name
@rev = rev
@filename = File.join(GIT_REPO, @name)
end
def body
@body ||= RubyPants.new(RedCloth.new(raw_body).to_html).to_html.wiki_linked
end
def updated_at
commit.committed_date
end
def raw_body
if @rev
@raw_body ||= blob.data
else
@raw_body ||= File.exists?(@filename) ? File.read(@filename) : ''
end
end
def body=(content)
File.open(@filename, 'w') { |f| f << content }
message = tracked? ? "edited #{@name}" : "created #{@name}"
`cd #{GIT_REPO} && git add #{@name} && git commit -m "#{message}"`
end
def tracked?
return false if $repo.commits.empty?
$repo.commits.first.tree.contents.map { |b| b.name }.include?(@name)
end
def history
return nil unless tracked?
@history ||= $repo.log('master', @name)
end
def delta(rev)
$repo.diff(previous_commit, rev, @name)
end
def previous_commit
@previous_commit ||= $repo.log(@rev || 'master', @name, {"max-count" => 2})[1]
end
def next_commit
# TODO implement - use history & commit
end
def version(rev)
data = blob.data
RubyPants.new(RedCloth.new(data).to_html).to_html.wiki_linked
end
def commit
@commit ||= $repo.log(@rev || 'master', @name, {"max-count" => 1}).first
end
def blob
@blob ||= ($repo.tree(@rev)/@name)
end
end