Refactor profile link helpers and decorators
parent
df8da8d6d0
commit
e2e117ce84
@ -0,0 +1,24 @@
|
||||
module AvatarHelper
|
||||
|
||||
def avatar_image_tag
|
||||
h.image_tag avatar_url, alt: model.nickname, class: 'avatar'
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def avatar_url
|
||||
gravatar_url || model.avatar_url || default_avatar_filename
|
||||
end
|
||||
|
||||
def gravatar_url
|
||||
return unless model.email.present?
|
||||
|
||||
hash = Digest::MD5.hexdigest(model.email.to_s.downcase)
|
||||
"//gravatar.com/avatar/#{hash}?s=128"
|
||||
end
|
||||
|
||||
def default_avatar_filename
|
||||
h.image_path "default_avatar.png"
|
||||
end
|
||||
|
||||
end
|
@ -0,0 +1,42 @@
|
||||
require 'spec_helper'
|
||||
|
||||
describe AvatarHelper do
|
||||
|
||||
def expected_img(src)
|
||||
%(<img alt="satyr" class="avatar" src="#{src}" />)
|
||||
end
|
||||
|
||||
let(:decorator) { double('decorator', h: h, model: model).
|
||||
extend(described_class) }
|
||||
let(:model) { double('model', nickname: 'satyr', avatar_url: avatar_url,
|
||||
email: email) }
|
||||
|
||||
describe '#avatar_image_tag' do
|
||||
subject { decorator.avatar_image_tag }
|
||||
|
||||
context "when user has an avatar_url" do
|
||||
let(:avatar_url) { 'http://avatar/url' }
|
||||
|
||||
context "and user has an email" do
|
||||
let(:email) { 'foo@email.com' }
|
||||
|
||||
it { should eq(expected_img(
|
||||
'//gravatar.com/avatar/9dcfeb70fe212ea12562dddd22b0fc92?s=128')) }
|
||||
end
|
||||
|
||||
context "and user has no email" do
|
||||
let(:email) { nil }
|
||||
|
||||
it { should eq(expected_img("http://avatar/url")) }
|
||||
end
|
||||
end
|
||||
|
||||
context "when user has neither email nor avatar_url" do
|
||||
let(:email) { nil }
|
||||
let(:avatar_url) { nil }
|
||||
|
||||
it { should eq(expected_img('/assets/default_avatar.png')) }
|
||||
end
|
||||
end
|
||||
|
||||
end
|
Loading…
Reference in New Issue