2019-07-31 22:56:46 +05:30
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
module Gitlab
|
|
|
|
module Ci
|
|
|
|
module Pipeline
|
|
|
|
module Expression
|
|
|
|
module Lexeme
|
2020-10-24 23:57:45 +05:30
|
|
|
class NotMatches < Lexeme::LogicalOperator
|
2019-07-31 22:56:46 +05:30
|
|
|
PATTERN = /\!~/.freeze
|
|
|
|
|
|
|
|
def evaluate(variables = {})
|
|
|
|
text = @left.evaluate(variables)
|
|
|
|
regexp = @right.evaluate(variables)
|
2022-07-16 23:28:13 +05:30
|
|
|
|
2019-12-04 20:38:33 +05:30
|
|
|
return true unless regexp
|
2019-07-31 22:56:46 +05:30
|
|
|
|
2022-07-16 23:28:13 +05:30
|
|
|
if ::Feature.enabled?(:ci_fix_rules_if_comparison_with_regexp_variable)
|
|
|
|
# All variables are evaluated as strings, even if they are regexp strings.
|
|
|
|
# So, we need to convert them to regexp objects.
|
|
|
|
regexp = Lexeme::Pattern.build_and_evaluate(regexp, variables)
|
|
|
|
end
|
|
|
|
|
2019-12-04 20:38:33 +05:30
|
|
|
regexp.scan(text.to_s).empty?
|
2019-07-31 22:56:46 +05:30
|
|
|
end
|
|
|
|
|
|
|
|
def self.build(_value, behind, ahead)
|
|
|
|
new(behind, ahead)
|
|
|
|
end
|
2019-09-04 21:01:54 +05:30
|
|
|
|
|
|
|
def self.precedence
|
|
|
|
10 # See: https://ruby-doc.org/core-2.5.0/doc/syntax/precedence_rdoc.html
|
|
|
|
end
|
2019-07-31 22:56:46 +05:30
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|