Class: TopTopic

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/top_topic.rb

Class Method Summary collapse

Class Method Details

.periodsObject



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_periodsObject



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
# File 'app/models/top_topic.rb', line 47

def self.validate_period(period)
  if period.blank? || !periods.include?(period.to_sym)
    raise Discourse::InvalidParameters.new(
            "Invalid period. Valid periods are #{periods.join(", ")}",
          )
  end
end