@@ -115,11 +115,6 @@ def tag_set
115115 parent . nil? ? category . tag_set : parent . category . tag_set
116116 end
117117
118- # @return [Boolean]
119- def meta?
120- false
121- end
122-
123118 # Used in the transfer of content from SE to reassign the owner of a post to the given user.
124119 # @param new_user [User]
125120 def reassign_user ( new_user )
@@ -167,37 +162,6 @@ def body_plain
167162 ApplicationController . helpers . strip_markdown ( body_markdown )
168163 end
169164
170- # @return [Boolean] whether this post is a question
171- def question?
172- post_type_id == Question . post_type_id
173- end
174-
175- # @return [Boolean] whether this post is an answer
176- def answer?
177- post_type_id == Answer . post_type_id
178- end
179-
180- # @return [Boolean] whether this post is an article
181- def article?
182- post_type_id == Article . post_type_id
183- end
184-
185- # @return [Boolean] whether the post can be closed
186- def closeable?
187- post_type . is_closeable
188- end
189-
190- # Is the post deleted by the owner?
191- # @return [Boolean] check result
192- def deleted_by_owner?
193- deleted_by &.same_as? ( user )
194- end
195-
196- # @return [Boolean] whether there is a suggested edit pending for this post
197- def pending_suggested_edit?
198- SuggestedEdit . where ( post_id : id , active : true ) . any?
199- end
200-
201165 # @return [SuggestedEdit, Nil] the suggested edit pending for this post (if any)
202166 def pending_suggested_edit
203167 SuggestedEdit . where ( post_id : id , active : true ) . last
@@ -216,29 +180,6 @@ def recalc_score
216180 clear_attribute_changes ( [ :score ] )
217181 end
218182
219- # Checks whether the post allows users to comment on it
220- # @return [Boolean] check result
221- def comments_allowed?
222- !locked? && !deleted && !comments_disabled
223- end
224-
225- # The test here is for flags that are pending (no status). A spam flag
226- # could be marked helpful but the post wouldn't be deleted, and
227- # we don't necessarily want the post to be treated like it's a spam risk
228- # if that happens.
229- def spam_flag_pending?
230- flags . any? { |flag | flag . post_flag_type &.name == "it's spam" && !flag . status }
231- end
232-
233- # Checks whether a given user can access the post at all
234- # @param user [User, Nil] user to check access for
235- # @return [Boolean] access check result
236- def can_access? ( user )
237- ( !deleted? || user &.post_privilege? ( 'flag_curate' , self ) ) &&
238- ( !category . present? || !category . min_view_trust_level . present? ||
239- category . min_view_trust_level <= ( user &.trust_level || 0 ) )
240- end
241-
242183 # Maps reaction types to number of reactions of that type
243184 # @return [Hash{ReactionType => Integer}]
244185 def reaction_list
@@ -257,19 +198,85 @@ def related_posts_for(user)
257198 end
258199 end
259200
201+ # predicates:
202+
203+ # Is the post an Answer?
204+ # @return [Boolean] check result
205+ def answer?
206+ post_type_id == Answer . post_type_id
207+ end
208+
209+ # Is the post an Article?
210+ # @return [Boolean] check result
211+ def article?
212+ post_type_id == Article . post_type_id
213+ end
214+
215+ # Can a given user access the post at all?
216+ # @param user [User, Nil] user to check access for
217+ # @return [Boolean] check result
218+ def can_access? ( user )
219+ ( !deleted? || user &.post_privilege? ( 'flag_curate' , self ) ) &&
220+ ( !category . present? || !category . min_view_trust_level . present? ||
221+ category . min_view_trust_level <= ( user &.trust_level || 0 ) )
222+ end
223+
224+ # Can the post be closed?
225+ # @return [Boolean] check result
226+ def closeable?
227+ post_type . is_closeable
228+ end
229+
230+ # Are comments allowed on the post?
231+ # @return [Boolean] check result
232+ def comments_allowed?
233+ !locked? && !deleted && !comments_disabled
234+ end
235+
236+ # Is the post deleted by the owner?
237+ # @return [Boolean] check result
238+ def deleted_by_owner?
239+ deleted_by &.same_as? ( user )
240+ end
241+
242+ # Is a given user following the post?
243+ # @param user [User] user to check
244+ # @return [Boolean] check result
245+ def followed_by? ( user )
246+ ThreadFollower . where ( post : self , user : user ) . any?
247+ end
248+
249+ # Does the post have any pending (not handled) spam flags?
250+ # A spam flag could be marked helpful but the post wouldn't be deleted, and
251+ # we don't want the post to be treated like it's spam risk if that happens.
252+ # @return [Boolean] check result
253+ def pending_spam_flag?
254+ flags . any? { |flag | flag . post_flag_type &.name == "it's spam" && !flag . status }
255+ end
256+
257+ # Does the post have a pending suggested edit?
258+ # @return [Boolean] check result
259+ def pending_suggested_edit?
260+ SuggestedEdit . where ( post_id : id , active : true ) . any?
261+ end
262+
260263 # Checks if the post has related posts (scoped for a given user)
261264 # @param user [User, nil] user to check access for
262265 # @return [Boolean] check result
263266 def related_posts_for? ( user )
264267 related_posts_for ( user ) . any?
265268 end
266269
267- # Are new threads on this post followed by a given user?
268- # @param post [Post] post to check
269- # @param user [User] user to check
270+ # Is the post a top level post?
270271 # @return [Boolean] check result
271- def followed_by? ( user )
272- ThreadFollower . where ( post : self , user : user ) . any?
272+ def top_level?
273+ post_type . is_top_level
274+ end
275+
276+ # Is the post a Question?
277+ # @return [Boolean] check result
278+ def question?
279+ post_type_id == Question . post_type_id
273280 end
274281
275282 private
0 commit comments