mirror of
https://github.com/meineerde/redmine.git
synced 2026-01-11 01:51:32 +00:00
Use Regexp#match? to reduce allocations of MatchData object (#28940).
Patch by Pavel Rosický. git-svn-id: http://svn.redmine.org/redmine/trunk@18011 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
f0d579adeb
commit
72e1451159
@ -114,7 +114,7 @@ class ApplicationController < ActionController::Base
|
||||
if (key = api_key_from_request)
|
||||
# Use API key
|
||||
user = User.find_by_api_key(key)
|
||||
elsif request.authorization.to_s =~ /\ABasic /i
|
||||
elsif /\ABasic /i.match?(request.authorization.to_s)
|
||||
# HTTP Basic, either username/password or API key/random
|
||||
authenticate_with_http_basic do |username, password|
|
||||
user = User.try_to_login(username, password) || User.find_by_api_key(username)
|
||||
@ -441,11 +441,11 @@ class ApplicationController < ActionController::Base
|
||||
path = uri.to_s
|
||||
# Ensure that the remaining URL starts with a slash, followed by a
|
||||
# non-slash character or the end
|
||||
if path !~ %r{\A/([^/]|\z)}
|
||||
if !%r{\A/([^/]|\z)}.match?(path)
|
||||
return false
|
||||
end
|
||||
|
||||
if path.match(%r{/(login|account/register|account/lost_password)})
|
||||
if %r{/(login|account/register|account/lost_password)}.match?(path)
|
||||
return false
|
||||
end
|
||||
|
||||
@ -626,7 +626,7 @@ class ApplicationController < ActionController::Base
|
||||
|
||||
# Returns a string that can be used as filename value in Content-Disposition header
|
||||
def filename_for_content_disposition(name)
|
||||
request.env['HTTP_USER_AGENT'] =~ %r{(MSIE|Trident|Edge)} ? ERB::Util.url_encode(name) : name
|
||||
%r{(MSIE|Trident|Edge)}.match?(request.env['HTTP_USER_AGENT']) ? ERB::Util.url_encode(name) : name
|
||||
end
|
||||
|
||||
def api_request?
|
||||
|
||||
@ -320,7 +320,7 @@ class RepositoriesController < ApplicationController
|
||||
@rev = params[:rev].blank? ? @repository.default_branch : params[:rev].to_s.strip
|
||||
@rev_to = params[:rev_to]
|
||||
|
||||
unless @rev.to_s.match(REV_PARAM_RE) && @rev_to.to_s.match(REV_PARAM_RE)
|
||||
unless REV_PARAM_RE.match?(@rev.to_s) && REV_PARAM_RE.match?(@rev_to.to_s)
|
||||
if @repository.branches.blank?
|
||||
raise InvalidRevisionParam
|
||||
end
|
||||
|
||||
@ -52,7 +52,7 @@ class SysController < ActionController::Base
|
||||
scope = Project.active.has_module(:repository)
|
||||
if params[:id]
|
||||
project = nil
|
||||
if params[:id].to_s =~ /^\d*$/
|
||||
if /^\d*$/.match?(params[:id].to_s)
|
||||
project = scope.find(params[:id])
|
||||
else
|
||||
project = scope.find_by_identifier(params[:id])
|
||||
|
||||
@ -30,7 +30,7 @@ module QueriesHelper
|
||||
group = :label_relations
|
||||
elsif field_options[:type] == :tree
|
||||
group = query.is_a?(IssueQuery) ? :label_relations : nil
|
||||
elsif field =~ /^cf_\d+\./
|
||||
elsif /^cf_\d+\./.match?(field)
|
||||
group = (field_options[:through] || field_options[:field]).try(:name)
|
||||
elsif field =~ /^(.+)\./
|
||||
# association filters
|
||||
|
||||
@ -245,7 +245,7 @@ class Attachment < ActiveRecord::Base
|
||||
end
|
||||
|
||||
def is_diff?
|
||||
self.filename =~ /\.(patch|diff)$/i
|
||||
/\.(patch|diff)$/i.match?(filename)
|
||||
end
|
||||
|
||||
def is_pdf?
|
||||
@ -494,7 +494,7 @@ class Attachment < ActiveRecord::Base
|
||||
def self.disk_filename(filename, directory=nil)
|
||||
timestamp = DateTime.now.strftime("%y%m%d%H%M%S")
|
||||
ascii = ''
|
||||
if filename =~ %r{^[a-zA-Z0-9_\.\-]*$} && filename.length <= 50
|
||||
if %r{^[a-zA-Z0-9_\.\-]*$}.match?(filename) && filename.length <= 50
|
||||
ascii = filename
|
||||
else
|
||||
ascii = Digest::MD5.hexdigest(filename)
|
||||
|
||||
@ -79,7 +79,7 @@ class Import < ActiveRecord::Base
|
||||
# Returns the full path of the file to import
|
||||
# It is stored in tmp/imports with a random hex as filename
|
||||
def filepath
|
||||
if filename.present? && filename =~ /\A[0-9a-f]+\z/
|
||||
if filename.present? && /\A[0-9a-f]+\z/.match?(filename)
|
||||
File.join(Rails.root, "tmp", "imports", filename)
|
||||
else
|
||||
nil
|
||||
|
||||
@ -528,7 +528,7 @@ class Issue < ActiveRecord::Base
|
||||
|
||||
# Project and Tracker must be set before since new_statuses_allowed_to depends on it.
|
||||
if (p = attrs.delete('project_id')) && safe_attribute?('project_id')
|
||||
if p.is_a?(String) && !p.match(/^\d*$/)
|
||||
if p.is_a?(String) && !/^\d*$/.match?(p)
|
||||
p_id = Project.find_by_identifier(p).try(:id)
|
||||
else
|
||||
p_id = p.to_i
|
||||
@ -769,7 +769,7 @@ class Issue < ActiveRecord::Base
|
||||
user = new_record? ? author : current_journal.try(:user)
|
||||
|
||||
required_attribute_names(user).each do |attribute|
|
||||
if attribute =~ /^\d+$/
|
||||
if /^\d+$/.match?(attribute)
|
||||
attribute = attribute.to_i
|
||||
v = custom_field_values.detect {|v| v.custom_field_id == attribute }
|
||||
if v && Array(v.value).detect(&:present?).nil?
|
||||
|
||||
@ -103,7 +103,7 @@ class MailHandler < ActionMailer::Base
|
||||
value = email.header[key]
|
||||
if value
|
||||
value = value.to_s.downcase
|
||||
if (ignored_value.is_a?(Regexp) && value.match(ignored_value)) || value == ignored_value
|
||||
if (ignored_value.is_a?(Regexp) && ignored_value.match?(value)) || value == ignored_value
|
||||
if logger
|
||||
logger.info "MailHandler: ignoring email with #{key}:#{value} header"
|
||||
end
|
||||
@ -316,7 +316,7 @@ class MailHandler < ActionMailer::Base
|
||||
else
|
||||
regexp = %r{\A#{Regexp.escape(pattern).gsub("\\*", ".*")}\z}i
|
||||
end
|
||||
if attachment.filename.to_s =~ regexp
|
||||
if regexp.match?(attachment.filename.to_s)
|
||||
logger.info "MailHandler: ignoring attachment #{attachment.filename} matching #{pattern}"
|
||||
return false
|
||||
end
|
||||
|
||||
@ -176,7 +176,7 @@ class Principal < ActiveRecord::Base
|
||||
principal ||= principals.detect {|a| keyword.casecmp(a.login.to_s) == 0}
|
||||
principal ||= principals.detect {|a| keyword.casecmp(a.mail.to_s) == 0}
|
||||
|
||||
if principal.nil? && keyword.match(/ /)
|
||||
if principal.nil? && / /.match?(keyword)
|
||||
firstname, lastname = *(keyword.split) # "First Last Throwaway"
|
||||
principal ||= principals.detect {|a|
|
||||
a.is_a?(User) &&
|
||||
|
||||
@ -313,7 +313,7 @@ class Project < ActiveRecord::Base
|
||||
end
|
||||
|
||||
def self.find(*args)
|
||||
if args.first && args.first.is_a?(String) && !args.first.match(/^\d*$/)
|
||||
if args.first && args.first.is_a?(String) && !/^\d*$/.match?(args.first)
|
||||
project = find_by_identifier(*args)
|
||||
raise ActiveRecord::RecordNotFound, "Couldn't find Project with identifier=#{args.first}" if project.nil?
|
||||
project
|
||||
@ -353,7 +353,7 @@ class Project < ActiveRecord::Base
|
||||
nil
|
||||
else
|
||||
# id is used for projects with a numeric identifier (compatibility)
|
||||
@to_param ||= (identifier.to_s =~ %r{^\d*$} ? id.to_s : identifier)
|
||||
@to_param ||= (%r{^\d*$}.match?(identifier.to_s) ? id.to_s : identifier)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@ -439,17 +439,17 @@ class Query < ActiveRecord::Base
|
||||
if values_for(field)
|
||||
case type_for(field)
|
||||
when :integer
|
||||
add_filter_error(field, :invalid) if values_for(field).detect {|v| v.present? && !v.match(/\A[+-]?\d+(,[+-]?\d+)*\z/) }
|
||||
add_filter_error(field, :invalid) if values_for(field).detect {|v| v.present? && !/\A[+-]?\d+(,[+-]?\d+)*\z/.match?(v) }
|
||||
when :float
|
||||
add_filter_error(field, :invalid) if values_for(field).detect {|v| v.present? && !v.match(/\A[+-]?\d+(\.\d*)?\z/) }
|
||||
add_filter_error(field, :invalid) if values_for(field).detect {|v| v.present? && !/\A[+-]?\d+(\.\d*)?\z/.match?(v) }
|
||||
when :date, :date_past
|
||||
case operator_for(field)
|
||||
when "=", ">=", "<=", "><"
|
||||
add_filter_error(field, :invalid) if values_for(field).detect {|v|
|
||||
v.present? && (!v.match(/\A\d{4}-\d{2}-\d{2}(T\d{2}((:)?\d{2}){0,2}(Z|\d{2}:?\d{2})?)?\z/) || parse_date(v).nil?)
|
||||
v.present? && (!/\A\d{4}-\d{2}-\d{2}(T\d{2}((:)?\d{2}){0,2}(Z|\d{2}:?\d{2})?)?\z/.match?(v) || parse_date(v).nil?)
|
||||
}
|
||||
when ">t-", "<t-", "t-", ">t+", "<t+", "t+", "><t+", "><t-"
|
||||
add_filter_error(field, :invalid) if values_for(field).detect {|v| v.present? && !v.match(/^\d+$/) }
|
||||
add_filter_error(field, :invalid) if values_for(field).detect {|v| v.present? && !/^\d+$/.match?(v) }
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -1053,7 +1053,7 @@ class Query < ActiveRecord::Base
|
||||
raise "Unknown #{queried_class.name} association #{assoc}" unless customized_class
|
||||
end
|
||||
where = sql_for_field(field, operator, value, db_table, db_field, true)
|
||||
if operator =~ /[<>]/
|
||||
if /[<>]/.match?(operator)
|
||||
where = "(#{where}) AND #{db_table}.#{db_field} <> ''"
|
||||
end
|
||||
"#{queried_table_name}.#{customized_key} #{not_in} IN (" +
|
||||
@ -1398,7 +1398,7 @@ class Query < ActiveRecord::Base
|
||||
|
||||
# Returns a Date or Time from the given filter value
|
||||
def parse_date(arg)
|
||||
if arg.to_s =~ /\A\d{4}-\d{2}-\d{2}T/
|
||||
if /\A\d{4}-\d{2}-\d{2}T/.match?(arg.to_s)
|
||||
Time.parse(arg) rescue nil
|
||||
else
|
||||
Date.parse(arg) rescue nil
|
||||
|
||||
@ -149,7 +149,7 @@ class Repository < ActiveRecord::Base
|
||||
end
|
||||
|
||||
def self.find_by_identifier_param(param)
|
||||
if param.to_s =~ /^\d+$/
|
||||
if /^\d+$/.match?(param.to_s)
|
||||
find_by_id(param)
|
||||
else
|
||||
find_by_identifier(param)
|
||||
@ -248,7 +248,7 @@ class Repository < ActiveRecord::Base
|
||||
def find_changeset_by_name(name)
|
||||
return nil if name.blank?
|
||||
s = name.to_s
|
||||
if s.match(/^\d*$/)
|
||||
if /^\d*$/.match?(s)
|
||||
changesets.find_by(:revision => s)
|
||||
else
|
||||
changesets.where("revision LIKE ?", s + '%').first
|
||||
@ -469,7 +469,7 @@ class Repository < ActiveRecord::Base
|
||||
regexp = Redmine::Configuration["scm_#{scm_name.to_s.downcase}_path_regexp"]
|
||||
if changes[attribute] && regexp.present?
|
||||
regexp = regexp.to_s.strip.gsub('%project%') {Regexp.escape(project.try(:identifier).to_s)}
|
||||
unless send(attribute).to_s.match(Regexp.new("\\A#{regexp}\\z"))
|
||||
unless Regexp.new("\\A#{regexp}\\z").match?(send(attribute).to_s)
|
||||
errors.add(attribute, :invalid)
|
||||
end
|
||||
end
|
||||
|
||||
@ -98,7 +98,7 @@ class Repository::Mercurial < Repository
|
||||
def find_changeset_by_name(name)
|
||||
return nil if name.blank?
|
||||
s = name.to_s
|
||||
if /[^\d]/ =~ s or s.size > 8
|
||||
if /[^\d]/.match?(s) || s.size > 8
|
||||
cs = changesets.where(:scmid => s).first
|
||||
else
|
||||
cs = changesets.find_by(:revision => s)
|
||||
|
||||
@ -112,7 +112,7 @@ class Token < ActiveRecord::Base
|
||||
def self.find_token(action, key, validity_days=nil)
|
||||
action = action.to_s
|
||||
key = key.to_s
|
||||
return nil unless action.present? && key =~ /\A[a-z0-9]+\z/i
|
||||
return nil unless action.present? && /\A[a-z0-9]+\z/i.match?(key)
|
||||
|
||||
token = Token.find_by(:action => action, :value => key)
|
||||
if token && (token.action == action) && (token.value == key) && token.user
|
||||
|
||||
@ -64,7 +64,7 @@ class WorkflowPermission < WorkflowRule
|
||||
protected
|
||||
|
||||
def validate_field_name
|
||||
unless Tracker::CORE_FIELDS_ALL.include?(field_name) || field_name.to_s.match(/^\d+$/)
|
||||
unless Tracker::CORE_FIELDS_ALL.include?(field_name) || /^\d+$/.match?(field_name.to_s)
|
||||
errors.add :field_name, :invalid
|
||||
end
|
||||
end
|
||||
|
||||
@ -87,7 +87,7 @@ module OpenIdAuthentication
|
||||
# dodge XRIs -- TODO: validate, don't just skip.
|
||||
unless ['=', '@', '+', '$', '!', '('].include?(identifier.at(0))
|
||||
# does it begin with http? if not, add it.
|
||||
identifier = +"http://#{identifier}" unless identifier =~ /^http/i
|
||||
identifier = +"http://#{identifier}" unless /^http/i.match?(identifier)
|
||||
|
||||
# strip any fragments
|
||||
identifier.gsub!(/\#(.*)$/, '')
|
||||
|
||||
@ -42,7 +42,7 @@ module Redmine
|
||||
return if str.nil?
|
||||
str = str.b
|
||||
return str if str.empty?
|
||||
return str if /\A[\r\n\t\x20-\x7e]*\Z/n.match(str) # for us-ascii
|
||||
return str if /\A[\r\n\t\x20-\x7e]*\Z/n.match?(str) # for us-ascii
|
||||
str.force_encoding('UTF-8')
|
||||
encodings = Setting.repositories_encodings.split(',').collect(&:strip)
|
||||
encodings.each do |encoding|
|
||||
|
||||
@ -122,7 +122,7 @@ module Redmine
|
||||
# Checks the validness of regular expressions set for repository paths at startup
|
||||
def check_regular_expressions
|
||||
@config.each do |name, value|
|
||||
if value.present? && name =~ /^scm_.+_path_regexp$/
|
||||
if value.present? && /^scm_.+_path_regexp$/.match?(name)
|
||||
begin
|
||||
Regexp.new value.to_s.strip
|
||||
rescue => e
|
||||
|
||||
@ -21,7 +21,7 @@ class DateValidator < ActiveModel::EachValidator
|
||||
def validate_each(record, attribute, value)
|
||||
before_type_cast = record.attributes_before_type_cast[attribute.to_s]
|
||||
if before_type_cast.is_a?(String) && before_type_cast.present?
|
||||
unless before_type_cast =~ /\A\d{4}-\d{2}-\d{2}( 00:00:00)?\z/ && value
|
||||
unless /\A\d{4}-\d{2}-\d{2}( 00:00:00)?\z/.match?(before_type_cast) && value
|
||||
record.errors.add attribute, :not_a_date
|
||||
end
|
||||
end
|
||||
|
||||
@ -23,7 +23,7 @@ module Redmine
|
||||
class << self
|
||||
# Returns true if the database is PostgreSQL
|
||||
def postgresql?
|
||||
(ActiveRecord::Base.connection.adapter_name =~ /postgresql/i).present?
|
||||
/postgresql/i.match?(ActiveRecord::Base.connection.adapter_name)
|
||||
end
|
||||
|
||||
# Returns the PostgreSQL version or nil if another DBMS is used
|
||||
@ -48,7 +48,7 @@ module Redmine
|
||||
|
||||
# Returns true if the database is MySQL
|
||||
def mysql?
|
||||
(ActiveRecord::Base.connection.adapter_name =~ /mysql/i).present?
|
||||
/mysql/i.match?(ActiveRecord::Base.connection.adapter_name)
|
||||
end
|
||||
|
||||
# Returns a SQL statement for case/accent (if possible) insensitive match
|
||||
|
||||
@ -140,7 +140,7 @@ module Redmine
|
||||
def self.attach(attachments, filename, encoding)
|
||||
filename_utf8 = Redmine::CodesetUtil.to_utf8(filename, encoding)
|
||||
atta = nil
|
||||
if filename_utf8 =~ /^[^\/"]+\.(gif|jpg|jpe|jpeg|png)$/i
|
||||
if /^[^\/"]+\.(gif|jpg|jpe|jpeg|png)$/i.match?(filename_utf8)
|
||||
atta = Attachment.latest_attach(attachments, filename_utf8)
|
||||
end
|
||||
if atta && atta.readable? && atta.visible?
|
||||
|
||||
@ -251,7 +251,7 @@ module Redmine
|
||||
[text, url]
|
||||
end
|
||||
links = texts_and_urls.sort_by(&:first).map do |text, url|
|
||||
css_class = (url =~ /^https?:\/\//) ? 'external' : nil
|
||||
css_class = (/^https?:\/\//.match?(url)) ? 'external' : nil
|
||||
view.link_to_if uri_with_safe_scheme?(url), text, url, :class => css_class
|
||||
end
|
||||
links.join(', ').html_safe
|
||||
@ -360,7 +360,7 @@ module Redmine
|
||||
def validate_single_value(custom_field, value, customized=nil)
|
||||
errs = super
|
||||
value = value.to_s
|
||||
unless custom_field.regexp.blank? or value =~ Regexp.new(custom_field.regexp)
|
||||
unless custom_field.regexp.blank? or Regexp.new(custom_field.regexp).match?(value)
|
||||
errs << ::I18n.t('activerecord.errors.messages.invalid')
|
||||
end
|
||||
if custom_field.min_length && value.length < custom_field.min_length
|
||||
@ -442,12 +442,12 @@ module Redmine
|
||||
url = url_from_pattern(custom_field, value, customized)
|
||||
else
|
||||
url = value.to_s
|
||||
unless url =~ %r{\A[a-z]+://}i
|
||||
unless %r{\A[a-z]+://}i.match?(url)
|
||||
# no protocol found, use http by default
|
||||
url = "http://" + url
|
||||
end
|
||||
end
|
||||
css_class = (url =~ /^https?:\/\//) ? 'external' : nil
|
||||
css_class = (/^https?:\/\//.match?(url)) ? 'external' : nil
|
||||
view.link_to value.to_s.truncate(40), url, :class => css_class
|
||||
else
|
||||
value.to_s
|
||||
@ -492,7 +492,7 @@ module Redmine
|
||||
|
||||
def validate_single_value(custom_field, value, customized=nil)
|
||||
errs = super
|
||||
errs << ::I18n.t('activerecord.errors.messages.not_a_number') unless value.to_s.strip =~ /^[+-]?\d+$/
|
||||
errs << ::I18n.t('activerecord.errors.messages.not_a_number') unless /^[+-]?\d+$/.match?(value.to_s.strip)
|
||||
errs
|
||||
end
|
||||
|
||||
@ -536,7 +536,7 @@ module Redmine
|
||||
end
|
||||
|
||||
def validate_single_value(custom_field, value, customized=nil)
|
||||
if value =~ /^\d{4}-\d{2}-\d{2}$/ && (value.to_date rescue false)
|
||||
if /^\d{4}-\d{2}-\d{2}$/.match?(value) && (value.to_date rescue false)
|
||||
[]
|
||||
else
|
||||
[::I18n.t('activerecord.errors.messages.not_a_date')]
|
||||
|
||||
@ -151,7 +151,7 @@ module Redmine
|
||||
end
|
||||
|
||||
def lock_nested_set
|
||||
if self.class.connection.adapter_name =~ /sqlserver/i
|
||||
if /sqlserver/i.match?(self.class.connection.adapter_name)
|
||||
lock = "WITH (ROWLOCK HOLDLOCK UPDLOCK)"
|
||||
# Custom lock for SQLServer
|
||||
# This can be problematic if root_id or parent root_id changes
|
||||
|
||||
@ -121,7 +121,7 @@ module Redmine
|
||||
|
||||
def lock_nested_set
|
||||
lock = true
|
||||
if self.class.connection.adapter_name =~ /sqlserver/i
|
||||
if /sqlserver/i.match?(self.class.connection.adapter_name)
|
||||
lock = "WITH (ROWLOCK HOLDLOCK UPDLOCK)"
|
||||
end
|
||||
self.class.order(:id).lock(lock).ids
|
||||
|
||||
@ -21,8 +21,8 @@ module Redmine
|
||||
module Platform
|
||||
class << self
|
||||
def mswin?
|
||||
(RUBY_PLATFORM =~ /(:?mswin|mingw)/) ||
|
||||
(RUBY_PLATFORM == 'java' && (ENV['OS'] || ENV['os']) =~ /windows/i)
|
||||
(/(:?mswin|mingw)/.match?(RUBY_PLATFORM)) ||
|
||||
(RUBY_PLATFORM == 'java' && /windows/i.match?(ENV['OS'] || ENV['os']))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -186,7 +186,7 @@ module Redmine
|
||||
|
||||
def target(path, sq=true)
|
||||
path ||= ''
|
||||
base = path.match(/^\//) ? root_url : url
|
||||
base = /^\//.match?(path) ? root_url : url
|
||||
str = "#{base}/#{path}".gsub(/[?<>\*]/, '')
|
||||
if sq
|
||||
str = shell_quote(str)
|
||||
|
||||
@ -170,7 +170,7 @@ module Redmine
|
||||
file_state = nil
|
||||
branch_map = nil
|
||||
io.each_line() do |line|
|
||||
if state != "revision" && /^#{ENDLOG}/ =~ line
|
||||
if state != "revision" && /^#{ENDLOG}/.match?(line)
|
||||
commit_log = ""
|
||||
revision = nil
|
||||
state = "entry_start"
|
||||
@ -183,9 +183,9 @@ module Redmine
|
||||
logger.debug("Path #{entry_path} <=> Name #{entry_name}")
|
||||
elsif /^head: (.+)$/ =~ line
|
||||
entry_headRev = $1 #unless entry.nil?
|
||||
elsif /^symbolic names:/ =~ line
|
||||
elsif /^symbolic names:/.match?(line)
|
||||
state = "symbolic" #unless entry.nil?
|
||||
elsif /^#{STARTLOG}/ =~ line
|
||||
elsif /^#{STARTLOG}/.match?(line)
|
||||
commit_log = ""
|
||||
state = "revision"
|
||||
end
|
||||
|
||||
@ -109,7 +109,7 @@ module Redmine
|
||||
# Here we do not shell-out, so we do not want quotes.
|
||||
def target(path=nil)
|
||||
# Prevent the use of ..
|
||||
if path and !path.match(/(^|\/)\.\.(\/|$)/)
|
||||
if path and !/(^|\/)\.\.(\/|$)/.match?(path)
|
||||
return "#{self.url}#{without_leading_slash(path)}"
|
||||
end
|
||||
return self.url
|
||||
|
||||
@ -297,10 +297,10 @@ module Redmine
|
||||
# Runs 'hg' command with the given args
|
||||
def hg(*args, &block)
|
||||
# as of hg 4.4.1, early parsing of bool options is not terminated at '--'
|
||||
if args.any? { |s| s =~ HG_EARLY_BOOL_ARG }
|
||||
if args.any? { |s| HG_EARLY_BOOL_ARG.match?(s) }
|
||||
raise HgCommandArgumentError, "malicious command argument detected"
|
||||
end
|
||||
if args.take_while { |s| s != '--' }.any? { |s| s =~ HG_EARLY_LIST_ARG }
|
||||
if args.take_while { |s| s != '--' }.any? { |s| HG_EARLY_LIST_ARG.match?(s) }
|
||||
raise HgCommandArgumentError, "malicious command argument detected"
|
||||
end
|
||||
|
||||
|
||||
@ -267,7 +267,7 @@ module Redmine
|
||||
end
|
||||
|
||||
def target(path = '')
|
||||
base = path.match(/^\//) ? root_url : url
|
||||
base = /^\//.match?(path) ? root_url : url
|
||||
uri = "#{base}/#{path}"
|
||||
uri = URI.escape(URI.escape(uri), '[]')
|
||||
shell_quote(uri.gsub(/[?<>\*]/, ''))
|
||||
|
||||
@ -96,7 +96,7 @@ module Redmine
|
||||
|
||||
# Appends ASC/DESC to the sort criterion unless it has a fixed order
|
||||
def append_order(criterion, order)
|
||||
if criterion =~ / (asc|desc)$/i
|
||||
if / (asc|desc)$/i.match?(criterion)
|
||||
criterion
|
||||
else
|
||||
Arel.sql "#{criterion} #{order.to_s.upcase}"
|
||||
|
||||
@ -78,7 +78,7 @@ module Redmine
|
||||
@parsing = true
|
||||
end
|
||||
else
|
||||
if line =~ %r{^[^\+\-\s@\\]}
|
||||
if %r{^[^\+\-\s@\\]}.match?(line)
|
||||
@parsing = false
|
||||
return false
|
||||
elsif line =~ /^@@ (\+|\-)(\d+)(,\d+)? (\+|\-)(\d+)(,\d+)? @@/
|
||||
@ -114,9 +114,9 @@ module Redmine
|
||||
def file_name=(arg)
|
||||
both_git_diff = false
|
||||
if file_name.nil?
|
||||
@git_diff = true if arg =~ %r{^(a/|/dev/null)}
|
||||
@git_diff = true if %r{^(a/|/dev/null)}.match?(arg)
|
||||
else
|
||||
both_git_diff = (@git_diff && arg =~ %r{^(b/|/dev/null)})
|
||||
both_git_diff = (@git_diff && %r{^(b/|/dev/null)}.match?(arg))
|
||||
end
|
||||
if both_git_diff
|
||||
if file_name && arg == "/dev/null"
|
||||
@ -168,7 +168,7 @@ module Redmine
|
||||
true
|
||||
else
|
||||
write_offsets
|
||||
if line[0, 1] =~ /\s/
|
||||
if /\s/.match?(line[0, 1])
|
||||
diff = Diff.new
|
||||
diff.line_right = line[1..-1]
|
||||
diff.nb_line_right = @line_num_r
|
||||
|
||||
@ -135,7 +135,7 @@ module Redmine
|
||||
def auto_link!(text)
|
||||
text.gsub!(AUTO_LINK_RE) do
|
||||
all, leading, proto, url, post = $&, $1, $2, $3, $6
|
||||
if leading =~ /<a\s/i || leading =~ /![<>=]?/
|
||||
if /<a\s/i.match?(leading) || /![<>=]?/.match?(leading)
|
||||
# don't replace URLs that are already linked
|
||||
# and URLs prefixed with ! !> !< != (textile images)
|
||||
all
|
||||
@ -157,7 +157,7 @@ module Redmine
|
||||
def auto_mailto!(text)
|
||||
text.gsub!(/([\w\.!#\$%\-+.\/]+@[A-Za-z0-9\-]+(\.[A-Za-z0-9\-]+)+)/) do
|
||||
mail = $1
|
||||
if text.match(/<a\b[^>]*>(.*)(#{Regexp.escape(mail)})(.*)<\/a>/)
|
||||
if /<a\b[^>]*>(.*)(#{Regexp.escape(mail)})(.*)<\/a>/.match?(text)
|
||||
mail
|
||||
else
|
||||
%(<a class="email" href="mailto:#{ERB::Util.html_escape mail}">#{ERB::Util.html_escape mail}</a>).html_safe
|
||||
|
||||
@ -143,7 +143,7 @@ module Redmine
|
||||
# If a block of text is given, the closing tag }} must be at the start of a new line.
|
||||
def macro(name, options={}, &block)
|
||||
options.assert_valid_keys(:desc, :parse_args)
|
||||
unless name.to_s.match(/\A\w+\z/)
|
||||
unless /\A\w+\z/.match?(name.to_s)
|
||||
raise "Invalid macro name: #{name} (only 0-9, A-Z, a-z and _ characters are accepted)"
|
||||
end
|
||||
unless block_given?
|
||||
@ -240,7 +240,7 @@ module Redmine
|
||||
filename = args.first
|
||||
raise 'Filename required' unless filename.present?
|
||||
size = options[:size]
|
||||
raise 'Invalid size parameter' unless size.nil? || size.match(/^\d+$/)
|
||||
raise 'Invalid size parameter' unless size.nil? || /^\d+$/.match?(size)
|
||||
size = size.to_i
|
||||
size = 200 unless size > 0
|
||||
if obj && obj.respond_to?(:attachments) && attachment = Attachment.latest_attach(obj.attachments, filename)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user