aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Shumate <jeff@catapulsion.net>2012-02-22 20:37:08 -0700
committerJeff Shumate <jeff@catapulsion.net>2012-02-22 20:37:08 -0700
commit4f0b5f8223426644924807fc38f86ec245f4827b (patch)
tree28f4f4f2e59ea65e6c68adf416fa8220e1404a01
parent45cad84f4986ec9a1d78a5ced1a842f7a9048b5d (diff)
downloadrefinerycms-blog-4f0b5f8223426644924807fc38f86ec245f4827b.tar.gz
refinerycms-blog-4f0b5f8223426644924807fc38f86ec245f4827b.tar.bz2
refinerycms-blog-4f0b5f8223426644924807fc38f86ec245f4827b.zip
add popularity counter to blog posts as well as accessor for recent posts
-rw-r--r--app/controllers/refinery/blog/posts_controller.rb2
-rw-r--r--app/models/refinery/blog/post.rb8
-rw-r--r--db/migrate/20120223022021_add_access_count_to_posts.rb8
-rw-r--r--spec/requests/refinery/blog/posts_spec.rb36
4 files changed, 53 insertions, 1 deletions
diff --git a/app/controllers/refinery/blog/posts_controller.rb b/app/controllers/refinery/blog/posts_controller.rb
index abd60f4..3309024 100644
--- a/app/controllers/refinery/blog/posts_controller.rb
+++ b/app/controllers/refinery/blog/posts_controller.rb
@@ -23,6 +23,8 @@ module Refinery
@comment = Comment.new
@canonical = url_for(:locale => ::Refinery::I18n.default_frontend_locale) if canonical?
+
+ @post.increment!(:access_count,1)
respond_with (@post) do |format|
format.html { present(@post) }
diff --git a/app/models/refinery/blog/post.rb b/app/models/refinery/blog/post.rb
index 822ddf7..d114dff 100644
--- a/app/models/refinery/blog/post.rb
+++ b/app/models/refinery/blog/post.rb
@@ -78,6 +78,14 @@ module Refinery
def live
where( "published_at <= ? and draft = ?", Time.now, false)
end
+
+ def recent(count)
+ where("published_at <= ? and draft = ?", Time.now, false).limit(count)
+ end
+
+ def popular(count)
+ unscoped.order("access_count DESC").limit(count)
+ end
def previous(item)
where(["published_at < ? and draft = ?", item.published_at, false]).limit(1)
diff --git a/db/migrate/20120223022021_add_access_count_to_posts.rb b/db/migrate/20120223022021_add_access_count_to_posts.rb
new file mode 100644
index 0000000..02cd131
--- /dev/null
+++ b/db/migrate/20120223022021_add_access_count_to_posts.rb
@@ -0,0 +1,8 @@
+class AddAccessCountToPosts < ActiveRecord::Migration
+ def change
+ add_column Refinery::Blog::Post.table_name, :access_count, :integer, :default => 0
+
+ add_index Refinery::Blog::Post.table_name, :access_count
+
+ end
+end \ No newline at end of file
diff --git a/spec/requests/refinery/blog/posts_spec.rb b/spec/requests/refinery/blog/posts_spec.rb
index 815ca26..6f34cb9 100644
--- a/spec/requests/refinery/blog/posts_spec.rb
+++ b/spec/requests/refinery/blog/posts_spec.rb
@@ -101,8 +101,42 @@ module Refinery
comment.body.should eq(body)
end
end
+
+ context "post popular" do
+ let(:blog_post) { FactoryGirl.create(:blog_post) }
+ let(:blog_post2) { FactoryGirl.create(:blog_post) }
+
+ before do
+ visit refinery.blog_post_path(blog_post)
+ end
+
+ it "should increment access count" do
+ blog_post.reload.access_count.should eq(1)
+ visit refinery.blog_post_path(blog_post)
+ blog_post.reload.access_count.should eq(2)
+ end
+
+ it "should be most popular" do
+ Refinery::Blog::Post.popular(2).first.should eq(blog_post)
+ end
+ end
+
+ context "post recent" do
+ let(:blog_post) { FactoryGirl.create(:blog_post) }
+ let(:blog_post2) { FactoryGirl.create(:blog_post) }
+
+ before do
+ visit refinery.blog_post_path(blog_post2)
+ visit refinery.blog_post_path(blog_post)
+ end
+
+ it "should be the most recent" do
+ Refinery::Blog::Post.recent(2).first.should eq(blog_post2)
+ end
+ end
+
end
-
+
describe "#show draft preview" do
let(:blog_post) { FactoryGirl.create(:blog_post_draft) }
context "when logged in as admin" do