Commit 1993a444 authored by gfyoung's avatar gfyoung

Enable frozen string for app/helpers/**/*.rb

Partially addresses #47424.
parent 07d5ee36
# frozen_string_literal: true
module AccountsHelper module AccountsHelper
def incoming_email_token_enabled? def incoming_email_token_enabled?
current_user.incoming_email_token && Gitlab::IncomingEmail.supports_issue_creation? current_user.incoming_email_token && Gitlab::IncomingEmail.supports_issue_creation?
......
# frozen_string_literal: true
module ActiveSessionsHelper module ActiveSessionsHelper
# Maps a device type as defined in `ActiveSession` to an svg icon name and # Maps a device type as defined in `ActiveSession` to an svg icon name and
# outputs the icon html. # outputs the icon html.
......
# frozen_string_literal: true
module AppearancesHelper module AppearancesHelper
def brand_title def brand_title
current_appearance&.title.presence || 'GitLab Community Edition' current_appearance&.title.presence || 'GitLab Community Edition'
......
# frozen_string_literal: true
require 'digest/md5' require 'digest/md5'
require 'uri' require 'uri'
...@@ -106,11 +108,11 @@ def extra_config ...@@ -106,11 +108,11 @@ def extra_config
# #
# Returns an HTML-safe String # Returns an HTML-safe String
def time_ago_with_tooltip(time, placement: 'top', html_class: '', short_format: false) def time_ago_with_tooltip(time, placement: 'top', html_class: '', short_format: false)
css_classes = short_format ? 'js-short-timeago' : 'js-timeago' css_classes = [short_format ? 'js-short-timeago' : 'js-timeago']
css_classes << " #{html_class}" unless html_class.blank? css_classes << html_class unless html_class.blank?
element = content_tag :time, l(time, format: "%b %d, %Y"), element = content_tag :time, l(time, format: "%b %d, %Y"),
class: css_classes, class: css_classes.join(' '),
title: l(time.to_time.in_time_zone, format: :timeago_tooltip), title: l(time.to_time.in_time_zone, format: :timeago_tooltip),
datetime: time.to_time.getutc.iso8601, datetime: time.to_time.getutc.iso8601,
data: { data: {
......
# frozen_string_literal: true
module ApplicationSettingsHelper module ApplicationSettingsHelper
extend self extend self
...@@ -73,12 +75,12 @@ def import_sources_checkboxes(help_block_id, options = {}) ...@@ -73,12 +75,12 @@ def import_sources_checkboxes(help_block_id, options = {})
def oauth_providers_checkboxes def oauth_providers_checkboxes
button_based_providers.map do |source| button_based_providers.map do |source|
disabled = Gitlab::CurrentSettings.disabled_oauth_sign_in_sources.include?(source.to_s) disabled = Gitlab::CurrentSettings.disabled_oauth_sign_in_sources.include?(source.to_s)
css_class = 'btn' css_class = ['btn']
css_class << ' active' unless disabled css_class << 'active' unless disabled
checkbox_name = 'application_setting[enabled_oauth_sign_in_sources][]' checkbox_name = 'application_setting[enabled_oauth_sign_in_sources][]'
name = Gitlab::Auth::OAuth::Provider.label_for(source) name = Gitlab::Auth::OAuth::Provider.label_for(source)
label_tag(checkbox_name, class: css_class) do label_tag(checkbox_name, class: css_class.join(' ')) do
check_box_tag(checkbox_name, source, !disabled, check_box_tag(checkbox_name, source, !disabled,
autocomplete: 'off', autocomplete: 'off',
id: name.tr(' ', '_')) + name id: name.tr(' ', '_')) + name
......
# frozen_string_literal: true
module AuthHelper module AuthHelper
PROVIDERS_WITH_ICONS = %w(twitter github gitlab bitbucket google_oauth2 facebook azure_oauth2 authentiq).freeze PROVIDERS_WITH_ICONS = %w(twitter github gitlab bitbucket google_oauth2 facebook azure_oauth2 authentiq).freeze
LDAP_PROVIDER = /\Aldap/ LDAP_PROVIDER = /\Aldap/
......
# frozen_string_literal: true
module AutoDevopsHelper module AutoDevopsHelper
def show_auto_devops_callout?(project) def show_auto_devops_callout?(project)
Feature.get(:auto_devops_banner_disabled).off? && Feature.get(:auto_devops_banner_disabled).off? &&
......
# frozen_string_literal: true
module AvatarsHelper module AvatarsHelper
def project_icon(project_id, options = {}) def project_icon(project_id, options = {})
source_icon(Project, project_id, options) source_icon(Project, project_id, options)
...@@ -125,9 +127,9 @@ def source_icon(klass, source_id, options = {}) ...@@ -125,9 +127,9 @@ def source_icon(klass, source_id, options = {})
def source_identicon(source, options = {}) def source_identicon(source, options = {})
bg_key = (source.id % 7) + 1 bg_key = (source.id % 7) + 1
options[:class] ||= ''
options[:class] << ' identicon' options[:class] =
options[:class] << " bg#{bg_key}" [*options[:class], "identicon bg#{bg_key}"].join(' ')
content_tag(:div, class: options[:class].strip) do content_tag(:div, class: options[:class].strip) do
source.name[0, 1].upcase source.name[0, 1].upcase
......
# frozen_string_literal: true
module AwardEmojiHelper module AwardEmojiHelper
def toggle_award_url(awardable) def toggle_award_url(awardable)
return url_for([:toggle_award_emoji, awardable]) unless @project || awardable.is_a?(Note) return url_for([:toggle_award_emoji, awardable]) unless @project || awardable.is_a?(Note)
......
# frozen_string_literal: true
module BlameHelper module BlameHelper
def age_map_duration(blame_groups, project) def age_map_duration(blame_groups, project)
now = Time.zone.now now = Time.zone.now
......
# frozen_string_literal: true
module BlobHelper module BlobHelper
def highlight(blob_name, blob_content, repository: nil, plain: false) def highlight(blob_name, blob_content, repository: nil, plain: false)
plain ||= blob_content.length > Blob::MAXIMUM_TEXT_HIGHLIGHT_SIZE plain ||= blob_content.length > Blob::MAXIMUM_TEXT_HIGHLIGHT_SIZE
......
# frozen_string_literal: true
module BoardsHelper module BoardsHelper
def board def board
@board ||= @board || @boards.first @board ||= @board || @boards.first
......
# frozen_string_literal: true
module BranchesHelper module BranchesHelper
def project_branches def project_branches
options_for_select(@project.repository.branch_names, @project.default_branch) options_for_select(@project.repository.branch_names, @project.default_branch)
......
# frozen_string_literal: true
module BreadcrumbsHelper module BreadcrumbsHelper
def add_to_breadcrumbs(text, link) def add_to_breadcrumbs(text, link)
@breadcrumbs_extra_links ||= [] @breadcrumbs_extra_links ||= []
......
# frozen_string_literal: true
module BroadcastMessagesHelper module BroadcastMessagesHelper
def broadcast_message(message) def broadcast_message(message)
return unless message.present? return unless message.present?
...@@ -8,18 +10,17 @@ def broadcast_message(message) ...@@ -8,18 +10,17 @@ def broadcast_message(message)
end end
def broadcast_message_style(broadcast_message) def broadcast_message_style(broadcast_message)
style = '' style = []
if broadcast_message.color.present? if broadcast_message.color.present?
style << "background-color: #{broadcast_message.color}" style << "background-color: #{broadcast_message.color}"
style << '; ' if broadcast_message.font.present?
end end
if broadcast_message.font.present? if broadcast_message.font.present?
style << "color: #{broadcast_message.font}" style << "color: #{broadcast_message.font}"
end end
style style.join('; ')
end end
def broadcast_message_status(broadcast_message) def broadcast_message_status(broadcast_message)
......
# frozen_string_literal: true
module BuildsHelper module BuildsHelper
def build_summary(build, skip: false) def build_summary(build, skip: false)
if build.has_trace? if build.has_trace?
...@@ -12,10 +14,10 @@ def build_summary(build, skip: false) ...@@ -12,10 +14,10 @@ def build_summary(build, skip: false)
end end
def sidebar_build_class(build, current_build) def sidebar_build_class(build, current_build)
build_class = '' build_class = []
build_class += ' active' if build.id === current_build.id build_class << 'active' if build.id === current_build.id
build_class += ' retried' if build.retried? build_class << 'retried' if build.retried?
build_class build_class.join(' ')
end end
def javascript_build_options def javascript_build_options
......
# frozen_string_literal: true
module ButtonHelper module ButtonHelper
# Output a "Copy to Clipboard" button # Output a "Copy to Clipboard" button
# #
......
# frozen_string_literal: true
module CalendarHelper module CalendarHelper
def calendar_url_options def calendar_url_options
{ format: :ics, { format: :ics,
......
# frozen_string_literal: true
## ##
# DEPRECATED # DEPRECATED
# #
......
# frozen_string_literal: true
module ClustersHelper module ClustersHelper
def has_multiple_clusters?(project) def has_multiple_clusters?(project)
false false
......
# frozen_string_literal: true
module CommitsHelper module CommitsHelper
# Returns a link to the commit author. If the author has a matching user and # Returns a link to the commit author. If the author has a matching user and
# is a member of the current @project it will link to the team member page. # is a member of the current @project it will link to the team member page.
......
# frozen_string_literal: true
module CompareHelper module CompareHelper
def create_mr_button?(from = params[:from], to = params[:to], project = @project) def create_mr_button?(from = params[:from], to = params[:to], project = @project)
from.present? && from.present? &&
......
# frozen_string_literal: true
module ComponentsHelper module ComponentsHelper
def gitlab_workhorse_version def gitlab_workhorse_version
if request.headers['Gitlab-Workhorse'].present? if request.headers['Gitlab-Workhorse'].present?
......
# frozen_string_literal: true
module ConversationalDevelopmentIndexHelper module ConversationalDevelopmentIndexHelper
def score_level(score) def score_level(score)
if score < 33.33 if score < 33.33
......
# frozen_string_literal: true
module CountHelper module CountHelper
def approximate_count_with_delimiters(count_data, model) def approximate_count_with_delimiters(count_data, model)
count = count_data[model] count = count_data[model]
......
# frozen_string_literal: true
module DashboardHelper module DashboardHelper
def assigned_issues_dashboard_path def assigned_issues_dashboard_path
issues_dashboard_path(assignee_id: current_user.id) issues_dashboard_path(assignee_id: current_user.id)
......
# frozen_string_literal: true
module DeferScriptTagHelper module DeferScriptTagHelper
# Override the default ActionView `javascript_include_tag` helper to support page specific deferred loading # Override the default ActionView `javascript_include_tag` helper to support page specific deferred loading
def javascript_include_tag(*sources) def javascript_include_tag(*sources)
......
# frozen_string_literal: true
module DeployTokensHelper module DeployTokensHelper
def expand_deploy_tokens_section?(deploy_token) def expand_deploy_tokens_section?(deploy_token)
deploy_token.persisted? || deploy_token.persisted? ||
......
# frozen_string_literal: true
module DiffHelper module DiffHelper
def mark_inline_diffs(old_line, new_line) def mark_inline_diffs(old_line, new_line)
old_diffs, new_diffs = Gitlab::Diff::InlineDiff.new(old_line, new_line).inline_diffs old_diffs, new_diffs = Gitlab::Diff::InlineDiff.new(old_line, new_line).inline_diffs
...@@ -39,7 +41,8 @@ def diff_match_line(old_pos, new_pos, text: '', view: :inline, bottom: false) ...@@ -39,7 +41,8 @@ def diff_match_line(old_pos, new_pos, text: '', view: :inline, bottom: false)
line_num_class = %w[diff-line-num unfold js-unfold] line_num_class = %w[diff-line-num unfold js-unfold]
line_num_class << 'js-unfold-bottom' if bottom line_num_class << 'js-unfold-bottom' if bottom
html = '' html = []
if old_pos if old_pos
html << content_tag(:td, '...', class: [*line_num_class, 'old_line'], data: { linenumber: old_pos }) html << content_tag(:td, '...', class: [*line_num_class, 'old_line'], data: { linenumber: old_pos })
html << content_tag(:td, text, class: [*content_line_class, 'left-side']) if view == :parallel html << content_tag(:td, text, class: [*content_line_class, 'left-side']) if view == :parallel
...@@ -50,7 +53,7 @@ def diff_match_line(old_pos, new_pos, text: '', view: :inline, bottom: false) ...@@ -50,7 +53,7 @@ def diff_match_line(old_pos, new_pos, text: '', view: :inline, bottom: false)
html << content_tag(:td, text, class: [*content_line_class, ('right-side' if view == :parallel)]) html << content_tag(:td, text, class: [*content_line_class, ('right-side' if view == :parallel)])
end end
html.html_safe html.join.html_safe
end end
def diff_line_content(line) def diff_line_content(line)
...@@ -215,9 +218,7 @@ def params_with_whitespace ...@@ -215,9 +218,7 @@ def params_with_whitespace
end end
def toggle_whitespace_link(url, options) def toggle_whitespace_link(url, options)
options[:class] ||= '' options[:class] = [*options[:class], 'btn btn-default'].join(' ')
options[:class] << ' btn btn-default'
link_to "#{hide_whitespace? ? 'Show' : 'Hide'} whitespace changes", url, class: options[:class] link_to "#{hide_whitespace? ? 'Show' : 'Hide'} whitespace changes", url, class: options[:class]
end end
......
# frozen_string_literal: true
module DropdownsHelper module DropdownsHelper
def dropdown_tag(toggle_text, options: {}, &block) def dropdown_tag(toggle_text, options: {}, &block)
content_tag :div, class: "dropdown #{options[:wrapper_class] if options.key?(:wrapper_class)}" do content_tag :div, class: "dropdown #{options[:wrapper_class] if options.key?(:wrapper_class)}" do
...@@ -10,7 +12,7 @@ def dropdown_tag(toggle_text, options: {}, &block) ...@@ -10,7 +12,7 @@ def dropdown_tag(toggle_text, options: {}, &block)
dropdown_output = dropdown_toggle(toggle_text, data_attr, options) dropdown_output = dropdown_toggle(toggle_text, data_attr, options)
dropdown_output << content_tag(:div, class: "dropdown-menu dropdown-select #{options[:dropdown_class] if options.key?(:dropdown_class)}") do dropdown_output << content_tag(:div, class: "dropdown-menu dropdown-select #{options[:dropdown_class] if options.key?(:dropdown_class)}") do
output = "" output = []
if options.key?(:title) if options.key?(:title)
output << dropdown_title(options[:title]) output << dropdown_title(options[:title])
...@@ -31,8 +33,7 @@ def dropdown_tag(toggle_text, options: {}, &block) ...@@ -31,8 +33,7 @@ def dropdown_tag(toggle_text, options: {}, &block)
end end
output << dropdown_loading output << dropdown_loading
output.join.html_safe
output.html_safe
end end
dropdown_output.html_safe dropdown_output.html_safe
...@@ -50,7 +51,7 @@ def dropdown_toggle(toggle_text, data_attr, options = {}) ...@@ -50,7 +51,7 @@ def dropdown_toggle(toggle_text, data_attr, options = {})
def dropdown_title(title, options: {}) def dropdown_title(title, options: {})
content_tag :div, class: "dropdown-title" do content_tag :div, class: "dropdown-title" do
title_output = "" title_output = []
if options.fetch(:back, false) if options.fetch(:back, false)
title_output << content_tag(:button, class: "dropdown-title-button dropdown-menu-back", aria: { label: "Go back" }, type: "button") do title_output << content_tag(:button, class: "dropdown-title-button dropdown-menu-back", aria: { label: "Go back" }, type: "button") do
...@@ -66,7 +67,7 @@ def dropdown_title(title, options: {}) ...@@ -66,7 +67,7 @@ def dropdown_title(title, options: {})
end end
end end
title_output.html_safe title_output.join.html_safe
end end
end end
......
# frozen_string_literal: true
module EmailsHelper module EmailsHelper
include AppearancesHelper include AppearancesHelper
...@@ -49,8 +51,8 @@ def password_reset_token_valid_time ...@@ -49,8 +51,8 @@ def password_reset_token_valid_time
def reset_token_expire_message def reset_token_expire_message
link_tag = link_to('request a new one', new_user_password_url(user_email: @user.email)) link_tag = link_to('request a new one', new_user_password_url(user_email: @user.email))
msg = "This link is valid for #{password_reset_token_valid_time}. " "This link is valid for #{password_reset_token_valid_time}. " \
msg << "After it expires, you can #{link_tag}." "After it expires, you can #{link_tag}."
end end
def header_logo def header_logo
......
# frozen_string_literal: true
module EmojiHelper module EmojiHelper
def emoji_icon(*args) def emoji_icon(*args)
raw Gitlab::Emoji.gl_emoji_tag(*args) raw Gitlab::Emoji.gl_emoji_tag(*args)
......
# frozen_string_literal: true
module EnvironmentHelper module EnvironmentHelper
def environment_for_build(project, build) def environment_for_build(project, build)
return unless build.environment return unless build.environment
......
# frozen_string_literal: true
module EnvironmentsHelper module EnvironmentsHelper
def environments_list_data def environments_list_data
{ {
......
# frozen_string_literal: true
module EventsHelper module EventsHelper
ICON_NAMES_BY_EVENT_TYPE = { ICON_NAMES_BY_EVENT_TYPE = {
'pushed to' => 'commit', 'pushed to' => 'commit',
......
# frozen_string_literal: true
module ExploreHelper module ExploreHelper
def filter_projects_path(options = {}) def filter_projects_path(options = {})
exist_opts = { exist_opts = {
......
# frozen_string_literal: true
module ExternalWikiHelper module ExternalWikiHelper
def get_project_wiki_path(project) def get_project_wiki_path(project)
external_wiki_service = project.external_wiki external_wiki_service = project.external_wiki
......
# frozen_string_literal: true
module FaviconHelper module FaviconHelper
def favicon_extension_whitelist def favicon_extension_whitelist
FaviconUploader::EXTENSION_WHITELIST FaviconUploader::EXTENSION_WHITELIST
......
# frozen_string_literal: true
module FormHelper module FormHelper
def form_errors(model, type: 'form') def form_errors(model, type: 'form')
return unless model.errors.any? return unless model.errors.any?
......
# frozen_string_literal: true
module GitHelper module GitHelper
def strip_gpg_signature(text) def strip_gpg_signature(text)
text.gsub(/-----BEGIN PGP SIGNATURE-----(.*)-----END PGP SIGNATURE-----/m, "")