Commit 5e3be9cd authored by Robert Speicher's avatar Robert Speicher

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
parent 38ca52f3
......@@ -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] << "&hellip;".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] << "&hellip;".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)
"&hellip;".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)
"&hellip;".html_safe << description[70..-1]
else
safe_message.split(/\n/, 2)[1].try(:chomp)
description.split(/\n/, 2)[1].try(:chomp)
end
end
......
......@@ -107,7 +107,7 @@ class Commit
end
def safe_message
utf8 message
@safe_message ||= utf8 message
end
def created_at
......
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]}&hellip;"
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]}&hellip;"
end
end
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment