Class: Thredded::Topic
Overview
rubocop:disable Metrics/ClassLength
Class Method Summary
collapse
Instance Method Summary
collapse
#moderation_state_visible_to_all?, #moderation_state_visible_to_user?
#last_user, #private?, #user
Class Method Details
Finds the topic by its slug or ID, or raises Thredded::Errors::TopicNotFound.
102
103
104
105
106
|
# File 'app/models/thredded/topic.rb', line 102
def self.friendly_find!(slug_or_id)
friendly.find(slug_or_id)
rescue ActiveRecord::RecordNotFound
raise Thredded::Errors::TopicNotFound
end
|
.post_class ⇒ Object
121
122
123
|
# File 'app/models/thredded/topic.rb', line 121
def post_class
Thredded::Post
end
|
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
|
# File 'app/models/thredded/topic.rb', line 127
def with_read_and_follow_states(user)
topics = current_scope.to_a
if user.thredded_anonymous?
post_counts = post_counts_for_user_and_topics(user, topics.map(&:id))
topics.map do |topic|
[topic, Thredded::NullUserTopicReadState.new(posts_count: post_counts[topic.id] || 0), nil]
end
else
read_states_by_topic = read_states_by_postable_hash(user)
post_counts = post_counts_for_user_and_topics(
user, topics.reject { |topic| read_states_by_topic.key?(topic) }.map(&:id)
)
follows_by_topic = follows_by_topic_hash(user)
current_scope.map do |topic|
[
topic,
read_states_by_topic[topic] ||
Thredded::NullUserTopicReadState.new(posts_count: post_counts[topic.id] || 0),
follows_by_topic[topic]
]
end
end
end
|
Instance Method Details
157
158
159
|
# File 'app/models/thredded/topic.rb', line 157
def last_moderation_record
first_post.try(:last_moderation_record)
end
|
#normalize_friendly_id(input) ⇒ Object
179
180
181
|
# File 'app/models/thredded/topic.rb', line 179
def normalize_friendly_id(input)
Thredded.slugifier.call(input.to_s)
end
|
#public? ⇒ Boolean
152
153
154
|
# File 'app/models/thredded/topic.rb', line 152
def public?
true
end
|
#should_generate_new_friendly_id? ⇒ Boolean
175
176
177
|
# File 'app/models/thredded/topic.rb', line 175
def should_generate_new_friendly_id?
title_changed?
end
|
#update_last_user_and_time_from_last_post! ⇒ Object
161
162
163
164
165
166
167
168
169
170
171
172
173
|
# File 'app/models/thredded/topic.rb', line 161
def update_last_user_and_time_from_last_post!
return if destroyed?
scope = posts.order_newest_first
scope = scope.moderation_state_visible_to_all if moderation_state_visible_to_all?
last_post = scope.select(:user_id, :created_at).first
if last_post
update_columns(last_user_id: last_post.user_id, last_post_at: last_post.created_at, updated_at: Time.zone.now)
else
update_columns(last_user_id: nil, last_post_at: created_at, updated_at: Time.zone.now)
end
end
|