Class: TopTopic
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- TopTopic
- Defined in:
- app/models/top_topic.rb
Class Method Summary collapse
- .periods ⇒ Object
- .refresh! ⇒ Object
-
.refresh_daily! ⇒ Object
The top topics we want to refresh often.
-
.refresh_older! ⇒ Object
We don’t have to refresh these as often.
- .score_column_for_period(period) ⇒ Object
- .sorted_periods ⇒ Object
- .validate_period(period) ⇒ Object
Class Method Details
.periods ⇒ Object
34 35 36 |
# File 'app/models/top_topic.rb', line 34 def self.periods @@periods ||= %i[all yearly quarterly monthly weekly daily].freeze end |
.refresh! ⇒ Object
29 30 31 32 |
# File 'app/models/top_topic.rb', line 29 def self.refresh! refresh_daily! refresh_older! end |
.refresh_daily! ⇒ Object
The top topics we want to refresh often
7 8 9 10 11 12 13 14 15 16 |
# File 'app/models/top_topic.rb', line 7 def self.refresh_daily! DistributedMutex.synchronize("update_top_topics", validity: 5.minutes) do transaction do remove_invisible_topics add_new_visible_topics update_counts_and_compute_scores_for(:daily) end end end |
.refresh_older! ⇒ Object
We don’t have to refresh these as often
19 20 21 22 23 24 25 26 27 |
# File 'app/models/top_topic.rb', line 19 def self.refresh_older! DistributedMutex.synchronize("update_top_topics", validity: 5.minutes) do older_periods = periods - %i[daily all] transaction { older_periods.each { |period| update_counts_and_compute_scores_for(period) } } compute_top_score_for(:all) end end |
.score_column_for_period(period) ⇒ Object
42 43 44 45 |
# File 'app/models/top_topic.rb', line 42 def self.score_column_for_period(period) TopTopic.validate_period(period) "#{period}_score" end |
.sorted_periods ⇒ Object
38 39 40 |
# File 'app/models/top_topic.rb', line 38 def self.sorted_periods ascending_periods ||= Enum.new(daily: 1, weekly: 2, monthly: 3, quarterly: 4, yearly: 5, all: 6) end |
.validate_period(period) ⇒ Object
47 48 49 50 51 52 53 54 |
# File 'app/models/top_topic.rb', line 47 def self.validate_period(period) @invalid_period_error ||= Discourse::InvalidParameters.new("Invalid period. Valid periods are #{periods.join(", ")}") raise @invalid_period_error if period.blank? || !periods.include?(period.to_sym) rescue NoMethodError raise @invalid_period_error end |