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
99
100
101
|
# File 'app/serializers/post_revision_serializer.rb', line 99
def avatar_template
user.avatar_template
end
|
#body_changes ⇒ Object
115
116
117
118
119
120
121
122
123
124
|
# File 'app/serializers/post_revision_serializer.rb', line 115
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
103
104
105
|
# File 'app/serializers/post_revision_serializer.rb', line 103
def can_edit
scope.can_edit?(object.post)
end
|
#category_id_changes ⇒ Object
179
180
181
182
183
184
|
# File 'app/serializers/post_revision_serializer.rb', line 179
def category_id_changes
pre = filter_category_id previous["category_id"]
cur = filter_category_id current["category_id"]
pre == cur ? nil : { previous: pre, current: cur }
end
|
#current_hidden ⇒ Object
49
50
51
|
# File 'app/serializers/post_revision_serializer.rb', line 49
def current_hidden
current["hidden"]
end
|
#current_revision ⇒ Object
66
67
68
|
# File 'app/serializers/post_revision_serializer.rb', line 66
def current_revision
object.number
end
|
#current_version ⇒ Object
83
84
85
|
# File 'app/serializers/post_revision_serializer.rb', line 83
def current_version
@current_version ||= revisions.select { |r| r["revision"] <= current_revision }.count + 1
end
|
#display_username ⇒ Object
95
96
97
|
# File 'app/serializers/post_revision_serializer.rb', line 95
def display_username
user.username
end
|
#edit_reason ⇒ Object
107
108
109
|
# File 'app/serializers/post_revision_serializer.rb', line 107
def edit_reason
current["edit_reason"]
end
|
#first_revision ⇒ Object
53
54
55
|
# File 'app/serializers/post_revision_serializer.rb', line 53
def first_revision
revisions.first["revision"]
end
|
#include_category_id_changes? ⇒ Boolean
186
187
188
|
# File 'app/serializers/post_revision_serializer.rb', line 186
def include_category_id_changes?
previous["category_id"] != current["category_id"]
end
|
#include_edit_reason? ⇒ Boolean
111
112
113
|
# File 'app/serializers/post_revision_serializer.rb', line 111
def include_edit_reason?
scope.can_view_hidden_post_revisions? || current["revision"] == previous["revision"] + 1
end
|
175
176
177
|
# File 'app/serializers/post_revision_serializer.rb', line 175
def include_tags_changes?
previous["tags"] != current["tags"] && scope.can_see_tags?(topic)
end
|
#include_title_changes? ⇒ Boolean
138
139
140
|
# File 'app/serializers/post_revision_serializer.rb', line 138
def include_title_changes?
object.post.post_number == 1
end
|
#include_user_changes? ⇒ Boolean
164
165
166
|
# File 'app/serializers/post_revision_serializer.rb', line 164
def include_user_changes?
previous["user_id"] != current["user_id"]
end
|
#last_revision ⇒ Object
79
80
81
|
# File 'app/serializers/post_revision_serializer.rb', line 79
def last_revision
@last_revision ||= revisions.select { |r| r["revision"] <= post.version }.last["revision"]
end
|
#next_revision ⇒ Object
70
71
72
73
74
75
76
77
|
# File 'app/serializers/post_revision_serializer.rb', line 70
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
45
46
47
|
# File 'app/serializers/post_revision_serializer.rb', line 45
def previous_hidden
previous["hidden"]
end
|
#previous_revision ⇒ Object
57
58
59
60
61
62
63
64
|
# File 'app/serializers/post_revision_serializer.rb', line 57
def previous_revision
@previous_revision ||=
revisions
.select { |r| r["revision"] >= first_revision }
.select { |r| r["revision"] < current_revision }
.last
.try(:[], "revision")
end
|
168
169
170
171
172
173
|
# File 'app/serializers/post_revision_serializer.rb', line 168
def tags_changes
pre = filter_tags previous["tags"]
cur = filter_tags current["tags"]
pre == cur ? nil : { previous: pre, current: cur }
end
|
#title_changes ⇒ Object
126
127
128
129
130
131
132
133
134
135
136
|
# File 'app/serializers/post_revision_serializer.rb', line 126
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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
|
# File 'app/serializers/post_revision_serializer.rb', line 142
def user_changes
prev = previous["user_id"]
cur = current["user_id"]
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
91
92
93
|
# File 'app/serializers/post_revision_serializer.rb', line 91
def username
user.username_lower
end
|
#version_count ⇒ Object
87
88
89
|
# File 'app/serializers/post_revision_serializer.rb', line 87
def version_count
revisions.count
end
|