aboutsummaryrefslogtreecommitdiffstats
path: root/app/models/tweet.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/tweet.rb')
-rw-r--r--app/models/tweet.rb38
1 files changed, 38 insertions, 0 deletions
diff --git a/app/models/tweet.rb b/app/models/tweet.rb
index a1124f9..6b6311d 100644
--- a/app/models/tweet.rb
+++ b/app/models/tweet.rb
@@ -2,4 +2,42 @@ class Tweet < ActiveRecord::Base
belongs_to :user
has_many :favorites, :dependent => :delete_all
has_many :retweets, :dependent => :delete_all
+
+ scope :recent, -> do
+ where("tweeted_at > ?", Time.zone.now - 3.days)
+ end
+
+ scope :reacted, -> do
+ where("favorites_count > 0 OR retweets_count > 0")
+ end
+
+ scope :order_by_id, -> do
+ order("id DESC")
+ end
+
+ scope :order_by_reactions, -> do
+ order("COALESCE(favorites_count, 0) + COALESCE(retweets_count, 0) DESC")
+ end
+
+ scope :discovered, -> user do
+ where("id IN (" +
+ "SELECT tweet_id FROM favorites WHERE user_id = ?" +
+ " UNION ALL " +
+ "SELECT tweet_id FROM retweets WHERE user_id = ?" +
+ ")", user.id, user.id)
+ end
+
+ scope :of, -> user do
+ where("user_id = ?", user.id)
+ end
+
+ def self.cached(id)
+ Rails.cache.fetch("tweet/#{id}", :expires_in => 3.hour) do
+ where(:id => id).first
+ end
+ end
+
+ def user
+ User.cached(user_id)
+ end
end