Maintenance: Custom Rubocop matcher for making sure "unless" conditional is not used in Ruby
This commit is contained in:
parent
65d72b9bba
commit
563bcfbefd
14 changed files with 54 additions and 18 deletions
30
.rubocop/cop/zammad/prefer_negated_if_over_unless.rb
Normal file
30
.rubocop/cop/zammad/prefer_negated_if_over_unless.rb
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
module RuboCop
|
||||||
|
module Cop
|
||||||
|
module Zammad
|
||||||
|
# This cop is used to identify usages of `unless` conditionals
|
||||||
|
#
|
||||||
|
# @example
|
||||||
|
# # bad
|
||||||
|
# unless statement
|
||||||
|
# return unless statement
|
||||||
|
#
|
||||||
|
# # good
|
||||||
|
# if !statement
|
||||||
|
# return if !statement
|
||||||
|
class PreferNegatedIfOverUnless < Cop
|
||||||
|
include ConfigurableEnforcedStyle
|
||||||
|
include NegativeConditional
|
||||||
|
extend AutoCorrector
|
||||||
|
|
||||||
|
MSG = 'Favor `if !foobar` over `unless foobar` for ' \
|
||||||
|
'negative conditions.'.freeze
|
||||||
|
|
||||||
|
def on_if(node)
|
||||||
|
return unless node.unless?
|
||||||
|
|
||||||
|
add_offense(node, message: MSG)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -291,3 +291,7 @@ Layout/MultilineMethodCallIndentation:
|
||||||
EnforcedStyle: indented
|
EnforcedStyle: indented
|
||||||
Include:
|
Include:
|
||||||
- "**/*_spec.rb"
|
- "**/*_spec.rb"
|
||||||
|
|
||||||
|
Zammad/PreferNegatedIfOverUnless:
|
||||||
|
Exclude:
|
||||||
|
- 'bin/rspec'
|
||||||
|
|
|
@ -1 +1,2 @@
|
||||||
require_relative 'cop/zammad/exists_condition'
|
require_relative 'cop/zammad/exists_condition'
|
||||||
|
require_relative 'cop/zammad/prefer_negated_if_over_unless'
|
||||||
|
|
|
@ -6,19 +6,15 @@ module KnowledgeBaseHelper
|
||||||
end
|
end
|
||||||
|
|
||||||
def custom_path_if_needed(path, knowledge_base, full: false)
|
def custom_path_if_needed(path, knowledge_base, full: false)
|
||||||
return path unless knowledge_base.custom_address_matches? request
|
return path if !knowledge_base.custom_address_matches?(request)
|
||||||
|
|
||||||
custom_address = knowledge_base.custom_address_uri
|
custom_address = knowledge_base.custom_address_uri
|
||||||
return path unless custom_address
|
return path if !custom_address
|
||||||
|
|
||||||
output = path.gsub(%r{^/help}, custom_address.path || '').presence || '/'
|
custom_path = path.gsub(%r{^/help}, custom_address.path || '').presence || '/'
|
||||||
|
prefix = full ? knowledge_base.custom_path_prefix(request) : ''
|
||||||
|
|
||||||
if full
|
"#{prefix}#{custom_path}"
|
||||||
fqdn = request.headers.env['SERVER_NAME']
|
|
||||||
output = "#{custom_address.scheme}://#{custom_address.host || fqdn}#{output}"
|
|
||||||
end
|
|
||||||
|
|
||||||
output
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def translation_locale_code(translation)
|
def translation_locale_code(translation)
|
||||||
|
|
|
@ -42,7 +42,7 @@ module KnowledgeBaseRichTextHelper
|
||||||
"https://player.vimeo.com/video/#{settings[:id]}"
|
"https://player.vimeo.com/video/#{settings[:id]}"
|
||||||
end
|
end
|
||||||
|
|
||||||
return match unless url
|
return match if !url
|
||||||
|
|
||||||
"<div class='videoWrapper'><iframe id='#{settings[:provider]}#{settings[:id]}' type='text/html' src='#{url}' frameborder='0'></iframe></div>"
|
"<div class='videoWrapper'><iframe id='#{settings[:provider]}#{settings[:id]}' type='text/html' src='#{url}' frameborder='0'></iframe></div>"
|
||||||
end
|
end
|
||||||
|
|
|
@ -378,7 +378,7 @@ returns
|
||||||
def self.extract_rfc822_headers(message_meta)
|
def self.extract_rfc822_headers(message_meta)
|
||||||
blob = message_meta&.attr&.dig 'RFC822.HEADER'
|
blob = message_meta&.attr&.dig 'RFC822.HEADER'
|
||||||
|
|
||||||
return unless blob
|
return if !blob
|
||||||
|
|
||||||
parse_rfc822_headers blob
|
parse_rfc822_headers blob
|
||||||
end
|
end
|
||||||
|
|
|
@ -93,6 +93,11 @@ class KnowledgeBase < ApplicationModel
|
||||||
false
|
false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def custom_address_prefix(request)
|
||||||
|
host = custom_address.host || request.headers.env['SERVER_NAME']
|
||||||
|
"#{custom_address.scheme}://#{host}"
|
||||||
|
end
|
||||||
|
|
||||||
def full_destroy!
|
def full_destroy!
|
||||||
ChecksKbClientNotification.disable_in_all_classes!
|
ChecksKbClientNotification.disable_in_all_classes!
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@ class KnowledgeBase
|
||||||
end
|
end
|
||||||
|
|
||||||
def perform!
|
def perform!
|
||||||
raise_unprocessable unless all_ids_present?
|
raise_unprocessable if !all_ids_present?
|
||||||
|
|
||||||
KnowledgeBase::MenuItem.transaction do
|
KnowledgeBase::MenuItem.transaction do
|
||||||
KnowledgeBase::MenuItem.acts_as_list_no_update do
|
KnowledgeBase::MenuItem.acts_as_list_no_update do
|
||||||
|
|
|
@ -9,7 +9,7 @@ namespace :zammad do
|
||||||
template = config_dir.join('database', 'database.yml')
|
template = config_dir.join('database', 'database.yml')
|
||||||
destination = config_dir.join('database.yml')
|
destination = config_dir.join('database.yml')
|
||||||
|
|
||||||
raise Errno::ENOENT, "#{template} not found" unless File.exist?(template)
|
raise Errno::ENOENT, "#{template} not found" if !File.exist?(template)
|
||||||
|
|
||||||
if File.exist?(destination)
|
if File.exist?(destination)
|
||||||
next if FileUtils.identical?(template, destination)
|
next if FileUtils.identical?(template, destination)
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
begin
|
begin
|
||||||
load File.expand_path('../bin/spring', __dir__)
|
load File.expand_path('../bin/spring', __dir__)
|
||||||
rescue LoadError => e
|
rescue LoadError => e
|
||||||
raise unless e.message.include?('spring')
|
raise if !e.message.include?('spring')
|
||||||
end
|
end
|
||||||
|
|
||||||
dir = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
dir = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
begin
|
begin
|
||||||
load File.expand_path('../bin/spring', __dir__)
|
load File.expand_path('../bin/spring', __dir__)
|
||||||
rescue LoadError => e
|
rescue LoadError => e
|
||||||
raise unless e.message.include?('spring')
|
raise if !e.message.include?('spring')
|
||||||
end
|
end
|
||||||
|
|
||||||
dir = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
dir = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
||||||
|
|
|
@ -67,7 +67,7 @@ module DbMigrationHelper
|
||||||
def without_column(from_table, column:)
|
def without_column(from_table, column:)
|
||||||
suppress_messages do
|
suppress_messages do
|
||||||
Array(column).each do |elem|
|
Array(column).each do |elem|
|
||||||
next unless column_exists?(from_table, elem)
|
next if !column_exists?(from_table, elem)
|
||||||
|
|
||||||
remove_column(from_table, elem)
|
remove_column(from_table, elem)
|
||||||
end
|
end
|
||||||
|
|
|
@ -859,7 +859,7 @@ RSpec.describe 'Ticket zoom', type: :system do
|
||||||
|
|
||||||
image_a.height.times do |y|
|
image_a.height.times do |y|
|
||||||
image_a.row(y).each_with_index do |pixel, x|
|
image_a.row(y).each_with_index do |pixel, x|
|
||||||
return false unless pixel == image_b[x, y]
|
return false if pixel != image_b[x, y]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -514,7 +514,7 @@ class TestCase < ActiveSupport::TestCase
|
||||||
|
|
||||||
begin
|
begin
|
||||||
elements = instance.find_elements(find_element_key => params[param_key])
|
elements = instance.find_elements(find_element_key => params[param_key])
|
||||||
.tap { |e| e.slice!(1..-1) unless params[:all] }
|
.tap { |e| e.slice!(1..-1) if !params[:all] }
|
||||||
|
|
||||||
if elements.empty?
|
if elements.empty?
|
||||||
return if params[:only_if_exists] == true
|
return if params[:only_if_exists] == true
|
||||||
|
|
Loading…
Reference in a new issue