mirror of https://github.com/tootsuite/mastodon
Extract constants for annual report calculations
parent
37f00fb018
commit
0bea4c9be6
|
@ -5,6 +5,9 @@ class AnnualReport::Archetype < AnnualReport::Source
|
||||||
# each active user in a single year (2023)
|
# each active user in a single year (2023)
|
||||||
AVERAGE_PER_YEAR = 113
|
AVERAGE_PER_YEAR = 113
|
||||||
|
|
||||||
|
SCORE_MULTIPLIER = 2
|
||||||
|
SCORE_REDUCER = 0.1
|
||||||
|
|
||||||
def generate
|
def generate
|
||||||
{
|
{
|
||||||
archetype: archetype,
|
archetype: archetype,
|
||||||
|
@ -16,11 +19,11 @@ class AnnualReport::Archetype < AnnualReport::Source
|
||||||
def archetype
|
def archetype
|
||||||
if (standalone_count + replies_count + reblogs_count) < AVERAGE_PER_YEAR
|
if (standalone_count + replies_count + reblogs_count) < AVERAGE_PER_YEAR
|
||||||
:lurker
|
:lurker
|
||||||
elsif reblogs_count > (standalone_count * 2)
|
elsif reblogs_count > (standalone_count * SCORE_MULTIPLIER)
|
||||||
:booster
|
:booster
|
||||||
elsif polls_count > (standalone_count * 0.1) # standalone_count includes posts with polls
|
elsif polls_count > (standalone_count * SCORE_REDUCER) # standalone_count includes posts with polls
|
||||||
:pollster
|
:pollster
|
||||||
elsif replies_count > (standalone_count * 2)
|
elsif replies_count > (standalone_count * SCORE_MULTIPLIER)
|
||||||
:replier
|
:replier
|
||||||
else
|
else
|
||||||
:oracle
|
:oracle
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class AnnualReport::CommonlyInteractedWithAccounts < AnnualReport::Source
|
class AnnualReport::CommonlyInteractedWithAccounts < AnnualReport::Source
|
||||||
|
MINIMUM_INTERACTIONS = 1
|
||||||
SET_SIZE = 40
|
SET_SIZE = 40
|
||||||
|
|
||||||
def generate
|
def generate
|
||||||
|
@ -17,6 +18,6 @@ class AnnualReport::CommonlyInteractedWithAccounts < AnnualReport::Source
|
||||||
private
|
private
|
||||||
|
|
||||||
def commonly_interacted_with_accounts
|
def commonly_interacted_with_accounts
|
||||||
report_statuses.where.not(in_reply_to_account_id: @account.id).group(:in_reply_to_account_id).having('count(*) > 1').order(count_all: :desc).limit(SET_SIZE).count
|
report_statuses.where.not(in_reply_to_account_id: @account.id).group(:in_reply_to_account_id).having(Arel.star.count.gt(MINIMUM_INTERACTIONS)).order(count_all: :desc).limit(SET_SIZE).count
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class AnnualReport::MostRebloggedAccounts < AnnualReport::Source
|
class AnnualReport::MostRebloggedAccounts < AnnualReport::Source
|
||||||
|
MINIMUM_COUNT = 1
|
||||||
SET_SIZE = 10
|
SET_SIZE = 10
|
||||||
|
|
||||||
def generate
|
def generate
|
||||||
|
@ -17,6 +18,6 @@ class AnnualReport::MostRebloggedAccounts < AnnualReport::Source
|
||||||
private
|
private
|
||||||
|
|
||||||
def most_reblogged_accounts
|
def most_reblogged_accounts
|
||||||
report_statuses.where.not(reblog_of_id: nil).joins(reblog: :account).group(accounts: [:id]).having('count(*) > 1').order(count_all: :desc).limit(SET_SIZE).count
|
report_statuses.where.not(reblog_of_id: nil).joins(reblog: :account).group(accounts: [:id]).having(Arel.star.count.gt(MINIMUM_COUNT)).order(count_all: :desc).limit(SET_SIZE).count
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class AnnualReport::TopHashtags < AnnualReport::Source
|
class AnnualReport::TopHashtags < AnnualReport::Source
|
||||||
|
MINIMUM_COUNT = 1
|
||||||
SET_SIZE = 40
|
SET_SIZE = 40
|
||||||
|
|
||||||
def generate
|
def generate
|
||||||
|
@ -17,7 +18,7 @@ class AnnualReport::TopHashtags < AnnualReport::Source
|
||||||
private
|
private
|
||||||
|
|
||||||
def top_hashtags
|
def top_hashtags
|
||||||
Tag.joins(:statuses).where(statuses: { id: report_statuses.select(:id) }).group(coalesced_tag_names).having('count(*) > 1').order(count_all: :desc).limit(SET_SIZE).count
|
Tag.joins(:statuses).where(statuses: { id: report_statuses.select(:id) }).group(coalesced_tag_names).having(Arel.star.count.gt(MINIMUM_COUNT)).order(count_all: :desc).limit(SET_SIZE).count
|
||||||
end
|
end
|
||||||
|
|
||||||
def coalesced_tag_names
|
def coalesced_tag_names
|
||||||
|
|
Loading…
Reference in New Issue