diff options
author | Kamil Trzcinski <ayufan@ayufan.eu> | 2015-08-03 11:30:02 +0200 |
---|---|---|
committer | Kamil Trzcinski <ayufan@ayufan.eu> | 2015-08-03 13:37:35 +0200 |
commit | 96b84e4cb99df7703f52f472b40ce6328f433465 (patch) | |
tree | 73635fc2e711e8244668d7390df883471fca33bb | |
parent | 9cf47eb6ee0dbd7ab5ce40b76a8cdb22253ec907 (diff) | |
download | gitlab-ci-96b84e4cb99df7703f52f472b40ce6328f433465.tar.gz |
Use avatars from GitLab
Rewrite Gravatar URLs if needed in order to have images in different size
-rw-r--r-- | app/assets/stylesheets/generic/avatar.scss | 29 | ||||
-rw-r--r-- | app/assets/stylesheets/main/variables.scss | 5 | ||||
-rw-r--r-- | app/helpers/application_helper.rb | 12 | ||||
-rw-r--r-- | app/helpers/user_helper.rb | 13 | ||||
-rw-r--r-- | app/views/layouts/_nav.html.haml | 2 | ||||
-rw-r--r-- | app/views/user_sessions/show.html.haml | 2 | ||||
-rw-r--r-- | config/application.yml.example | 5 | ||||
-rw-r--r-- | config/initializers/1_settings.rb | 8 | ||||
-rw-r--r-- | spec/helpers/application_helper_spec.rb | 54 | ||||
-rw-r--r-- | spec/helpers/user_helper_spec.rb | 49 |
10 files changed, 98 insertions, 81 deletions
diff --git a/app/assets/stylesheets/generic/avatar.scss b/app/assets/stylesheets/generic/avatar.scss new file mode 100644 index 0000000..fc0914c --- /dev/null +++ b/app/assets/stylesheets/generic/avatar.scss @@ -0,0 +1,29 @@ +.avatar { + float: left; + margin-right: 12px; + width: 40px; + height: 40px; + padding: 0; + @include border-radius($avatar_radius); + + &.avatar-inline { + float: none; + margin-left: 4px; + margin-bottom: 2px; + + &.s16 { margin-right: 4px; } + &.s24 { margin-right: 4px; } + } + + &.avatar-tile { + @include border-radius(0px); + } + + &.s16 { width: 16px; height: 16px; margin-right: 6px; } + &.s24 { width: 24px; height: 24px; margin-right: 8px; } + &.s26 { width: 26px; height: 26px; margin-right: 8px; } + &.s32 { width: 32px; height: 32px; margin-right: 10px; } + &.s60 { width: 60px; height: 60px; margin-right: 12px; } + &.s90 { width: 90px; height: 90px; margin-right: 15px; } + &.s160 { width: 160px; height: 160px; margin-right: 20px; } +} diff --git a/app/assets/stylesheets/main/variables.scss b/app/assets/stylesheets/main/variables.scss index bd79ca3..a8c672a 100644 --- a/app/assets/stylesheets/main/variables.scss +++ b/app/assets/stylesheets/main/variables.scss @@ -37,3 +37,8 @@ $border_warning: #EB9532; $font-size-base: 13px !default; $nav-pills-active-link-hover-bg: $bg_style_color; $pagination-active-bg: $bg_style_color; + +/** + * Avatar variables + */ +$avatar_radius: 50%; diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 8eeb409..297ee5b 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -3,18 +3,6 @@ module ApplicationHelper image_tag 'loader.gif', alt: 'Loading' end - def gravatar_icon(user_email = '', size = nil) - size = 40 if size.nil? || size <= 0 - - if !GitlabCi.config.gravatar.enabled || user_email.blank? - 'no_avatar.png' - else - gravatar_url = request.ssl? || GitlabCi.config.gitlab_ci.https ? GitlabCi.config.gravatar.ssl_url : GitlabCi.config.gravatar.plain_url - - user_email.strip! - sprintf gravatar_url, hash: Digest::MD5.hexdigest(user_email.downcase), size: size - end - end # Navigation link helper # # Returns an `li` element with an 'active' class if the supplied diff --git a/app/helpers/user_helper.rb b/app/helpers/user_helper.rb new file mode 100644 index 0000000..7fa0c9c --- /dev/null +++ b/app/helpers/user_helper.rb @@ -0,0 +1,13 @@ +module UserHelper + def user_avatar_url(user = nil, size = nil, default = 'identicon') + size = 40 if size.nil? || size <= 0 + + if user.blank? || user.avatar_url.blank? + 'no_avatar.png' + elsif /^(http(s?):\/\/(www|secure)\.gravatar\.com\/avatar\/(\w*))/ =~ user.avatar_url + Regexp.last_match[0] + "?s=#{size}&d=#{default}" + else + user.avatar_url + end + end +end diff --git a/app/views/layouts/_nav.html.haml b/app/views/layouts/_nav.html.haml index d571716..636485a 100644 --- a/app/views/layouts/_nav.html.haml +++ b/app/views/layouts/_nav.html.haml @@ -21,7 +21,7 @@ %li = link_to user_sessions_path do .profile-holder - = image_tag gravatar_icon(current_user.email, 64), alt: '' + = image_tag user_avatar_url(current_user, 64), class: 'avatar s32', alt: '' %span= current_user.name %li = link_to user_sessions_path, class: "logout", method: :delete do diff --git a/app/views/user_sessions/show.html.haml b/app/views/user_sessions/show.html.haml index 0faf2f7..43f64a4 100644 --- a/app/views/user_sessions/show.html.haml +++ b/app/views/user_sessions/show.html.haml @@ -1,4 +1,4 @@ -= image_tag gravatar_icon(current_user.email, 120), class: 'img-polaroid', alt: '' += image_tag user_avatar_url(current_user, 90), class: 'avatar avatar-inline avatar-tile s90', alt: '' %h3 Hi, #{@user.name} diff --git a/config/application.yml.example b/config/application.yml.example index d86f68b..dd33daa 100644 --- a/config/application.yml.example +++ b/config/application.yml.example @@ -32,11 +32,6 @@ defaults: &defaults # The location where build traces are stored (default: builds/). Relative paths are relative to Rails.root # builds_path: builds/ - gravatar: - enabled: true - plain_url: "http://www.gravatar.com/avatar/%{hash}?s=%{size}&d=mm" - ssl_url: "https://secure.gravatar.com/avatar/%{hash}?s=%{size}&d=mm" - ## Backup settings backup: path: "tmp/backups" # Relative paths are relative to Rails.root (default: tmp/backups/) diff --git a/config/initializers/1_settings.rb b/config/initializers/1_settings.rb index bd44569..f344685 100644 --- a/config/initializers/1_settings.rb +++ b/config/initializers/1_settings.rb @@ -46,14 +46,6 @@ Settings.gitlab_ci['builds_path'] = File.expand_path(Settings.gitlab_ci[ Settings['gitlab_server_urls'] ||= Settings['allowed_gitlab_urls'] # -# Gravatar -# -Settings['gravatar'] ||= Settingslogic.new({}) -Settings.gravatar['enabled'] = true if Settings.gravatar['enabled'].nil? -Settings.gravatar['plain_url'] ||= 'http://www.gravatar.com/avatar/%{hash}?s=%{size}&d=mm' -Settings.gravatar['ssl_url'] ||= 'https://secure.gravatar.com/avatar/%{hash}?s=%{size}&d=mm' - -# # Backup # Settings['backup'] ||= Settingslogic.new({}) diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb index 984becf..c2b1058 100644 --- a/spec/helpers/application_helper_spec.rb +++ b/spec/helpers/application_helper_spec.rb @@ -1,60 +1,6 @@ require 'spec_helper' describe ApplicationHelper do - describe "gravatar_icon" do - let(:user_email) { 'user@email.com' } - - it "should return a generic avatar path when Gravatar is disabled" do - GitlabCi.config.gravatar.stub(:enabled).and_return(false) - gravatar_icon(user_email).should == 'no_avatar.png' - end - - it "should return a generic avatar path when email is blank" do - gravatar_icon('').should == 'no_avatar.png' - end - - context "with no ssl" do - let!(:request) { - request_double = double("Request") - request_double.stub(:ssl?).and_return(false) - request_double - } - - it "should return default gravatar url" do - gravatar_icon(user_email).should match('http://www.gravatar.com/avatar/b58c6f14d292556214bd64909bcdb118') - end - - it "should return custom gravatar path when gravatar_url is set" do - GitlabCi.config.gravatar.stub(:plain_url).and_return('http://example.local/?s=%{size}&hash=%{hash}') - gravatar_icon(user_email, 20).should == 'http://example.local/?s=20&hash=b58c6f14d292556214bd64909bcdb118' - end - - it "should accept a custom size" do - gravatar_icon(user_email, 64).should match(/\?s=64/) - end - - it "should use default size when size is wrong" do - gravatar_icon(user_email, nil).should match(/\?s=40/) - end - - it "should be case insensitive" do - gravatar_icon(user_email).should == gravatar_icon(user_email.upcase + " ") - end - end - - context "with ssl" do - let!(:request) { - request_double = double("Request") - request_double.stub(:ssl?).and_return(true) - request_double - } - - it "should use SSL when appropriate" do - gravatar_icon(user_email).should match('https://secure.gravatar.com') - end - end - end - describe "#duration_in_words" do it "returns minutes and seconds" do intervals_in_words = { diff --git a/spec/helpers/user_helper_spec.rb b/spec/helpers/user_helper_spec.rb new file mode 100644 index 0000000..8687820 --- /dev/null +++ b/spec/helpers/user_helper_spec.rb @@ -0,0 +1,49 @@ +require 'spec_helper' + +describe UserHelper do + describe :user_avatar_url do + let (:user) { User.new({'avatar_url' => avatar_url}) } + + context 'no avatar' do + let (:avatar_url) { nil } + + it 'should return a generic avatar' do + user_avatar_url(user).should == 'no_avatar.png' + end + end + + context 'plain gravatar' do + let (:base_url) { 'http://www.gravatar.com/avatar/abcdefgh' } + let (:avatar_url) { "#{base_url}?s=40&d=mm" } + + it 'should return gravatar with default size' do + user_avatar_url(user).should == "#{base_url}?s=40&d=identicon" + end + + it 'should return gravatar with custom size' do + user_avatar_url(user, 120).should == "#{base_url}?s=120&d=identicon" + end + end + + context 'secure gravatar' do + let (:base_url) { 'https://secure.gravatar.com/avatar/abcdefgh' } + let (:avatar_url) { "#{base_url}?s=40&d=mm" } + + it 'should return gravatar with default size' do + user_avatar_url(user).should == "#{base_url}?s=40&d=identicon" + end + + it 'should return gravatar with custom size' do + user_avatar_url(user, 120).should == "#{base_url}?s=120&d=identicon" + end + end + + context 'custom avatar' do + let (:avatar_url) { 'http://example.local/avatar.png' } + + it 'should return custom avatar' do + user_avatar_url(user).should == avatar_url + end + end + end +end |