Commit e518917e097e48dd029f6c4c0cdd21cdbf355ad4
Exists in
colab
and in
2 other branches
Merge pull request #345 from mezuro/fix_home_cache
Fix home page latest content cache efectiveness
Showing
9 changed files
with
78 additions
and
21 deletions
Show diff stats
CHANGELOG.rdoc
@@ -16,6 +16,7 @@ Prezento is the web interface for Mezuro. | @@ -16,6 +16,7 @@ Prezento is the web interface for Mezuro. | ||
16 | * Fix 'Tree Metrics' and 'Hotspot Metrics' PT translations in Configuration show view | 16 | * Fix 'Tree Metrics' and 'Hotspot Metrics' PT translations in Configuration show view |
17 | * Show the notify push url for the repository's owner (Gitlab only) | 17 | * Show the notify push url for the repository's owner (Gitlab only) |
18 | * Support for hiding repositories | 18 | * Support for hiding repositories |
19 | +* Fix home latest content caching effectiveness | ||
19 | 20 | ||
20 | == v0.11.3 - 01/04/2016 | 21 | == v0.11.3 - 01/04/2016 |
21 | 22 |
app/controllers/home_controller.rb
1 | class HomeController < ApplicationController | 1 | class HomeController < ApplicationController |
2 | - def index | ||
3 | - @latest_projects = Project.latest(5) | ||
4 | - @latest_repositories = Repository.latest(5) | ||
5 | - @latest_configurations = KalibroConfiguration.latest(5) | 2 | + helper_method :latest_projects, :latest_repositories, :latest_configurations |
3 | + | ||
4 | + def latest_projects(count) | ||
5 | + Project.latest(count) | ||
6 | + end | ||
7 | + | ||
8 | + def latest_repositories(count) | ||
9 | + Repository.latest(count) | ||
10 | + end | ||
11 | + | ||
12 | + def latest_configurations(count) | ||
13 | + KalibroConfiguration.latest(count) | ||
6 | end | 14 | end |
7 | end | 15 | end |
app/models/kalibro_configuration.rb
@@ -19,6 +19,13 @@ class KalibroConfiguration < KalibroClient::Entities::Configurations::KalibroCon | @@ -19,6 +19,13 @@ class KalibroConfiguration < KalibroClient::Entities::Configurations::KalibroCon | ||
19 | self.public_or_owned_by_user | 19 | self.public_or_owned_by_user |
20 | end | 20 | end |
21 | 21 | ||
22 | + def self.latest(count = 1) | ||
23 | + all.sort { |one, another| another.id <=> one.id }.select { |kalibro_configuration| | ||
24 | + attributes = kalibro_configuration.attributes | ||
25 | + attributes && attributes.public | ||
26 | + }.first(count) | ||
27 | + end | ||
28 | + | ||
22 | def attributes | 29 | def attributes |
23 | @attributes ||= KalibroConfigurationAttributes.find_by(kalibro_configuration_id: self.id) | 30 | @attributes ||= KalibroConfigurationAttributes.find_by(kalibro_configuration_id: self.id) |
24 | end | 31 | end |
@@ -28,8 +35,4 @@ class KalibroConfiguration < KalibroClient::Entities::Configurations::KalibroCon | @@ -28,8 +35,4 @@ class KalibroConfiguration < KalibroClient::Entities::Configurations::KalibroCon | ||
28 | @attributes = nil | 35 | @attributes = nil |
29 | super | 36 | super |
30 | end | 37 | end |
31 | - | ||
32 | - def self.latest(count=1) | ||
33 | - all.sort { |one, another| another.id <=> one.id }.select { |kalibro_configuration| kalibro_configuration.attributes.public }.first(count) | ||
34 | - end | ||
35 | end | 38 | end |
app/models/project.rb
@@ -17,7 +17,10 @@ class Project < KalibroClient::Entities::Processor::Project | @@ -17,7 +17,10 @@ class Project < KalibroClient::Entities::Processor::Project | ||
17 | end | 17 | end |
18 | 18 | ||
19 | def self.latest(count = 1) | 19 | def self.latest(count = 1) |
20 | - all.sort { |a, b| b.id <=> a.id }.select { |project| project.attributes.public }.first(count) | 20 | + all.sort { |one, another| another.id <=> one.id }.select { |project| |
21 | + attributes = project.attributes | ||
22 | + attributes && attributes.public | ||
23 | + }.first(count) | ||
21 | end | 24 | end |
22 | 25 | ||
23 | def attributes | 26 | def attributes |
app/views/home/index.html.erb
@@ -13,7 +13,7 @@ | @@ -13,7 +13,7 @@ | ||
13 | 13 | ||
14 | <ul> | 14 | <ul> |
15 | <% cache action_suffix: 'latest_projects' do %> | 15 | <% cache action_suffix: 'latest_projects' do %> |
16 | - <% @latest_projects.each do |project| %> | 16 | + <% latest_projects(5).each do |project| %> |
17 | <li><%= link_to(project.name, project_path(project.id)) %></li> | 17 | <li><%= link_to(project.name, project_path(project.id)) %></li> |
18 | <% end %> | 18 | <% end %> |
19 | <% end %> | 19 | <% end %> |
@@ -24,7 +24,7 @@ | @@ -24,7 +24,7 @@ | ||
24 | 24 | ||
25 | <ul> | 25 | <ul> |
26 | <% cache action_suffix: 'latest_repositories' do %> | 26 | <% cache action_suffix: 'latest_repositories' do %> |
27 | - <% @latest_repositories.each do |repository| %> | 27 | + <% latest_repositories(5).each do |repository| %> |
28 | <li><%= link_to(repository.name, repository_path(repository.id)) %></li> | 28 | <li><%= link_to(repository.name, repository_path(repository.id)) %></li> |
29 | <% end %> | 29 | <% end %> |
30 | <% end %> | 30 | <% end %> |
@@ -35,7 +35,7 @@ | @@ -35,7 +35,7 @@ | ||
35 | 35 | ||
36 | <ul> | 36 | <ul> |
37 | <% cache action_suffix: 'latest_configurations' do %> | 37 | <% cache action_suffix: 'latest_configurations' do %> |
38 | - <% @latest_configurations.each do |configuration| %> | 38 | + <% latest_configurations(5).each do |configuration| %> |
39 | <li><%= link_to(configuration.name, kalibro_configuration_path(configuration.id)) %></li> | 39 | <li><%= link_to(configuration.name, kalibro_configuration_path(configuration.id)) %></li> |
40 | <% end %> | 40 | <% end %> |
41 | <% end %> | 41 | <% end %> |
features/homepage.feature
@@ -3,9 +3,11 @@ Feature: Homepage | @@ -3,9 +3,11 @@ Feature: Homepage | ||
3 | As a regular user | 3 | As a regular user |
4 | I want to have in one page useful links to manage my account and session | 4 | I want to have in one page useful links to manage my account and session |
5 | 5 | ||
6 | - @kalibro_processor_restart | 6 | + @kalibro_configurations_restart @kalibro_processor_restart |
7 | Scenario: Before signing in | 7 | Scenario: Before signing in |
8 | Given I have a project named "GCC" | 8 | Given I have a project named "GCC" |
9 | + And there is a public configuration created named "Test Configuration" | ||
10 | + And I have a public repository named "Test Repository" | ||
9 | Then I am at the homepage | 11 | Then I am at the homepage |
10 | And I should see "Home" | 12 | And I should see "Home" |
11 | And I should see "Projects" | 13 | And I should see "Projects" |
@@ -19,6 +21,8 @@ Feature: Homepage | @@ -19,6 +21,8 @@ Feature: Homepage | ||
19 | And I should see "Latest repositories" | 21 | And I should see "Latest repositories" |
20 | And I should see "Latest configurations" | 22 | And I should see "Latest configurations" |
21 | Then I should see "GCC" only "1" times | 23 | Then I should see "GCC" only "1" times |
24 | + Then I should see "Test Configuration" only "1" times | ||
25 | + Then I should see "Test Repository" only "1" times | ||
22 | 26 | ||
23 | Scenario: Signed in | 27 | Scenario: Signed in |
24 | Given I am a regular user | 28 | Given I am a regular user |
features/step_definitions/kalibro_configuration_steps.rb
@@ -87,6 +87,12 @@ Given(/^there is a public configuration created$/) do | @@ -87,6 +87,12 @@ Given(/^there is a public configuration created$/) do | ||
87 | FactoryGirl.create(:kalibro_configuration_attributes, kalibro_configuration_id: @public_kc.id) | 87 | FactoryGirl.create(:kalibro_configuration_attributes, kalibro_configuration_id: @public_kc.id) |
88 | end | 88 | end |
89 | 89 | ||
90 | +Given(/^there is a public configuration created named "(.*?)"$/) do |name| | ||
91 | + @kalibro_configuration = FactoryGirl.create(:public_kalibro_configuration, name: name) | ||
92 | + FactoryGirl.create(:kalibro_configuration_attributes, kalibro_configuration_id: @kalibro_configuration.id) | ||
93 | +end | ||
94 | + | ||
95 | + | ||
90 | Given(/^there is a private configuration created$/) do | 96 | Given(/^there is a private configuration created$/) do |
91 | @private_kc = FactoryGirl.create(:another_kalibro_configuration) | 97 | @private_kc = FactoryGirl.create(:another_kalibro_configuration) |
92 | FactoryGirl.create(:kalibro_configuration_attributes, :private, kalibro_configuration_id: @private_kc.id, user: FactoryGirl.create(:another_user, id: nil, email: "private@email.com")) | 98 | FactoryGirl.create(:kalibro_configuration_attributes, :private, kalibro_configuration_id: @private_kc.id, user: FactoryGirl.create(:another_user, id: nil, email: "private@email.com")) |
features/step_definitions/repository_steps.rb
@@ -135,6 +135,15 @@ Given(/^I have a sample configuration with the (\w+) native metric$/) do |metric | @@ -135,6 +135,15 @@ Given(/^I have a sample configuration with the (\w+) native metric$/) do |metric | ||
135 | kalibro_configuration_id: @kalibro_configuration.id}) | 135 | kalibro_configuration_id: @kalibro_configuration.id}) |
136 | end | 136 | end |
137 | 137 | ||
138 | +Given(/^I have a public repository named "(.*?)"$/) do |name| | ||
139 | + @repository = FactoryGirl.create(:repository, | ||
140 | + project_id: nil, | ||
141 | + kalibro_configuration_id: @kalibro_configuration.id, | ||
142 | + id: nil, | ||
143 | + name: name) | ||
144 | + FactoryGirl.create(:repository_attributes, {repository_id: @repository.id}) | ||
145 | +end | ||
146 | + | ||
138 | When(/^I click on the sample metric's name$/) do | 147 | When(/^I click on the sample metric's name$/) do |
139 | find_link(@metric_results.first.metric_configuration.metric.name).trigger('click') | 148 | find_link(@metric_results.first.metric_configuration.metric.name).trigger('click') |
140 | end | 149 | end |
spec/controllers/home_controller_spec.rb
1 | require 'rails_helper' | 1 | require 'rails_helper' |
2 | 2 | ||
3 | describe HomeController, :type => :controller do | 3 | describe HomeController, :type => :controller do |
4 | - context 'Method' do | ||
5 | - context '#index' do | ||
6 | - before :each do | ||
7 | - Project.expects(:latest).with(5).returns([]) | ||
8 | - Repository.expects(:latest).with(5).returns([]) | ||
9 | - KalibroConfiguration.expects(:latest).with(5).returns([]) | ||
10 | - end | ||
11 | - | 4 | + context 'actions' do |
5 | + context 'index' do | ||
12 | describe 'Rendering' do | 6 | describe 'Rendering' do |
13 | before :each do | 7 | before :each do |
14 | get :index | 8 | get :index |
@@ -41,4 +35,33 @@ describe HomeController, :type => :controller do | @@ -41,4 +35,33 @@ describe HomeController, :type => :controller do | ||
41 | end | 35 | end |
42 | end | 36 | end |
43 | end | 37 | end |
38 | + | ||
39 | + context 'helpers' do | ||
40 | + describe 'latest_repositories' do | ||
41 | + let(:repositories) { mock } | ||
42 | + | ||
43 | + it 'should fetch the latest content' do | ||
44 | + Repository.expects(:latest).with(5).returns(repositories) | ||
45 | + expect(subject.latest_repositories(5)).to be(repositories) | ||
46 | + end | ||
47 | + end | ||
48 | + | ||
49 | + describe 'latest_projects' do | ||
50 | + let(:projects) { mock } | ||
51 | + | ||
52 | + it 'should fetch the latest content' do | ||
53 | + Project.expects(:latest).with(5).returns(projects) | ||
54 | + expect(subject.latest_projects(5)).to be(projects) | ||
55 | + end | ||
56 | + end | ||
57 | + | ||
58 | + describe 'latest_configurations' do | ||
59 | + let(:configurations) { mock } | ||
60 | + | ||
61 | + it 'should fetch the latest content' do | ||
62 | + KalibroConfiguration.expects(:latest).with(5).returns(configurations) | ||
63 | + expect(subject.latest_configurations(5)).to be(configurations) | ||
64 | + end | ||
65 | + end | ||
66 | + end | ||
44 | end | 67 | end |