Class: Discussion
Constant Summary
WithScopedQueries::SCOPING_METHODS
Class Method Summary
collapse
Instance Method Summary
collapse
#leave, #navigable_name, #navigable_parent, #navigation_end?
#expectation_results_visible?, #failed_expectation_results, #feedback_html, #humanized_expectation_results, #queries_with_results, #result_html, #result_preview, #results_visible?, #single_visual_result?, #single_visual_result_html, #visible_expectation_results
aggregate_of, all_except, defaults, #delete, #destroy!, numbered, organic_on, resource_fields, #save, #save_and_notify!, #save_and_notify_changes!, serialize_symbolized_hash_array, #update_and_notify!, update_or_create!, whitelist_attributes
Class Method Details
.debatable_for(klazz, params) ⇒ Object
134
135
136
137
|
# File 'app/models/discussion.rb', line 134
def self.debatable_for(klazz, params)
debatable_id = params[:"#{klazz.underscore}_id"]
klazz.constantize.find(debatable_id)
end
|
Instance Method Details
#allowed_statuses_for(user) ⇒ Object
108
109
110
|
# File 'app/models/discussion.rb', line 108
def allowed_statuses_for(user)
status.allowed_statuses_for(user, self)
end
|
#authorized?(user) ⇒ Boolean
91
92
93
|
# File 'app/models/discussion.rb', line 91
def authorized?(user)
initiator?(user) || user.try(:moderator_here?)
end
|
#capitalize_title ⇒ Object
40
41
42
|
# File 'app/models/discussion.rb', line 40
def capitalize_title
title.capitalize!
end
|
48
49
50
|
# File 'app/models/discussion.rb', line 48
def (user)
user&.moderator_here? || (opened? && user.present?)
end
|
128
129
130
131
132
|
# File 'app/models/discussion.rb', line 128
def
exercise.assignment_for(initiator).
end
|
#friendly ⇒ Object
68
69
70
|
# File 'app/models/discussion.rb', line 68
def friendly
title
end
|
#has_messages? ⇒ Boolean
116
117
118
|
# File 'app/models/discussion.rb', line 116
def has_messages?
messages.exists? || description.present?
end
|
#has_responses? ⇒ Boolean
124
125
126
|
# File 'app/models/discussion.rb', line 124
def has_responses?
responses_count > 0
end
|
#has_submission? ⇒ Boolean
56
57
58
|
# File 'app/models/discussion.rb', line 56
def has_submission?
submission.solution.present?
end
|
#initiator?(user) ⇒ Boolean
95
96
97
|
# File 'app/models/discussion.rb', line 95
def initiator?(user)
user.try(:uid) == initiator.uid
end
|
#last_message_date ⇒ Object
64
65
66
|
# File 'app/models/discussion.rb', line 64
def last_message_date
messages.last&.created_at || created_at
end
|
#reachable_status_for?(user, status) ⇒ Boolean
104
105
106
|
# File 'app/models/discussion.rb', line 104
def reachable_status_for?(user, status)
reachable_statuses_for(user).include? status
end
|
#reachable_statuses_for(user) ⇒ Object
99
100
101
102
|
# File 'app/models/discussion.rb', line 99
def reachable_statuses_for(user)
return [] unless authorized?(user)
status.reachable_statuses_for(user, self)
end
|
#read_by?(user) ⇒ Boolean
60
61
62
|
# File 'app/models/discussion.rb', line 60
def read_by?(user)
subscription_for(user).read
end
|
#responses_count ⇒ Object
120
121
122
|
# File 'app/models/discussion.rb', line 120
def responses_count
messages.where.not(sender: initiator.uid).count
end
|
#submit_message!(message, user) ⇒ Object
84
85
86
87
88
89
|
# File 'app/models/discussion.rb', line 84
def submit_message!(message, user)
message.merge!(sender: user.uid)
messages.create(message)
user.subscribe_to! self
unread_subscriptions(user)
end
|
#subscribable? ⇒ Boolean
52
53
54
|
# File 'app/models/discussion.rb', line 52
def subscribable?
opened? || solved?
end
|
#subscription_for(user) ⇒ Object
72
73
74
|
# File 'app/models/discussion.rb', line 72
def subscription_for(user)
subscriptions.find_by(user: user)
end
|
#try_solve! ⇒ Object
34
35
36
37
38
|
# File 'app/models/discussion.rb', line 34
def try_solve!
if opened?
update! status: reachable_statuses_for(initiator).first
end
end
|
#unread_subscriptions(user) ⇒ Object
80
81
82
|
# File 'app/models/discussion.rb', line 80
def unread_subscriptions(user)
subscriptions.where.not(user: user).map(&:unread!)
end
|
#update_status!(status, user) ⇒ Object
112
113
114
|
# File 'app/models/discussion.rb', line 112
def update_status!(status, user)
update!(status: status) if reachable_status_for?(user, status)
end
|
#upvote_for(user) ⇒ Object
76
77
78
|
# File 'app/models/discussion.rb', line 76
def upvote_for(user)
upvotes.find_by(user: user)
end
|
#used_in?(organization) ⇒ Boolean
44
45
46
|
# File 'app/models/discussion.rb', line 44
def used_in?(organization)
organization == self.organization
end
|