From 5d3a44ae0c5ba0f6c8cd050dbf6dad365a8dd3b8 Mon Sep 17 00:00:00 2001 From: Skud Date: Wed, 14 Aug 2013 11:47:09 +1000 Subject: [PATCH] cache stats and member thumbnails on homepage --- app/controllers/crops_controller.rb | 2 ++ app/controllers/gardens_controller.rb | 3 +++ app/controllers/members_controller.rb | 3 +++ app/controllers/registrations_controller.rb | 3 ++- app/models/crop_sweeper.rb | 13 ++++++++++ app/models/garden_sweeper.rb | 12 +++++++++ app/models/member_sweeper.rb | 13 ++++++++++ app/models/planting_sweeper.rb | 13 +++------- app/views/home/_stats.html.haml | 19 ++++++++------- app/views/members/_thumbnail.html.haml | 27 +++++++++++---------- config/environments/development.rb | 2 +- 11 files changed, 76 insertions(+), 34 deletions(-) create mode 100644 app/models/crop_sweeper.rb create mode 100644 app/models/garden_sweeper.rb create mode 100644 app/models/member_sweeper.rb diff --git a/app/controllers/crops_controller.rb b/app/controllers/crops_controller.rb index 26a3de663..a1fa97914 100644 --- a/app/controllers/crops_controller.rb +++ b/app/controllers/crops_controller.rb @@ -1,6 +1,8 @@ class CropsController < ApplicationController load_and_authorize_resource + cache_sweeper :crop_sweeper + # GET /crops # GET /crops.json def index diff --git a/app/controllers/gardens_controller.rb b/app/controllers/gardens_controller.rb index a349f9326..e77c22a1b 100644 --- a/app/controllers/gardens_controller.rb +++ b/app/controllers/gardens_controller.rb @@ -1,5 +1,8 @@ class GardensController < ApplicationController load_and_authorize_resource + + cache_sweeper :garden_sweeper + # GET /gardens # GET /gardens.json def index diff --git a/app/controllers/members_controller.rb b/app/controllers/members_controller.rb index cdf9e5977..9f378e727 100644 --- a/app/controllers/members_controller.rb +++ b/app/controllers/members_controller.rb @@ -1,5 +1,8 @@ class MembersController < ApplicationController load_and_authorize_resource + + cache_sweeper :member_sweeper + skip_authorize_resource :only => :nearby def index diff --git a/app/controllers/registrations_controller.rb b/app/controllers/registrations_controller.rb index 2be1c9c33..815457201 100644 --- a/app/controllers/registrations_controller.rb +++ b/app/controllers/registrations_controller.rb @@ -1,6 +1,7 @@ - class RegistrationsController < Devise::RegistrationsController + cache_sweeper :member_sweeper + def edit @twitter_auth = current_member.auth('twitter') @flickr_auth = current_member.auth('flickr') diff --git a/app/models/crop_sweeper.rb b/app/models/crop_sweeper.rb new file mode 100644 index 000000000..fdf234058 --- /dev/null +++ b/app/models/crop_sweeper.rb @@ -0,0 +1,13 @@ +class CropSweeper < ActionController::Caching::Sweeper + observe Crop + + def after_create(crop) + expire_fragment('homepage_stats') + end + + def after_destroy(crop) + expire_fragment('homepage_stats') + end + +end + diff --git a/app/models/garden_sweeper.rb b/app/models/garden_sweeper.rb new file mode 100644 index 000000000..a504207c4 --- /dev/null +++ b/app/models/garden_sweeper.rb @@ -0,0 +1,12 @@ +class GardenSweeper < ActionController::Caching::Sweeper + observe Garden + + def after_create(garden) + expire_fragment('homepage_stats') + end + + def after_destroy(garden) + expire_fragment('homepage_stats') + end +end + diff --git a/app/models/member_sweeper.rb b/app/models/member_sweeper.rb new file mode 100644 index 000000000..1bce607a6 --- /dev/null +++ b/app/models/member_sweeper.rb @@ -0,0 +1,13 @@ +class MemberSweeper < ActionController::Caching::Sweeper + observe Member + + def after_create(member) + expire_fragment('homepage_stats') + end + + def after_update(member) + expire_fragment("member_thumbnail_#{member.slug}") + end + +end + diff --git a/app/models/planting_sweeper.rb b/app/models/planting_sweeper.rb index a2b259bf9..1952f56fe 100644 --- a/app/models/planting_sweeper.rb +++ b/app/models/planting_sweeper.rb @@ -2,20 +2,13 @@ class PlantingSweeper < ActionController::Caching::Sweeper observe Planting def after_create(planting) - expire_cache_for(planting) - end - - def after_update(planting) - expire_cache_for(planting) + expire_fragment('homepage_stats') + expire_fragment("member_thumbnail_#{planting.owner.slug}") end def after_destroy(planting) - expire_cache_for(planting) + expire_fragment('homepage_stats') end - private - def expire_cache_for(planting) - expire_fragment('recent_plantings') - end end diff --git a/app/views/home/_stats.html.haml b/app/views/home/_stats.html.haml index 9981fe67b..8b1cbb7cb 100644 --- a/app/views/home/_stats.html.haml +++ b/app/views/home/_stats.html.haml @@ -1,9 +1,10 @@ -%p.stats - So far, - = link_to "#{@member_count.to_i} members", members_path - have planted - = link_to "#{@crop_count.to_i} crops", crops_path - = link_to "#{@planting_count.to_i} times", plantings_path - in - = succeed "." do - = link_to "#{@garden_count.to_i} gardens", gardens_path +- cache("homepage_stats") do + %p.stats + So far, + = link_to "#{@member_count.to_i} members", members_path + have planted + = link_to "#{@crop_count.to_i} crops", crops_path + = link_to "#{@planting_count.to_i} times", plantings_path + in + = succeed "." do + = link_to "#{@garden_count.to_i} gardens", gardens_path diff --git a/app/views/members/_thumbnail.html.haml b/app/views/members/_thumbnail.html.haml index 622777f5d..4a1b12f29 100644 --- a/app/views/members/_thumbnail.html.haml +++ b/app/views/members/_thumbnail.html.haml @@ -1,13 +1,14 @@ -.row-fluid - .span3 - = render :partial => "members/image_with_popover", :locals => { :member => member } - .span9 - %p - = link_to member.login_name, member - - if ! member.location.blank? - %br/ - %i= member.location - - if ! member.plantings.empty? - %br/ - Recently planted: - != member.plantings.first(3).map{|p| link_to p.crop_system_name, p }.join(", ") +- cache "member_thumbnail_#{member.slug}" do + .row-fluid + .span3 + = render :partial => "members/image_with_popover", :locals => { :member => member } + .span9 + %p + = link_to member.login_name, member + - if ! member.location.blank? + %br/ + %i= member.location + - if ! member.plantings.empty? + %br/ + Recently planted: + != member.plantings.first(3).map{|p| link_to p.crop_system_name, p }.join(", ") diff --git a/config/environments/development.rb b/config/environments/development.rb index 50f3b1b96..211170993 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -13,7 +13,7 @@ Growstuff::Application.configure do config.consider_all_requests_local = true # cache for testing/experimentation - turn off for normal dev use - config.action_controller.perform_caching = false + config.action_controller.perform_caching = true config.cache_store = :memory_store # Don't care if the mailer can't send