/
wiki_page.rb
65 lines (50 loc) · 1.46 KB
/
wiki_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
# == Schema Information
# Schema version: 20090216004002
#
# Table name: wiki_pages
#
# id :integer(4) not null, primary key
# state :string(255) default("public"), not null
# title :string(255)
# body :text
# created_at :datetime
# updated_at :datetime
#
# The wiki have pages, with the content that can't go anywhere else.
#
class WikiPage < Content
validates_presence_of :title, :message => "Le titre est obligatoire"
validates_presence_of :body, :message => "Le corps est obligatoire"
wikify :body, :as => :wikified_body
### SEO ###
has_friendly_id :title, :use_slug => true
### Sphinx ####
define_index do
indexes title, body
indexes user.name, :as => :user
where "state = 'public'"
set_property :field_weights => { :title => 15, :user => 1, :body => 5 }
set_property :delta => :datetime, :threshold => 1.hour
end
### Versioning ###
attr_accessor :commit_message
attr_accessor :committer
versioning(:title, :body) do |v|
v.repository = Rails.root.join('git_store', 'wiki.git')
v.message = lambda { |page| page.commit_message }
v.committer = lambda { |page| [page.committer.name, page.committer.email] }
end
### ACL ###
def creatable_by?(user)
user # && user.karma > 0
end
def editable_by?(user)
user && (state == "public" || user.amr?)
end
def deletable_by?(user)
user && user.amr?
end
def commentable_by?(user)
user && readable_by?(user)
end
end