Skip to content

Commit f92bdc5

Browse files
Fix: edit_user_link rendering (#3475)
* Fix: edit_user_link if show_gravatar is e.g. `false`, "false" becomes part of the render output sa `false` is not removed on `.compact` if there is no edit-user action to be found, the output was 2 nested spans, which messed up layout. * add spec for edit_user_link fix
1 parent 1fa8486 commit f92bdc5

2 files changed

Lines changed: 44 additions & 10 deletions

File tree

app/helpers/rails_admin/application_helper.rb

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,24 @@ def actions(scope = :all, abstract_model = nil, object = nil)
2020
end
2121

2222
def edit_user_link
23-
return nil unless _current_user.respond_to?(:email)
24-
return nil unless abstract_model = RailsAdmin.config(_current_user.class).abstract_model
25-
26-
content = [
27-
RailsAdmin::Config.show_gravatar && _current_user.email.present? && image_tag("#{request.ssl? ? 'https://secure' : 'http://www'}.gravatar.com/avatar/#{Digest::MD5.hexdigest _current_user.email}?s=30", alt: ''),
28-
content_tag(:span, _current_user.email),
29-
].compact.join.html_safe
30-
if (edit_action = RailsAdmin::Config::Actions.find(:edit, controller: controller, abstract_model: abstract_model, object: _current_user)).try(:authorized?)
31-
link_to content, rails_admin.url_for(action: edit_action.action_name, model_name: abstract_model.to_param, id: _current_user.id, controller: 'rails_admin/main'), class: 'nav-link'
23+
return nil unless _current_user.try(:email).present?
24+
return nil unless (abstract_model = RailsAdmin.config(_current_user.class).abstract_model)
25+
26+
edit_action = action(:edit, abstract_model, _current_user)
27+
authorized = edit_action.try(:authorized?)
28+
content = edit_user_link_label
29+
30+
if authorized
31+
edit_url = rails_admin.url_for(
32+
action_name: edit_action.action_name,
33+
model_name: abstract_model.to_param,
34+
controller: 'rails_admin/main',
35+
id: _current_user.id,
36+
)
37+
38+
link_to content, edit_url, class: 'nav-link'
3239
else
33-
content_tag :span, content
40+
content_tag :span, content, class: 'nav-link'
3441
end
3542
end
3643

@@ -206,5 +213,20 @@ def handle_asset_dependency_error
206213
end
207214
raise e
208215
end
216+
217+
private
218+
219+
def edit_user_link_label
220+
[
221+
RailsAdmin::Config.show_gravatar &&
222+
image_tag(gravatar_url(_current_user.email), alt: ''),
223+
224+
content_tag(:span, _current_user.email),
225+
].filter(&:present?).join.html_safe
226+
end
227+
228+
def gravatar_url(email)
229+
"https://secure.gravatar.com/avatar/#{Digest::MD5.hexdigest email}?s=30"
230+
end
209231
end
210232
end

spec/helpers/rails_admin/application_helper_spec.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -502,6 +502,18 @@
502502
expect(result).to include(user.email)
503503
expect(result).not_to match('href')
504504
end
505+
506+
it 'without gravatar and email without a link' do
507+
RailsAdmin.config do |config|
508+
config.show_gravatar = false
509+
end
510+
511+
result = helper.edit_user_link
512+
expect(result).not_to include('gravatar')
513+
expect(result).not_to match('href')
514+
expect(result).to include(user.email)
515+
expect(result).to match("<span class=\"nav-link\"><span>#{user.email}</span></span>")
516+
end
505517
end
506518
end
507519
end

0 commit comments

Comments
 (0)