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.
90
91
92
93
94
|
# File 'app/models/thredded/topic.rb', line 90
def self.friendly_find!(slug_or_id)
friendly.find(slug_or_id)
rescue ActiveRecord::RecordNotFound
raise Thredded::Errors::TopicNotFound
end
|
111
112
113
114
115
116
117
118
119
|
# File 'app/models/thredded/topic.rb', line 111
def with_read_and_follow_states(user)
null_read_state = Thredded::NullUserTopicReadState.new
return current_scope.zip([null_read_state, nil]) if user.thredded_anonymous?
read_states_by_topic = read_states_by_postable_hash(user)
follows_by_topic = follows_by_topic_hash(user)
current_scope.map do |topic|
[topic, read_states_by_topic[topic] || null_read_state, follows_by_topic[topic]]
end
end
|
Instance Method Details
127
128
129
|
# File 'app/models/thredded/topic.rb', line 127
def last_moderation_record
first_post.try(:last_moderation_record)
end
|
#normalize_friendly_id(input) ⇒ Object
149
150
151
|
# File 'app/models/thredded/topic.rb', line 149
def normalize_friendly_id(input)
Thredded.slugifier.call(input.to_s)
end
|
#public? ⇒ Boolean
122
123
124
|
# File 'app/models/thredded/topic.rb', line 122
def public?
true
end
|
#should_generate_new_friendly_id? ⇒ Boolean
145
146
147
|
# File 'app/models/thredded/topic.rb', line 145
def should_generate_new_friendly_id?
title_changed?
end
|
#update_last_user_and_time_from_last_post! ⇒ Object
131
132
133
134
135
136
137
138
139
140
141
142
143
|
# File 'app/models/thredded/topic.rb', line 131
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
|