From 38ca52f33b6a6824268f3dc92cf5ca13ad737c20 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Tue, 2 Oct 2012 18:42:39 -0400 Subject: [PATCH 1/2] Use branches.length and tags.length instead of [whatever]_count --- app/views/commits/_head.html.haml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/commits/_head.html.haml b/app/views/commits/_head.html.haml index 26ae32ed..c001c2f7 100644 --- a/app/views/commits/_head.html.haml +++ b/app/views/commits/_head.html.haml @@ -9,12 +9,12 @@ = nav_link(html_options: {class: branches_tab_class}) do = link_to project_repository_path(@project) do Branches - %span.badge= @project.repo.branch_count + %span.badge= @project.branches.length = nav_link(controller: :repositories, action: :tags) do = link_to tags_project_repository_path(@project) do Tags - %span.badge= @project.repo.tag_count + %span.badge= @project.tags.length - if current_controller?(:commits) && current_user.private_token %li.right From 5e3be9cda0e23e2c62a3e3b08791357ce572d998 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Tue, 2 Oct 2012 18:57:13 -0400 Subject: [PATCH 2/2] Cache the value of safe_message Also, just for extra paranoia, only call safe_message once in the decorator methods Adds specs to make sure it still works --- app/decorators/commit_decorator.rb | 22 ++++++++++-------- app/models/commit.rb | 2 +- spec/models/commit_spec.rb | 37 ++++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 10 deletions(-) create mode 100644 spec/models/commit_spec.rb diff --git a/app/decorators/commit_decorator.rb b/app/decorators/commit_decorator.rb index c85f7400..777580a6 100644 --- a/app/decorators/commit_decorator.rb +++ b/app/decorators/commit_decorator.rb @@ -16,13 +16,15 @@ class CommitDecorator < ApplicationDecorator # In case this first line is longer than 80 characters, it is cut off # after 70 characters and ellipses (`&hellp;`) are appended. def title - return no_commit_message if safe_message.blank? + title = safe_message - title_end = safe_message.index(/\n/) - if (!title_end && safe_message.length > 80) || (title_end && title_end > 80) - safe_message[0..69] << "…".html_safe + return no_commit_message if title.blank? + + title_end = title.index(/\n/) + if (!title_end && title.length > 80) || (title_end && title_end > 80) + title[0..69] << "…".html_safe else - safe_message.split(/\n/, 2).first + title.split(/\n/, 2).first end end @@ -30,11 +32,13 @@ class CommitDecorator < ApplicationDecorator # # cut off, ellipses (`&hellp;`) are prepended to the commit message. def description - title_end = safe_message.index(/\n/) - if (!title_end && safe_message.length > 80) || (title_end && title_end > 80) - "…".html_safe << safe_message[70..-1] + description = safe_message + + title_end = description.index(/\n/) + if (!title_end && description.length > 80) || (title_end && title_end > 80) + "…".html_safe << description[70..-1] else - safe_message.split(/\n/, 2)[1].try(:chomp) + description.split(/\n/, 2)[1].try(:chomp) end end diff --git a/app/models/commit.rb b/app/models/commit.rb index aba21762..a070e830 100644 --- a/app/models/commit.rb +++ b/app/models/commit.rb @@ -107,7 +107,7 @@ class Commit end def safe_message - utf8 message + @safe_message ||= utf8 message end def created_at diff --git a/spec/models/commit_spec.rb b/spec/models/commit_spec.rb new file mode 100644 index 00000000..e4bc1936 --- /dev/null +++ b/spec/models/commit_spec.rb @@ -0,0 +1,37 @@ +require 'spec_helper' + +describe Commit do + let(:commit) { create(:project).commit } + + describe CommitDecorator do + let(:decorator) { CommitDecorator.new(commit) } + + describe '#title' do + it "returns no_commit_message when safe_message is blank" do + decorator.stub(:safe_message).and_return('') + decorator.title.should == "--no commit message" + end + + it "truncates a message without a newline at 70 characters" do + message = commit.safe_message * 10 + + decorator.stub(:safe_message).and_return(message) + decorator.title.should == "#{message[0..69]}…" + end + + it "truncates a message with a newline before 80 characters at the newline" do + message = commit.safe_message.split(" ").first + + decorator.stub(:safe_message).and_return(message + "\n" + message) + decorator.title.should == message + end + + it "truncates a message with a newline after 80 characters at 70 characters" do + message = (commit.safe_message * 10) + "\n" + + decorator.stub(:safe_message).and_return(message) + decorator.title.should == "#{message[0..69]}…" + end + end + end +end