Class: PostRevisionSerializer
Class Method Summary
collapse
Instance Method Summary
collapse
expire_cache_fragment!, fragment_cache
#include!
Class Method Details
.add_compared_field(field) ⇒ Object
Creates a field called field_name_changes with previous and current members if a field has changed in this revision
33
34
35
36
37
38
39
40
|
# File 'app/serializers/post_revision_serializer.rb', line 33
def self.add_compared_field(field)
changes_name = "#{field}_changes".to_sym
self.attributes changes_name
define_method(changes_name) { { previous: previous[field], current: current[field] } }
define_method("include_#{changes_name}?") { previous[field] != current[field] }
end
|
Instance Method Details
#avatar_template ⇒ Object
98
99
100
|
# File 'app/serializers/post_revision_serializer.rb', line 98
def avatar_template
user.avatar_template
end
|
#body_changes ⇒ Object
117
118
119
120
121
122
123
124
125
126
|
# File 'app/serializers/post_revision_serializer.rb', line 117
def body_changes
cooked_diff = DiscourseDiff.new(previous["cooked"], current["cooked"])
raw_diff = DiscourseDiff.new(previous["raw"], current["raw"])
{
inline: cooked_diff.inline_html,
side_by_side: cooked_diff.side_by_side_html,
side_by_side_markdown: raw_diff.side_by_side_markdown,
}
end
|
#can_edit ⇒ Object
106
107
108
|
# File 'app/serializers/post_revision_serializer.rb', line 106
def can_edit
scope.can_edit?(object.post)
end
|
#current_hidden ⇒ Object
48
49
50
|
# File 'app/serializers/post_revision_serializer.rb', line 48
def current_hidden
current["hidden"]
end
|
#current_revision ⇒ Object
65
66
67
|
# File 'app/serializers/post_revision_serializer.rb', line 65
def current_revision
object.number
end
|
#current_version ⇒ Object
82
83
84
|
# File 'app/serializers/post_revision_serializer.rb', line 82
def current_version
@current_version ||= revisions.select { |r| r["revision"] <= current_revision }.count + 1
end
|
#display_username ⇒ Object
94
95
96
|
# File 'app/serializers/post_revision_serializer.rb', line 94
def display_username
user.username
end
|
#edit_reason ⇒ Object
110
111
112
113
114
115
|
# File 'app/serializers/post_revision_serializer.rb', line 110
def edit_reason
if scope.can_view_hidden_post_revisions? || current["revision"] == previous["revision"] + 1
current["edit_reason"]
end
end
|
#first_revision ⇒ Object
52
53
54
|
# File 'app/serializers/post_revision_serializer.rb', line 52
def first_revision
revisions.first["revision"]
end
|
171
172
173
|
# File 'app/serializers/post_revision_serializer.rb', line 171
def include_tags_changes?
scope.can_see_tags?(topic) && previous["tags"] != current["tags"]
end
|
#last_revision ⇒ Object
78
79
80
|
# File 'app/serializers/post_revision_serializer.rb', line 78
def last_revision
@last_revision ||= revisions.select { |r| r["revision"] <= post.version }.last["revision"]
end
|
#next_revision ⇒ Object
69
70
71
72
73
74
75
76
|
# File 'app/serializers/post_revision_serializer.rb', line 69
def next_revision
@next_revision ||=
revisions
.select { |r| r["revision"] <= last_revision }
.select { |r| r["revision"] > current_revision }
.first
.try(:[], "revision")
end
|
#previous_hidden ⇒ Object
44
45
46
|
# File 'app/serializers/post_revision_serializer.rb', line 44
def previous_hidden
previous["hidden"]
end
|
#previous_revision ⇒ Object
56
57
58
59
60
61
62
63
|
# File 'app/serializers/post_revision_serializer.rb', line 56
def previous_revision
@previous_revision ||=
revisions
.select { |r| r["revision"] >= first_revision }
.select { |r| r["revision"] < current_revision }
.last
.try(:[], "revision")
end
|
163
164
165
166
167
168
169
|
# File 'app/serializers/post_revision_serializer.rb', line 163
def tags_changes
changes = {
previous: filter_visible_tags(previous["tags"]),
current: filter_visible_tags(current["tags"]),
}
changes[:previous] == changes[:current] ? nil : changes
end
|
#title_changes ⇒ Object
128
129
130
131
132
133
134
135
136
137
138
|
# File 'app/serializers/post_revision_serializer.rb', line 128
def title_changes
prev = "<div>#{previous["title"] && CGI.escapeHTML(previous["title"])}</div>"
cur = "<div>#{current["title"] && CGI.escapeHTML(current["title"])}</div>"
return if object.post.post_number > 1 && prev == cur
diff = DiscourseDiff.new(prev, cur)
{ inline: diff.inline_html, side_by_side: diff.side_by_side_html }
end
|
#user_changes ⇒ Object
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
|
# File 'app/serializers/post_revision_serializer.rb', line 140
def user_changes
prev = previous["user_id"]
cur = current["user_id"]
return if prev == cur
previous = User.find_by(id: prev) || Discourse.system_user
current = User.find_by(id: cur) || Discourse.system_user
{
previous: {
username: previous.username_lower,
display_username: previous.username,
avatar_template: previous.avatar_template,
},
current: {
username: current.username_lower,
display_username: current.username,
avatar_template: current.avatar_template,
},
}
end
|
#username ⇒ Object
90
91
92
|
# File 'app/serializers/post_revision_serializer.rb', line 90
def username
user.username_lower
end
|
#version_count ⇒ Object
86
87
88
|
# File 'app/serializers/post_revision_serializer.rb', line 86
def version_count
revisions.count
end
|
#wiki ⇒ Object
102
103
104
|
# File 'app/serializers/post_revision_serializer.rb', line 102
def wiki
object.post.wiki
end
|