From 55dce7e80e02cd0cc79392c1c62d6fc34610ba0d Mon Sep 17 00:00:00 2001 From: Kyle Drake Date: Thu, 27 Aug 2015 21:12:52 -0700 Subject: [PATCH] SpEcIaL SaUcE --- app/browse.rb | 3 +++ migrations/075_special_sauce.rb | 11 +++++++++++ models/site.rb | 26 +++++++++++++++++++++++++- views/browse.erb | 1 + 4 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 migrations/075_special_sauce.rb diff --git a/app/browse.rb b/app/browse.rb index c6b78fd1..b63d27b6 100644 --- a/app/browse.rb +++ b/app/browse.rb @@ -46,6 +46,9 @@ def browse_sites_dataset end case params[:sort_by] + when 'special_sauce' + site_dataset.exclude! score: nil + site_dataset.order! :score.desc when 'followers' site_dataset = site_dataset.association_left_join :follows site_dataset.select_all! :sites diff --git a/migrations/075_special_sauce.rb b/migrations/075_special_sauce.rb new file mode 100644 index 00000000..394f2ded --- /dev/null +++ b/migrations/075_special_sauce.rb @@ -0,0 +1,11 @@ +# IT'S MADE OUT OF FUCKING PEOPLE + +Sequel.migration do + up { + DB.add_column :sites, :score, :integer + } + + down { + DB.drop_column :sites, :score + } +end diff --git a/models/site.rb b/models/site.rb index 4fafb54b..8eb27e0b 100644 --- a/models/site.rb +++ b/models/site.rb @@ -1076,6 +1076,31 @@ class Site < Sequel::Model end end + def self.compute_scores + select(:id, :username, :created_at, :updated_at, :views).exclude(is_banned: true).exclude(is_crashing: true).exclude(is_nsfw: true).exclude(updated_at: nil).all.each do |s| + s.score = s.compute_score + s.save_changes validate: false + end + end + + def compute_score + score = 0 + begin + score += (Time.now - created_at) / 1.day + rescue => e + binding.pry + end + score -= ((Time.now - updated_at) / 1.day) * 2 + score += 500 if (updated_at > 1.week.ago) + score -= 1000 if + follow_count = follows_dataset.count + score -= 1000 if follow_count == 0 + score += follow_count * 100 + score += profile_comments_dataset.count * 5 + score += profile_commentings_dataset.count + score.to_i + end + def suggestions(limit=SUGGESTIONS_LIMIT, offset=0) suggestions_dataset = Site.exclude(id: id).exclude(is_banned: true).exclude(is_nsfw: true).order(:views.desc, :updated_at.desc) suggestions = suggestions_dataset.where(tags: tags).limit(limit, offset).all @@ -1281,5 +1306,4 @@ class Site < Sequel::Model end true end - end diff --git a/views/browse.erb b/views/browse.erb index 0fcc9b85..171f2b0e 100644 --- a/views/browse.erb +++ b/views/browse.erb @@ -26,6 +26,7 @@