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
This commit is contained in:
parent
38ca52f33b
commit
5e3be9cda0
|
@ -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
|
||||
|
||||
|
|
|
@ -107,7 +107,7 @@ class Commit
|
|||
end
|
||||
|
||||
def safe_message
|
||||
utf8 message
|
||||
@safe_message ||= utf8 message
|
||||
end
|
||||
|
||||
def created_at
|
||||
|
|
37
spec/models/commit_spec.rb
Normal file
37
spec/models/commit_spec.rb
Normal file
|
@ -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
|
Loading…
Reference in a new issue