Merge pull request #295 from AyuntamientoMadrid/cache

Adds cache to debates/index
This commit is contained in:
Raimond Garcia
2015-08-31 20:57:11 +02:00
11 changed files with 100 additions and 54 deletions

View File

@@ -41,6 +41,7 @@ gem 'initialjs-rails', '0.2.0'
gem 'unicorn'
gem 'paranoia'
gem 'savon'
gem 'dalli'
gem 'ahoy_matey', '~> 1.2.1'
gem 'groupdate' # group temporary data

View File

@@ -111,6 +111,7 @@ GEM
simplecov (~> 0.10.0)
term-ansicolor (~> 1.3)
thor (~> 0.19.1)
dalli (2.7.4)
database_cleaner (1.4.1)
debug_inspector (0.0.2)
devise (3.5.2)
@@ -402,6 +403,7 @@ DEPENDENCIES
ckeditor
coffee-rails (~> 4.1.0)
coveralls
dalli
database_cleaner
devise
email_spec

View File

@@ -0,0 +1,16 @@
module CacheKeysHelper
def locale_and_user_status
@cache_key_user ||= calculate_user_status
"#{I18n.locale}/user:#{@cache_key_user}"
end
def calculate_user_status
user_status = if user_signed_in? && current_user.verified_at.present?
"verified"
elsif user_signed_in?
"signed"
else
"visitor"
end
end
end

View File

@@ -1,28 +1,30 @@
<div id="<%= dom_id(debate) %>" class="debate">
<div class="panel">
<div class="row">
<% cache [locale_and_user_status, debate] do %>
<div id="<%= dom_id(debate) %>" class="debate">
<div class="panel">
<div class="row">
<div class="small-12 medium-9 column">
<div class="debate-content">
<span class="label left"><%= t("debates.debate.debate") %></span>
<i class="icon-debates"></i>
<h3><%= link_to debate.title, debate %></h3>
<p class="debate-info">
<i class="icon-comments"></i>&nbsp;
<%= link_to t("debates.debate.comments", count: debate.comments_count), debate_path(debate, anchor: "comments") %>
</p>
<div class="debate-description">
<%= link_to debate.description, debate %>
<div class="truncate"></div>
<div class="small-12 medium-9 column">
<div class="debate-content">
<span class="label left"><%= t("debates.debate.debate") %></span>
<i class="icon-debates"></i>
<h3><%= link_to debate.title, debate %></h3>
<p class="debate-info">
<i class="icon-comments"></i>&nbsp;
<%= link_to t("debates.debate.comments", count: debate.comments_count), debate_path(debate, anchor: "comments") %>
</p>
<div class="debate-description">
<%= link_to debate.description, debate %>
<div class="truncate"></div>
</div>
<%= render "shared/tags", debate: debate, limit: 5 %>
</div>
<%= render "shared/tags", debate: debate, limit: 5 %>
</div>
</div>
<div id="<%= dom_id(debate) %>_votes" class="small-12 medium-3 column text-center">
<%= render 'debates/votes', debate: debate %>
</div>
<div id="<%= dom_id(debate) %>_votes" class="small-12 medium-3 column text-center">
<%= render 'debates/votes', debate: debate %>
</div>
</div>
</div>
</div>
</div>
<% end %>

View File

@@ -1,28 +1,30 @@
<div class="small-12 medium-4 column">
<div id="<%= dom_id featured_debate %>" class="debate-featured">
<div class="panel">
<% cache [locale_and_user_status, featured_debate, 'featured'] do %>
<div class="small-12 medium-4 column">
<div id="<%= dom_id featured_debate %>" class="debate-featured">
<div class="panel">
<div class="debate-content">
<span class="label left"><%= t("debates.debate.debate") %></span>
<i class="icon-debates right"></i>
<h3><%= link_to featured_debate.title, featured_debate %></h3>
<p class="debate-info">
<i class="icon-comments"></i>&nbsp;
<%= link_to t("debates.show.comments", count: featured_debate.comments_count), debate_path(featured_debate, anchor: "comments") %>
</p>
<div class="debate-description">
<%= link_to featured_debate.description, featured_debate %>
<div class="truncate"></div>
<div class="debate-content">
<span class="label left"><%= t("debates.debate.debate") %></span>
<i class="icon-debates right"></i>
<h3><%= link_to featured_debate.title, featured_debate %></h3>
<p class="debate-info">
<i class="icon-comments"></i>&nbsp;
<%= link_to t("debates.show.comments", count: featured_debate.comments_count), debate_path(featured_debate, anchor: "comments") %>
</p>
<div class="debate-description">
<%= link_to featured_debate.description, featured_debate %>
<div class="truncate"></div>
</div>
<%= render "shared/tags", debate: featured_debate, limit: 5 %>
</div>
<%= render "shared/tags", debate: featured_debate, limit: 5 %>
</div>
<div class="row">
<div id="<%= dom_id(featured_debate) %>_votes" class="small-12 column">
<%= render 'debates/votes', debate: featured_debate %>
<div class="row">
<div id="<%= dom_id(featured_debate) %>_votes" class="small-12 column">
<%= render 'debates/votes', debate: featured_debate %>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<% end %>

View File

@@ -1,10 +1,12 @@
<section role="main">
<div class="filters row">
<div class="small-12 column">
<h2><%= t("welcome.last_debates") %></h2>
<% cache [locale_and_user_status, @featured_debates, 'featured'] do %>
<section role="main">
<div class="filters row">
<div class="small-12 column">
<h2><%= t("welcome.last_debates") %></h2>
</div>
</div>
</div>
<div id="featured-debates" class="row">
<%= render partial: "featured_debate", collection: @featured_debates %>
</div>
</section>
<div id="featured-debates" class="row">
<%= render partial: "featured_debate", collection: @featured_debates %>
</div>
</section>
<% end %>

View File

@@ -44,7 +44,7 @@ Rails.application.configure do
# Raises error for missing translations
# config.action_view.raise_on_missing_translations = true
config.cache_store = :null_store
config.cache_store = :dalli_store
config.after_initialize do
Bullet.enable = true

View File

@@ -55,7 +55,7 @@ Rails.application.configure do
# config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)
# Use a different cache store in production.
config.cache_store = :null_store
config.cache_store = :dalli_store
# Enable serving of images, stylesheets, and JavaScripts from an asset server.
# config.action_controller.asset_host = 'http://assets.example.com'

View File

@@ -55,7 +55,7 @@ Rails.application.configure do
# config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)
# Use a different cache store in production.
config.cache_store = :null_store
config.cache_store = :dalli_store
# Enable serving of images, stylesheets, and JavaScripts from an asset server.
# config.action_controller.asset_host = 'http://assets.example.com'

View File

@@ -1 +1,8 @@
ActsAsTaggableOn::Tagging.class_eval do
after_destroy :touch_taggable
def touch_taggable
taggable.touch
end
end

14
spec/lib/cache_spec.rb Normal file
View File

@@ -0,0 +1,14 @@
require 'rails_helper'
describe 'Cache flow' do
describe 'Tag destroy' do
it 'invalidates Debate cache keys' do
debate = create(:debate, tag_list: "Good, Bad")
tag = ActsAsTaggableOn::Tag.find_by(name: "Bad")
expect{tag.destroy}.to change {debate.reload.cache_key}
end
end
end