diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 07829c58d..5b18f14a6 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -230,7 +230,7 @@ class RepositoriesController < ApplicationController # Adds a related issue to a changeset # POST /projects/:project_id/repository/(:repository_id/)revisions/:rev/issues def add_related_issue - issue_id = params[:issue_id].to_s.sub(/^#/, '') + issue_id = params[:issue_id].to_s.delete_prefix('#') @issue = @changeset.find_referenced_issue_by_id(issue_id) if @issue && (!@issue.visible? || @changeset.issues.include?(@issue)) @issue = nil diff --git a/app/controllers/settings_controller.rb b/app/controllers/settings_controller.rb index 9fb08d651..4662950c1 100644 --- a/app/controllers/settings_controller.rb +++ b/app/controllers/settings_controller.rb @@ -53,7 +53,7 @@ class SettingsController < ApplicationController @deliveries = ActionMailer::Base.perform_deliveries @guessed_host_and_path = request.host_with_port.dup - @guessed_host_and_path << ('/'+ Redmine::Utils.relative_url_root.gsub(%r{^\/}, '')) unless Redmine::Utils.relative_url_root.blank? + @guessed_host_and_path << ("/#{Redmine::Utils.relative_url_root.delete_prefix('/')}") unless Redmine::Utils.relative_url_root.blank? @commit_update_keywords = Setting.commit_update_keywords.dup @commit_update_keywords = [{}] unless @commit_update_keywords.is_a?(Array) && @commit_update_keywords.any? diff --git a/app/controllers/workflows_controller.rb b/app/controllers/workflows_controller.rb index 3bb46ad14..abad0f710 100644 --- a/app/controllers/workflows_controller.rb +++ b/app/controllers/workflows_controller.rb @@ -58,7 +58,9 @@ class WorkflowsController < ApplicationController def permissions if @roles && @trackers - @fields = (Tracker::CORE_FIELDS_ALL - @trackers.map(&:disabled_core_fields).reduce(:&)).map {|field| [field, l("field_"+field.sub(/_id$/, ''))]} + @fields = (Tracker::CORE_FIELDS_ALL - @trackers.map(&:disabled_core_fields).reduce(:&)).map do |field| + [field, l("field_#{field.delete_suffix('_id')}")] + end @custom_fields = @trackers.map(&:custom_fields).flatten.uniq.sort @permissions = WorkflowPermission.rules_by_status_id(@trackers, @roles) @statuses.each {|status| @permissions[status.id] ||= {}} diff --git a/app/helpers/issues_helper.rb b/app/helpers/issues_helper.rb index 80e3de855..e2ee6d535 100644 --- a/app/helpers/issues_helper.rb +++ b/app/helpers/issues_helper.rb @@ -528,8 +528,8 @@ module IssuesHelper case detail.property when 'attr' - field = detail.prop_key.to_s.gsub(/\_id$/, "") - label = l(("field_" + field).to_sym) + field = detail.prop_key.to_s.delete_suffix('_id') + label = l(("field_#{field}").to_sym) case detail.prop_key when 'due_date', 'start_date' value = format_date(detail.value.to_date) if detail.value diff --git a/app/models/issue_query.rb b/app/models/issue_query.rb index 21552dfd6..7c1027ad3 100644 --- a/app/models/issue_query.rb +++ b/app/models/issue_query.rb @@ -328,7 +328,7 @@ class IssueQuery < Query :sortable => "#{Issue.table_name}.is_private", :groupable => true) end - disabled_fields = Tracker.disabled_core_fields(trackers).map {|field| field.sub(/_id$/, '')} + disabled_fields = Tracker.disabled_core_fields(trackers).map {|field| field.delete_suffix('_id')} disabled_fields << "total_estimated_hours" if disabled_fields.include?("estimated_hours") @available_columns.reject! do |column| disabled_fields.include?(column.name.to_s) @@ -479,7 +479,7 @@ class IssueQuery < Query def sql_for_notes_field(field, operator, value) subquery = "SELECT 1 FROM #{Journal.table_name}" + " WHERE #{Journal.table_name}.journalized_type='Issue' AND #{Journal.table_name}.journalized_id=#{Issue.table_name}.id" + - " AND (#{sql_for_field field, operator.sub(/^!/, ''), value, Journal.table_name, 'notes'})" + + " AND (#{sql_for_field field, operator.delete_prefix('!'), value, Journal.table_name, 'notes'})" + " AND (#{Journal.visible_notes_condition(User.current, :skip_pre_condition => true)})" "#{/^!/.match?(operator) ? "NOT EXISTS" : "EXISTS"} (#{subquery})" end diff --git a/app/models/query.rb b/app/models/query.rb index b9a7181fa..1826bd509 100644 --- a/app/models/query.rb +++ b/app/models/query.rb @@ -211,7 +211,7 @@ class QueryFilter def initialize(field, options) @field = field.to_s @options = options - @options[:name] ||= l(options[:label] || "field_#{field}".gsub(/_id$/, '')) + @options[:name] ||= l(options[:label] || "field_#{field}".delete_suffix('_id')) # Consider filters with a Proc for values as remote by default @remote = options.key?(:remote) ? options[:remote] : options[:values].is_a?(Proc) end diff --git a/app/views/trackers/_form.html.erb b/app/views/trackers/_form.html.erb index 2ccd225e6..7e3929d3f 100644 --- a/app/views/trackers/_form.html.erb +++ b/app/views/trackers/_form.html.erb @@ -17,7 +17,7 @@ <% Tracker::CORE_FIELDS.each do |field| %> <% end %>

diff --git a/app/views/trackers/fields.html.erb b/app/views/trackers/fields.html.erb index a9fe49351..c4de3ab45 100644 --- a/app/views/trackers/fields.html.erb +++ b/app/views/trackers/fields.html.erb @@ -26,7 +26,7 @@ <% Tracker::CORE_FIELDS.each do |field| %> - <% field_name = l("field_#{field}".sub(/_id$/, '')) %> + <% field_name = l("field_#{field}".delete_suffix('_id')) %> <%= link_to_function('', "toggleCheckboxesBySelector('input.core-field-#{field}')", :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}", diff --git a/config/initializers/10-patches.rb b/config/initializers/10-patches.rb index 9a3238963..327cdd778 100644 --- a/config/initializers/10-patches.rb +++ b/config/initializers/10-patches.rb @@ -4,7 +4,7 @@ module ActiveRecord class Base # Translate attribute names for validation errors display def self.human_attribute_name(attr, options = {}) - prepared_attr = attr.to_s.sub(/_id$/, '').sub(/^.+\./, '') + prepared_attr = attr.to_s.delete_suffix('_id').sub(/^.+\./, '') class_prefix = name.underscore.tr('/', '_') redmine_default = [ diff --git a/lib/redmine/diff_table.rb b/lib/redmine/diff_table.rb index 989e51c32..bd31c7cde 100644 --- a/lib/redmine/diff_table.rb +++ b/lib/redmine/diff_table.rb @@ -91,12 +91,12 @@ module Redmine if both_git_diff if file_name && arg == "/dev/null" # keep the original file name - @file_name = file_name.sub(%r{^a/}, '') + @file_name = file_name.delete_prefix('a/') else # remove leading a/ - @previous_file_name = file_name.sub(%r{^a/}, '') unless file_name == "/dev/null" + @previous_file_name = file_name.delete_prefix('a/') unless file_name == "/dev/null" # remove leading b/ - @file_name = arg.sub(%r{^b/}, '') + @file_name = arg.delete_prefix('b/') @previous_file_name = nil if @previous_file_name == @file_name end diff --git a/lib/redmine/my_page.rb b/lib/redmine/my_page.rb index 95af87a4c..9a202190b 100644 --- a/lib/redmine/my_page.rb +++ b/lib/redmine/my_page.rb @@ -81,7 +81,7 @@ module Redmine Dir.glob( "#{Redmine::Plugin.directory}/*/app/views/my/blocks/_*.{rhtml,erb}" ).inject({}) do |h, file| - name = File.basename(file).split('.').first.gsub(/^_/, '') + name = File.basename(file).split('.').first.delete_prefix('_') h[name] = {:label => name.to_sym, :partial => "my/blocks/#{name}"} h end diff --git a/lib/redmine/themes.rb b/lib/redmine/themes.rb index ff51f0083..768b36ef7 100644 --- a/lib/redmine/themes.rb +++ b/lib/redmine/themes.rb @@ -110,7 +110,7 @@ module Redmine def assets(dir, ext=nil) if ext - Dir.glob("#{path}/#{dir}/*.#{ext}").collect {|f| File.basename(f).gsub(/\.#{ext}$/, '')} + Dir.glob("#{path}/#{dir}/*.#{ext}").collect {|f| File.basename(f).delete_suffix(".#{ext}")} else Dir.glob("#{path}/#{dir}/*").collect {|f| File.basename(f)} end diff --git a/test/coverage/html_formatter.rb b/test/coverage/html_formatter.rb index 8df596948..bd70d4deb 100644 --- a/test/coverage/html_formatter.rb +++ b/test/coverage/html_formatter.rb @@ -51,7 +51,7 @@ module Redmine end def shortened_filename(source_file) - source_file.filename.gsub(SimpleCov.root, '.').gsub(/^\.\//, '') + source_file.filename.gsub(SimpleCov.root, '.').delete_prefix('./') end def link_to_source_file(source_file) diff --git a/test/functional/custom_fields_controller_test.rb b/test/functional/custom_fields_controller_test.rb index b6e4ed6ce..bc13e64b5 100644 --- a/test/functional/custom_fields_controller_test.rb +++ b/test/functional/custom_fields_controller_test.rb @@ -596,7 +596,7 @@ class CustomFieldsControllerTest < Redmine::ControllerTest def custom_field_classes files = Dir.glob(File.join(Rails.root, 'app/models/*_custom_field.rb')). - map {|f| File.basename(f).sub(/\.rb$/, '')} + map {|f| File.basename(f).delete_suffix('.rb')} classes = files.map {|x| x.classify.constantize} assert classes.size > 0 classes