From 24e32092e7e96e1139f25d82bf9678bfff79fe29 Mon Sep 17 00:00:00 2001
From: DI2uNk <jd.drunk@gmail.com>
Date: Thu, 30 May 2013 13:23:40 +0200
Subject: [PATCH] Refactored two class methods into scopes (to achieve a better
 'rails way') Also added some tests to the methods

---
 app/models/topic.rb       | 10 ++++------
 spec/models/topic_spec.rb | 27 +++++++++++++++++++++++++++
 2 files changed, 31 insertions(+), 6 deletions(-)

diff --git a/app/models/topic.rb b/app/models/topic.rb
index b23b4b82e..25c624608 100644
--- a/app/models/topic.rb
+++ b/app/models/topic.rb
@@ -94,6 +94,10 @@ class Topic < ActiveRecord::Base
 
   scope :by_newest, order('topics.created_at desc, topics.id desc')
 
+  scope :visible, where(visible: true)
+
+  scope :created_since, lambda { |time_ago| where('created_at > ?', time_ago) }
+
   # Helps us limit how many favorites can be made in a day
   class FavoriteLimiter < RateLimiter
     def initialize(user)
@@ -206,13 +210,7 @@ class Topic < ActiveRecord::Base
     meta_data[key.to_s]
   end
 
-  def self.visible
-    where(visible: true)
-  end
 
-  def self.created_since(time_ago)
-    where("created_at > ?", time_ago)
-  end
 
   def self.listable_count_per_day(sinceDaysAgo=30)
     listable_topics.where('created_at > ?', sinceDaysAgo.days.ago).group('date(created_at)').order('date(created_at)').count
diff --git a/spec/models/topic_spec.rb b/spec/models/topic_spec.rb
index 6e3819e31..c2fd08125 100644
--- a/spec/models/topic_spec.rb
+++ b/spec/models/topic_spec.rb
@@ -966,6 +966,33 @@ describe Topic do
         Topic.by_newest.should == [c,b,d,a]
       end
     end
+
+    describe '#created_since' do
+      it 'returns topics created after some date' do
+        now = Time.now
+        a = Fabricate(:topic, created_at: now - 2.minutes)
+        b = Fabricate(:topic, created_at: now - 1.minute)
+        c = Fabricate(:topic, created_at: now)
+        d = Fabricate(:topic, created_at: now + 1.minute)
+        e = Fabricate(:topic, created_at: now + 2.minutes)
+        Topic.created_since(now).should_not include a
+        Topic.created_since(now).should_not include b
+        Topic.created_since(now).should_not include c
+        Topic.created_since(now).should include d
+        Topic.created_since(now).should include e
+      end
+    end
+
+    describe '#visible' do
+      it 'returns topics set as visible' do
+        a = Fabricate(:topic, visible: false)
+        b = Fabricate(:topic, visible: true)
+        c = Fabricate(:topic, visible: true)
+        Topic.visible.should_not include a
+        Topic.visible.should include b
+        Topic.visible.should include c
+      end
+    end
   end
 
   describe 'auto-close' do