DEV: Update to lastest rubocop-discourse

This commit is contained in:
Loïc Guitaut 2024-05-27 12:27:13 +02:00 committed by Loïc Guitaut
parent 3b6d4c830f
commit 2a28cda15c
164 changed files with 269 additions and 263 deletions

View File

@ -164,6 +164,10 @@ jobs:
with:
fetch-depth: 1
- name: Modify path for libpq
if: matrix.os == 'macos-latest'
run: echo "/opt/homebrew/opt/libpq/bin" >> $GITHUB_PATH
- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:

View File

@ -429,14 +429,20 @@ GEM
parser (>= 3.3.1.0)
rubocop-capybara (2.20.0)
rubocop (~> 1.41)
rubocop-discourse (3.7.1)
rubocop-discourse (3.8.0)
activesupport (>= 6.1)
rubocop (>= 1.59.0)
rubocop-capybara (>= 2.0.0)
rubocop-factory_bot (>= 2.0.0)
rubocop-rails (>= 2.25.0)
rubocop-rspec (>= 2.25.0)
rubocop-factory_bot (2.25.1)
rubocop (~> 1.41)
rubocop-rails (2.25.0)
activesupport (>= 4.2.0)
rack (>= 1.1)
rubocop (>= 1.33.0, < 2.0)
rubocop-ast (>= 1.31.1, < 2.0)
rubocop-rspec (2.29.2)
rubocop (~> 1.40)
rubocop-capybara (~> 2.17)

View File

@ -73,7 +73,7 @@ class Admin::EmailTemplatesController < Admin::AdminController
def update
et = params[:email_template]
key = params[:id]
raise Discourse::NotFound unless self.class.email_keys.include?(params[:id])
raise Discourse::NotFound if self.class.email_keys.exclude?(params[:id])
subject_result = update_key("#{key}.subject_template", et[:subject])
body_result = update_key("#{key}.text_body_template", et[:body])
@ -110,7 +110,7 @@ class Admin::EmailTemplatesController < Admin::AdminController
def revert
key = params[:id]
raise Discourse::NotFound unless self.class.email_keys.include?(params[:id])
raise Discourse::NotFound if self.class.email_keys.exclude?(params[:id])
revert_and_log("#{key}.subject_template", "#{key}.text_body_template")
render_serialized(

View File

@ -137,7 +137,7 @@ class Admin::GroupsController < Admin::StaffController
notify_users
]
custom_fields = DiscoursePluginRegistry.editable_group_custom_fields
permitted << { custom_fields: custom_fields } unless custom_fields.blank?
permitted << { custom_fields: custom_fields } if custom_fields.present?
permitted << { associated_group_ids: [] } if guardian.can_associate_groups?

View File

@ -279,7 +279,7 @@ class Admin::ThemesController < Admin::AdminController
def bulk_destroy
themes = Theme.where(id: params[:theme_ids])
raise Discourse::InvalidParameters.new(:id) unless themes.present?
raise Discourse::InvalidParameters.new(:id) if themes.blank?
ActiveRecord::Base.transaction do
themes.each { |theme| StaffActionLogger.new(current_user).log_theme_destroy(theme) }
@ -313,7 +313,7 @@ class Admin::ThemesController < Admin::AdminController
def get_translations
params.require(:locale)
unless I18n.available_locales.include?(params[:locale].to_sym)
if I18n.available_locales.exclude?(params[:locale].to_sym)
raise Discourse::InvalidParameters.new(:locale)
end
@ -445,7 +445,7 @@ class Admin::ThemesController < Admin::AdminController
locale = theme_params[:locale].presence
if locale
unless I18n.available_locales.include?(locale.to_sym)
if I18n.available_locales.exclude?(locale.to_sym)
raise Discourse::InvalidParameters.new(:locale)
end
I18n.locale = locale

View File

@ -619,7 +619,7 @@ class Admin::UsersController < Admin::StaffController
private
def perform_post_action
return unless params[:post_id].present? && params[:post_action].present?
return if params[:post_id].blank? || params[:post_action].blank?
if post = Post.where(id: params[:post_id]).first
case params[:post_action]

View File

@ -837,7 +837,7 @@ class ApplicationController < ActionController::Base
end
def ensure_logged_in
raise Discourse::NotLoggedIn.new unless current_user.present?
raise Discourse::NotLoggedIn.new if current_user.blank?
end
def ensure_staff

View File

@ -269,7 +269,7 @@ class CategoriesController < ApplicationController
@category =
Category.includes(:category_setting).find_by_slug_path(params[:category_slug].split("/"))
raise Discourse::NotFound unless @category.present?
raise Discourse::NotFound if @category.blank?
if !guardian.can_see?(@category)
if SiteSetting.detailed_404 && group = @category.access_category_via_group

View File

@ -144,7 +144,7 @@ class EmbedController < ApplicationController
topic_embeds.each do |te|
url = te.embed_url
url = "#{url}#discourse-comments" unless params[:embed_url].include?(url)
url = "#{url}#discourse-comments" if params[:embed_url].exclude?(url)
if te.topic.present?
by_url[url] = I18n.t("embed.replies", count: te.topic.posts_count - 1)
else

View File

@ -15,7 +15,7 @@ class FinishInstallationController < ApplicationController
@user = User.new
if request.post?
email = params[:email].strip
raise Discourse::InvalidParameters.new unless @allowed_emails.include?(email)
raise Discourse::InvalidParameters.new if @allowed_emails.exclude?(email)
if existing_user = User.find_by_email(email)
@user = existing_user

View File

@ -145,7 +145,7 @@ class ListController < ApplicationController
def category_default
canonical_url "#{Discourse.base_url_no_prefix}#{@category.url}"
view_method = @category.default_view
view_method = "latest" unless %w[latest top].include?(view_method)
view_method = "latest" if %w[latest top].exclude?(view_method)
self.public_send(view_method, category: @category.id)
end

View File

@ -15,13 +15,13 @@ class MetadataController < ApplicationController
end
def app_association_android
raise Discourse::NotFound unless SiteSetting.app_association_android.present?
raise Discourse::NotFound if SiteSetting.app_association_android.blank?
expires_in 1.minutes
render plain: SiteSetting.app_association_android, content_type: "application/json"
end
def app_association_ios
raise Discourse::NotFound unless SiteSetting.app_association_ios.present?
raise Discourse::NotFound if SiteSetting.app_association_ios.blank?
expires_in 1.minutes
render plain: SiteSetting.app_association_ios, content_type: "application/json"
end

View File

@ -477,7 +477,7 @@ class PostsController < ApplicationController
post = find_post_from_params
raise Discourse::InvalidParameters.new(:post) if post.blank?
raise Discourse::NotFound unless post.revisions.present?
raise Discourse::NotFound if post.revisions.blank?
RateLimiter.new(
current_user,

View File

@ -16,7 +16,7 @@ class ReviewablesController < ApplicationController
end
status = (params[:status] || "pending").to_sym
raise Discourse::InvalidParameters.new(:status) unless allowed_statuses.include?(status)
raise Discourse::InvalidParameters.new(:status) if allowed_statuses.exclude?(status)
topic_id = params[:topic_id] ? params[:topic_id].to_i : nil
category_id = params[:category_id] ? params[:category_id].to_i : nil
@ -185,7 +185,7 @@ class ReviewablesController < ApplicationController
end
editable = reviewable.editable_for(guardian)
raise Discourse::InvalidAccess.new unless editable.present?
raise Discourse::InvalidAccess.new if editable.blank?
# Validate parameters are all editable
edit_params = params[:reviewable] || {}

View File

@ -220,7 +220,7 @@ class SearchController < ApplicationController
end
if search_context.present?
unless SearchController.valid_context_types.include?(search_context[:type])
if SearchController.valid_context_types.exclude?(search_context[:type])
raise Discourse::InvalidParameters.new(:search_context)
end
raise Discourse::InvalidParameters.new(:search_context) if search_context[:id].blank?

View File

@ -231,7 +231,7 @@ class TagsController < ::ApplicationController
if tag_group_name
tag_group =
TagGroup.find_by(name: tag_group_name) || TagGroup.create!(name: tag_group_name)
tag.tag_groups << tag_group unless tag.tag_groups.include?(tag_group)
tag.tag_groups << tag_group if tag.tag_groups.exclude?(tag_group)
end
end
end

View File

@ -15,7 +15,7 @@ class ThemeJavascriptsController < ApplicationController
before_action :is_asset_path, :no_cookies, :apply_cdn_headers, only: %i[show show_map show_tests]
def show
raise Discourse::NotFound unless last_modified.present?
raise Discourse::NotFound if last_modified.blank?
return render body: nil, status: 304 if not_modified?
# Security: safe due to route constraint
@ -34,7 +34,7 @@ class ThemeJavascriptsController < ApplicationController
end
def show_map
raise Discourse::NotFound unless last_modified.present?
raise Discourse::NotFound if last_modified.blank?
return render body: nil, status: 304 if not_modified?
# Security: safe due to route constraint

View File

@ -1394,7 +1394,7 @@ class TopicsController < ApplicationController
end
def check_for_status_presence(key, attr)
invalid_param(key) unless %w[pinned pinned_globally visible closed archived].include?(attr)
invalid_param(key) if %w[pinned pinned_globally visible closed archived].exclude?(attr)
end
def invalid_param(key)

View File

@ -1143,7 +1143,7 @@ class UsersController < ApplicationController
1.hour,
).performed!
@user = User.find_by_username_or_email(params[:username])
raise Discourse::InvalidAccess.new unless @user.present?
raise Discourse::InvalidAccess.new if @user.blank?
raise Discourse::InvalidAccess.new unless @user.confirm_password?(params[:password])
elsif user_key = session[SessionController::ACTIVATE_USER_KEY]
RateLimiter.new(nil, "activate-edit-email-hr-user-key-#{user_key}", 5, 1.hour).performed!
@ -1342,9 +1342,7 @@ class UsersController < ApplicationController
return render json: failed_json, status: 422
end
unless SiteSetting.selectable_avatars.include?(upload)
return render json: failed_json, status: 422
end
return render json: failed_json, status: 422 if SiteSetting.selectable_avatars.exclude?(upload)
user.uploaded_avatar_id = upload.id
@ -2096,7 +2094,7 @@ class UsersController < ApplicationController
]
editable_custom_fields = User.editable_user_custom_fields(by_staff: current_user.try(:staff?))
permitted << { custom_fields: editable_custom_fields } unless editable_custom_fields.blank?
permitted << { custom_fields: editable_custom_fields } if editable_custom_fields.present?
permitted.concat UserUpdater::OPTION_ATTR
permitted.concat UserUpdater::CATEGORY_IDS.keys.map { |k| { k => [] } }
permitted.concat UserUpdater::TAG_NAMES.keys

View File

@ -45,7 +45,7 @@ module UserNotificationsHelper
end
end
return result unless result.blank?
return result if result.present?
# If there is no first paragraph with text, return the first paragraph with
# something else (an image) or div (a onebox).
@ -66,7 +66,7 @@ module UserNotificationsHelper
def show_username_on_post(post)
return true unless SiteSetting.enable_names?
return true unless SiteSetting.display_name_on_posts?
return true unless post.user.name.present?
return true if post.user.name.blank?
normalize_name(post.user.name) != normalize_name(post.user.username)
end

View File

@ -36,7 +36,7 @@ class Jobs::Onceoff < ::Jobs::Base
.select { |klass| klass < self }
.each do |klass|
job_name = name_for(klass)
Jobs.enqueue(job_name.underscore.to_sym) unless previously_ran.include?(job_name)
Jobs.enqueue(job_name.underscore.to_sym) if previously_ran.exclude?(job_name)
end
end
end

View File

@ -11,7 +11,7 @@ module Jobs
def execute(args)
@user = User.find_by(id: args[:user_id])
return unless user.present?
return if user.blank?
# We need to account for the case where the instance allows
# name to be empty by falling back to username.

View File

@ -9,7 +9,7 @@ module Jobs
sidekiq_options queue: "low"
def execute(args)
raise Discourse::InvalidParameters.new(:topic_link_id) unless args[:topic_link_id].present?
raise Discourse::InvalidParameters.new(:topic_link_id) if args[:topic_link_id].blank?
topic_link = TopicLink.find_by(id: args[:topic_link_id], internal: false, crawled_at: nil)
return if topic_link.blank?

View File

@ -4,7 +4,7 @@ module Jobs
class CreateLinkedTopic < ::Jobs::Base
def execute(args)
reference_post = Post.find_by(id: args[:post_id])
return unless reference_post.present?
return if reference_post.blank?
parent_topic = reference_post.topic
return unless parent_topic.present? && parent_topic.regular?
parent_topic_id = parent_topic.id

View File

@ -4,7 +4,7 @@ class Jobs::CreateUserReviewable < ::Jobs::Base
attr_reader :reviewable
def execute(args)
raise Discourse::InvalidParameters unless args[:user_id].present?
raise Discourse::InvalidParameters if args[:user_id].blank?
reason = nil
reason ||= :must_approve_users if SiteSetting.must_approve_users?

View File

@ -38,7 +38,7 @@ module Jobs
end
def validate_argument!(key)
raise Discourse::InvalidParameters.new(key) unless @arguments[key].present?
raise Discourse::InvalidParameters.new(key) if @arguments[key].blank?
end
def send_webhook!

View File

@ -4,14 +4,14 @@ module Jobs
class FeatureTopicUsers < ::Jobs::Base
def execute(args)
topic_id = args[:topic_id]
raise Discourse::InvalidParameters.new(:topic_id) unless topic_id.present?
raise Discourse::InvalidParameters.new(:topic_id) if topic_id.blank?
topic = Topic.find_by(id: topic_id)
# Topic may be hard deleted due to spam, no point complaining
# we would have to look at the topics table id sequence to find cases
# where this was called with an invalid id, no point really
return unless topic.present?
return if topic.blank?
topic.feature_topic_users(args)
end

View File

@ -4,10 +4,10 @@ module Jobs
# Asynchronously send an email
class InviteEmail < ::Jobs::Base
def execute(args)
raise Discourse::InvalidParameters.new(:invite_id) unless args[:invite_id].present?
raise Discourse::InvalidParameters.new(:invite_id) if args[:invite_id].blank?
invite = Invite.find_by(id: args[:invite_id])
return unless invite.present?
return if invite.blank?
message = InviteMailer.send_invite(invite, invite_to_topic: args[:invite_to_topic])
Email::Sender.new(message, :invite).send

View File

@ -4,7 +4,7 @@ module Jobs
# Asynchronously send an email
class InvitePasswordInstructionsEmail < ::Jobs::Base
def execute(args)
raise Discourse::InvalidParameters.new(:username) unless args[:username].present?
raise Discourse::InvalidParameters.new(:username) if args[:username].blank?
user = User.find_by_username_or_email(args[:username])
message = InviteMailer.send_password_instructions(user)
Email::Sender.new(message, :invite_password_instructions).send

View File

@ -17,7 +17,7 @@ module Jobs
moved_by = User.find_by(id: args[:moved_by_id])
posts.each do |p|
unless users_notified.include?(p.user_id)
if users_notified.exclude?(p.user_id)
p.user.notifications.create(
notification_type: Notification.types[:moved_post],
topic_id: p.topic_id,

View File

@ -8,7 +8,7 @@ module Jobs
DistributedMutex.synchronize("process_post_#{args[:post_id]}", validity: 10.minutes) do
post = Post.find_by(id: args[:post_id])
# two levels of deletion
return unless post.present? && post.topic.present?
return if post.blank? || post.topic.blank?
orig_cooked = post.cooked
recooked = nil

View File

@ -152,7 +152,7 @@ module Jobs
def should_download_image?(src, post = nil)
# make sure we actually have a url
return false unless src.present?
return false if src.blank?
local_bases =
[Discourse.base_url, Discourse.asset_host, SiteSetting.external_emoji_url.presence].compact

View File

@ -22,7 +22,7 @@ module Jobs
.each do |push_url, group|
notifications = group.map { |client_id, _| notification.merge(client_id: client_id) }
next unless push_url.present?
next if push_url.blank?
result =
Excon.post(

View File

@ -5,7 +5,7 @@ module Jobs
def execute(args)
topic_id = args[:topic_id]
return unless topic_id.present?
return if topic_id.blank?
topic = Topic.find_by(id: topic_id)
topic.remove_banner!(Discourse.system_user) if topic.present?

View File

@ -4,7 +4,7 @@ module Jobs
# Asynchronously retrieve a topic from an embedded site
class RetrieveTopic < ::Jobs::Base
def execute(args)
raise Discourse::InvalidParameters.new(:embed_url) unless args[:embed_url].present?
raise Discourse::InvalidParameters.new(:embed_url) if args[:embed_url].blank?
user = nil
user = User.find_by(id: args[:user_id]) if args[:user_id]

View File

@ -5,8 +5,8 @@ require "image_sizer"
module Jobs
class SendSystemMessage < ::Jobs::Base
def execute(args)
raise Discourse::InvalidParameters.new(:user_id) unless args[:user_id].present?
raise Discourse::InvalidParameters.new(:message_type) unless args[:message_type].present?
raise Discourse::InvalidParameters.new(:user_id) if args[:user_id].blank?
raise Discourse::InvalidParameters.new(:message_type) if args[:message_type].blank?
user = User.find_by(id: args[:user_id])
return if user.blank?

View File

@ -3,7 +3,7 @@
module Jobs
class SyncTopicUserBookmarked < ::Jobs::Base
def execute(args = {})
raise Discourse::InvalidParameters.new(:topic_id) unless args[:topic_id].present?
raise Discourse::InvalidParameters.new(:topic_id) if args[:topic_id].blank?
DB.exec(<<~SQL, topic_id: args[:topic_id])
SELECT bookmarks.user_id, COUNT(*)

View File

@ -7,7 +7,7 @@ class Jobs::TruncateUserFlagStats < ::Jobs::Base
# To give users a chance to improve, we limit their flag stats to the last N flags
def execute(args)
raise Discourse::InvalidParameters.new(:user_ids) unless args[:user_ids].present?
raise Discourse::InvalidParameters.new(:user_ids) if args[:user_ids].blank?
args[:user_ids].each do |u|
user_stat = UserStat.find_by(user_id: u)

View File

@ -5,7 +5,7 @@ module Jobs
def execute(args)
topic_id = args[:topic_id]
return unless topic_id.present?
return if topic_id.blank?
topic = Topic.find_by(id: topic_id)
topic.update_pinned(false) if topic.present?

View File

@ -70,7 +70,7 @@ module Jobs
.with_deleted
.joins(quoted("posts.id"))
.where("p.user_id = :user_id", user_id: @user_id)
.find_each { |post| update_post(post) unless updated_post_ids.include?(post.id) }
.find_each { |post| update_post(post) if updated_post_ids.exclude?(post.id) }
end
def update_revisions

View File

@ -27,8 +27,8 @@ module Jobs
end
def execute(args)
raise Discourse::InvalidParameters.new(:user_id) unless args[:user_id].present?
raise Discourse::InvalidParameters.new(:type) unless args[:type].present?
raise Discourse::InvalidParameters.new(:user_id) if args[:user_id].blank?
raise Discourse::InvalidParameters.new(:type) if args[:type].blank?
# This is for performance. Quit out fast without doing a bunch
# of extra work when emails are disabled.

View File

@ -506,7 +506,7 @@ class UserNotifications < ActionMailer::Base
if post && SiteSetting.enable_names && SiteSetting.display_name_on_email_from
name = User.where(id: notification_data[:original_user_id] || post.user_id).pick(:name)
user_name = name unless name.blank?
user_name = name if name.present?
end
allow_reply_by_email = opts[:allow_reply_by_email] unless user.suspended?

View File

@ -1,24 +1,24 @@
# frozen_string_literal: true
class ApplicationRequest < ActiveRecord::Base
enum req_type: %i[
http_total
http_2xx
http_background
http_3xx
http_4xx
http_5xx
page_view_crawler
page_view_logged_in
page_view_anon
page_view_logged_in_mobile
page_view_anon_mobile
api
user_api
page_view_anon_browser
page_view_anon_browser_mobile
page_view_logged_in_browser
page_view_logged_in_browser_mobile
]
enum req_type: {
http_total: 0,
http_2xx: 1,
http_background: 2,
http_3xx: 3,
http_4xx: 4,
http_5xx: 5,
page_view_crawler: 6,
page_view_logged_in: 7,
page_view_anon: 8,
page_view_logged_in_mobile: 9,
page_view_anon_mobile: 10,
api: 11,
user_api: 12,
page_view_anon_browser: 13,
page_view_anon_browser_mobile: 14,
page_view_logged_in_browser: 15,
page_view_logged_in_browser_mobile: 16,
}
include CachedCounting

View File

@ -542,7 +542,7 @@ class Category < ActiveRecord::Base
end
def ensure_slug
return unless name.present?
return if name.blank?
self.name.strip!
@ -948,7 +948,7 @@ class Category < ActiveRecord::Base
# If the name changes, try and update the category definition topic too if it's an exact match
def rename_category_definition
return unless topic.present?
return if topic.blank?
old_name = saved_changes.transform_values(&:first)["name"]
if topic.title == I18n.t("category.topic_prefix", category: old_name)
topic.update_attribute(:title, I18n.t("category.topic_prefix", category: name))

View File

@ -49,7 +49,7 @@ class DirectoryColumn < ActiveRecord::Base
column.enabled = false
end
unless @@plugin_directory_columns.include?(directory_column.name)
if @@plugin_directory_columns.exclude?(directory_column.name)
@@plugin_directory_columns << directory_column.name
DirectoryItem.add_plugin_query(attrs[:query])
end

View File

@ -24,10 +24,10 @@ class EmbeddableHost < ActiveRecord::Base
end
end
return false unless uri.present?
return false if uri.blank?
host = uri.host
return false unless host.present?
return false if host.blank?
host << ":#{uri.port}" if uri.port.present? && uri.port != 80 && uri.port != 443

View File

@ -857,7 +857,7 @@ class Group < ActiveRecord::Base
end
def bulk_add(user_ids)
return unless user_ids.present?
return if user_ids.blank?
Group.transaction do
sql = <<~SQL

View File

@ -33,13 +33,13 @@ class GroupHistory < ActiveRecord::Base
if !params.blank?
params = params.slice(*filters)
records = records.where(action: self.actions[params[:action].to_sym]) unless params[
records = records.where(action: self.actions[params[:action].to_sym]) if params[
:action
].blank?
records = records.where(subject: params[:subject]) unless params[:subject].blank?
].present?
records = records.where(subject: params[:subject]) if params[:subject].present?
%i[acting_user target_user].each do |filter|
unless params[filter].blank?
if params[filter].present?
id = User.where(username_lower: params[filter]).pluck(:id)
records = records.where("#{filter}_id" => id)
end

View File

@ -3,7 +3,7 @@
class IncomingDomain < ActiveRecord::Base
def self.add!(uri)
name = uri.host
return unless name.present?
return if name.blank?
https = uri.scheme == "https"
port = uri.port

View File

@ -60,7 +60,7 @@ class IncomingLink < ActiveRecord::Base
self.incoming_referer_id = nil
# will set incoming_referer_id
return unless referer.present?
return if referer.blank?
parsed = URI.parse(referer)

View File

@ -129,7 +129,7 @@ class InviteRedeemer
field_val = field_params[f.id.to_s]
fields["#{User::USER_FIELD_PREFIX}#{f.id}"] = field_val[
0...UserField.max_length
] unless field_val.blank?
] if field_val.present?
end
user.custom_fields = fields
end

View File

@ -1326,14 +1326,14 @@ class Post < ActiveRecord::Base
private
def parse_quote_into_arguments(quote)
return {} unless quote.present?
return {} if quote.blank?
args = HashWithIndifferentAccess.new
quote.first.scan(/([a-z]+)\:(\d+)/).each { |arg| args[arg[0]] = arg[1].to_i }
args
end
def add_to_quoted_post_numbers(num)
return unless num.present?
return if num.blank?
self.quoted_post_numbers ||= []
self.quoted_post_numbers << num
end

View File

@ -13,7 +13,7 @@ class PostAnalyzer
end
def has_oneboxes?
return false unless @raw.present?
return false if @raw.blank?
cooked_stripped
found_oneboxes?
@ -56,7 +56,7 @@ class PostAnalyzer
# How many images are present in the post
def embedded_media_count
return 0 unless @raw.present?
return 0 if @raw.blank?
# TODO - do we need to look for tags other than img, video and audio?
cooked_stripped
@ -71,7 +71,7 @@ class PostAnalyzer
# How many attachments are present in the post
def attachment_count
return 0 unless @raw.present?
return 0 if @raw.blank?
attachments =
cooked_stripped.css("a.attachment[href^=\"#{Discourse.store.absolute_base_url}\"]")
@ -119,7 +119,7 @@ class PostAnalyzer
# Returns an array of all links in a post excluding mentions
def raw_links
return [] unless @raw.present?
return [] if @raw.blank?
return @raw_links if @raw_links.present?
@raw_links = []

View File

@ -676,7 +676,7 @@ class PostMover
end
def add_allowed_users(usernames)
return unless usernames.present?
return if usernames.blank?
names = usernames.split(",").flatten
User

View File

@ -207,7 +207,7 @@ SQL
new_posts_read = timings.size - existing.size if is_regular
timings.each_with_index do |(post_number, time), index|
unless existing.include?(index)
if existing.exclude?(index)
PostTiming.record_new_timing(
topic_id: topic_id,
post_number: post_number,

View File

@ -62,7 +62,7 @@ class Reviewable < ActiveRecord::Base
end
def self.valid_type?(type)
return false unless Reviewable.types.include?(type)
return false if Reviewable.types.exclude?(type)
type.constantize <= Reviewable
rescue NameError
false
@ -383,7 +383,7 @@ class Reviewable < ActiveRecord::Base
end
def self.viewable_by(user, order: nil, preload: true)
return none unless user.present?
return none if user.blank?
result = self.order(order || "reviewables.score desc, reviewables.created_at desc")
@ -732,7 +732,7 @@ class Reviewable < ActiveRecord::Base
private
def update_flag_stats(status:, user_ids:)
return unless %i[agreed disagreed ignored].include?(status)
return if %i[agreed disagreed ignored].exclude?(status)
# Don't count self-flags
user_ids -= [post&.user_id]

View File

@ -29,7 +29,7 @@ class ScreenedIpAddress < ActiveRecord::Base
end
def check_for_match
unless self.errors[:ip_address].present?
if self.errors[:ip_address].blank?
matched = self.class.match_for_ip_address(self.ip_address)
if matched && matched.action_type == self.action_type
self.errors.add(:ip_address, :ip_address_already_screened)

View File

@ -36,7 +36,7 @@ class SearchLog < ActiveRecord::Base
return [:error] if term.blank?
search_type = search_types[search_type]
return [:error] unless search_type.present? && ip_address.present?
return [:error] if search_type.blank? || ip_address.blank?
ip_address = nil if user_id
key = redis_key(user_id: user_id, ip_address: ip_address)

View File

@ -233,10 +233,10 @@ class Tag < ActiveRecord::Base
def update_synonym_associations
if target_tag_id && saved_change_to_target_tag_id?
target_tag.tag_groups.each do |tag_group|
tag_group.tags << self unless tag_group.tags.include?(self)
tag_group.tags << self if tag_group.tags.exclude?(self)
end
target_tag.categories.each do |category|
category.tags << self unless category.tags.include?(self)
category.tags << self if category.tags.exclude?(self)
end
end
end

View File

@ -23,7 +23,7 @@ class ThemeField < ActiveRecord::Base
scope :find_by_theme_ids,
->(theme_ids) do
return none unless theme_ids.present?
return none if theme_ids.blank?
where(theme_id: theme_ids).joins(
"JOIN (
@ -34,7 +34,7 @@ class ThemeField < ActiveRecord::Base
scope :filter_locale_fields,
->(locale_codes) do
return none unless locale_codes.present?
return none if locale_codes.blank?
where(target_id: Theme.targets[:translations], name: locale_codes).joins(
DB.sql_fragment(
@ -420,7 +420,7 @@ class ThemeField < ActiveRecord::Base
if basic_html_field? || translation_field?
self.value_baked, self.error =
translation_field? ? process_translation : process_html(self.value)
self.error = nil unless self.error.present?
self.error = nil if self.error.blank?
self.compiler_version = Theme.compiler_version
CSP::Extension.clear_theme_extensions_cache!
elsif extra_js_field? || js_tests_field?

View File

@ -1372,7 +1372,7 @@ class Topic < ActiveRecord::Base
self.slug_computed_callbacks = []
def slug_for_topic(title)
return "" unless title.present?
return "" if title.blank?
slug = Slug.for(title)
# this is a hook for plugins that need to modify the generated slug
@ -1384,7 +1384,7 @@ class Topic < ActiveRecord::Base
# Even if the slug column in the database is null, topic.slug will return something:
def slug
unless slug = read_attribute(:slug)
return "" unless title.present?
return "" if title.blank?
slug = slug_for_topic(title)
if new_record?
write_attribute(:slug, slug)
@ -1445,12 +1445,12 @@ class Topic < ActiveRecord::Base
end
def clear_pin_for(user)
return unless user.present?
return if user.blank?
TopicUser.change(user.id, id, cleared_pinned_at: Time.now)
end
def re_pin_for(user)
return unless user.present?
return if user.blank?
TopicUser.change(user.id, id, cleared_pinned_at: nil)
end
@ -2062,7 +2062,7 @@ class Topic < ActiveRecord::Base
def self.publish_stats_to_clients!(topic_id, type, opts = {})
topic = Topic.find_by(id: topic_id)
return unless topic.present?
return if topic.blank?
case type
when :liked, :unliked

View File

@ -315,7 +315,7 @@ class TopicEmbed < ActiveRecord::Base
return result if result.size >= 100
end
end
return result unless result.blank?
return result if result.present?
# If there is no first paragraph, return the first div (onebox)
doc.css("div").first.to_s

View File

@ -86,7 +86,7 @@ class TopicLinkClick < ActiveRecord::Base
).first
# If no link is found...
unless link.present?
if link.blank?
# ... return the url for relative links or when using the same host
return url if url =~ %r{\A/[^/]} || uri.try(:host) == Discourse.current_hostname

View File

@ -45,7 +45,7 @@ class TranslationOverride < ActiveRecord::Base
validate :check_interpolation_keys
enum :status, %i[up_to_date outdated invalid_interpolation_keys deprecated]
enum status: { up_to_date: 0, outdated: 1, invalid_interpolation_keys: 2, deprecated: 3 }
def self.upsert!(locale, key, value)
params = { locale: locale, translation_key: key }

View File

@ -898,7 +898,7 @@ class User < ActiveRecord::Base
def password=(password)
# special case for passwordless accounts
@raw_password = password unless password.blank?
@raw_password = password if password.present?
end
def password

View File

@ -203,7 +203,7 @@ class UserProfile < ActiveRecord::Base
URI.parse(self.website).host
rescue URI::Error
end
unless allowed_domains.split("|").include?(domain)
if allowed_domains.split("|").exclude?(domain)
self.errors.add :base,
(
I18n.t(

View File

@ -49,7 +49,7 @@ class ReviewableSerializer < ApplicationSerializer
end
def claimed_by
return nil unless @options[:claimed_topics].present?
return nil if @options[:claimed_topics].blank?
@options[:claimed_topics][object.topic_id]
end

View File

@ -15,7 +15,7 @@ class UserAuthTokenSerializer < ApplicationSerializer
end
def seen_at
return object.created_at unless object.seen_at.present?
return object.created_at if object.seen_at.blank?
object.seen_at
end

View File

@ -79,7 +79,7 @@ class AnonymousShadowCreator
def resolve_username
username = I18n.t("anonymous").downcase
username = "anonymous" unless UserNameSuggester.sanitize_username(username).present?
username = "anonymous" if UserNameSuggester.sanitize_username(username).blank?
UserNameSuggester.suggest(username)
end

View File

@ -244,7 +244,7 @@ class BadgeGranter
post_ids = list.flat_map { |i| i["post_ids"] }.compact.uniq
user_ids = list.flat_map { |i| i["user_ids"] }.compact.uniq
next unless post_ids.present? || user_ids.present?
next if post_ids.blank? && user_ids.blank?
find_by_type(type).each { |badge| backfill(badge, post_ids: post_ids, user_ids: user_ids) }
end
@ -368,7 +368,7 @@ class BadgeGranter
end
if opts[:target_posts]
raise "Query did not return a post ID" unless result.post_id
unless Post.exists?(result.post_id).present?
if Post.exists?(result.post_id).blank?
raise "Query returned a non-existent post ID:\n#{result.post_id}"
end
end
@ -383,7 +383,7 @@ class BadgeGranter
def self.backfill(badge, opts = nil)
return unless SiteSetting.enable_badges
return unless badge.enabled
return unless badge.query.present?
return if badge.query.blank?
post_ids = user_ids = nil
post_ids = opts[:post_ids] if opts

View File

@ -108,7 +108,7 @@ class NotificationEmailer
return
end
return unless EMAILABLE_POST_TYPES.include?(post_type)
return if EMAILABLE_POST_TYPES.exclude?(post_type)
Jobs.enqueue_in(delay, :user_email, self.class.notification_params(notification, type))
end

View File

@ -318,7 +318,7 @@ class StaffActionLogger
end
def log_site_text_change(subject, new_text = nil, old_text = nil, opts = {})
raise Discourse::InvalidParameters.new(:subject) unless subject.present?
raise Discourse::InvalidParameters.new(:subject) if subject.blank?
UserHistory.create!(
params(opts).merge(
action: UserHistory.actions[:change_site_text],
@ -856,9 +856,7 @@ class StaffActionLogger
if opts[:changes]
old_values, new_values = get_changes(opts[:changes])
history_params[:previous_value] = old_values&.join(", ") unless opts[:changes].keys.include?(
"id",
)
history_params[:previous_value] = old_values&.join(", ") if opts[:changes].keys.exclude?("id")
history_params[:new_value] = new_values&.join(", ")
end

View File

@ -39,7 +39,7 @@ class Discourse::Cors
elsif cors_origins
origin = nil
if origin = env["HTTP_ORIGIN"]
origin = nil unless cors_origins.include?(origin)
origin = nil if cors_origins.exclude?(origin)
end
headers["Access-Control-Allow-Origin"] = origin || cors_origins[0]

View File

@ -19,7 +19,7 @@ class BackfillPostUploadReverseIndex < ActiveRecord::Migration[4.2]
def add_to_reverse_index(url, post_id)
# make sure we have a url to insert
return unless url.present?
return if url.blank?
# local uploads are relative
if index = url.index(local_base_url)
url = url[index..-1]

View File

@ -73,9 +73,9 @@ class DisallowMultiLevelsThemeComponents < ActiveRecord::Migration[5.2]
)
children.each do |child|
unless @handled.include?(
[top_parent.parent_theme_id, child.parent_theme_id, child.child_theme_id],
)
if @handled.exclude?(
[top_parent.parent_theme_id, child.parent_theme_id, child.child_theme_id],
)
migrate_child(child, top_parent)
end
end

View File

@ -27,7 +27,7 @@ class Archetype
end
def self.list
return [] unless @archetypes.present?
return [] if @archetypes.blank?
@archetypes.values
end

View File

@ -161,8 +161,8 @@ class Auth::ManagedAuthenticator < Auth::Authenticator
if bio || location
profile = user.user_profile
profile.bio_raw = bio unless profile.bio_raw.present?
profile.location = location unless profile.location.present?
profile.bio_raw = bio if profile.bio_raw.blank?
profile.location = location if profile.location.blank?
profile.save
end
end

View File

@ -317,7 +317,7 @@ class Autospec::Manager
if @queue.first && @queue.first[0] == "focus"
focus = @queue.shift
@queue.unshift([file, spec, runner])
unless spec.include?(":") && focus[1].include?(spec.split(":")[0])
if spec.exclude?(":") || focus[1].exclude?(spec.split(":")[0])
@queue.unshift(focus) if focus[1].include?(spec) || file != spec
end
else

View File

@ -153,7 +153,7 @@ module BackupRestore
RailsMultisite::ConnectionManagement.establish_connection(db: @current_db)
while pg_dump_running
message = logs.pop.strip
log(message) unless message.blank?
log(message) if message.present?
end
end

View File

@ -14,7 +14,7 @@ class BookmarksBulkAction
end
def perform!
unless BookmarksBulkAction.operations.include?(@operation[:type])
if BookmarksBulkAction.operations.exclude?(@operation[:type])
raise Discourse::InvalidParameters.new(:operation)
end
# careful these are private methods, we need send

View File

@ -18,7 +18,7 @@ class CommonPasswords
@mutex = Mutex.new
def self.common_password?(password)
return false unless password.present?
return false if password.blank?
password_list.include?(password)
end

View File

@ -183,7 +183,7 @@ class ComposerMessagesFinder
def check_get_a_room(min_users_posted: 5)
return unless @user.guardian.can_send_private_messages?
return unless educate_reply?(:notified_about_get_a_room)
return unless @details[:post_id].present?
return if @details[:post_id].blank?
return if @topic.category&.read_restricted
reply_to_user_id = Post.where(id: @details[:post_id]).pluck(:user_id)[0]

View File

@ -155,7 +155,7 @@ module CookedProcessorMixin
end
def get_size_from_image_sizes(src, image_sizes)
return unless image_sizes.present?
return if image_sizes.blank?
image_sizes.each do |image_size|
url, size = image_size[0], image_size[1]
if url && src && url.include?(src) && size && size["width"].to_i > 0 &&

View File

@ -4,7 +4,7 @@ module DirectoryHelper
def tmp_directory(prefix)
directory_cache[prefix] ||= begin
f = File.join(Rails.root, "tmp", Time.now.strftime("#{prefix}%Y%m%d%H%M%S"))
FileUtils.mkdir_p(f) unless Dir[f].present?
FileUtils.mkdir_p(f) if Dir[f].blank?
f
end
end

View File

@ -1182,7 +1182,7 @@ module Discourse
CDN_REQUEST_METHODS ||= %w[GET HEAD OPTIONS]
def self.is_cdn_request?(env, request_method)
return unless CDN_REQUEST_METHODS.include?(request_method)
return if CDN_REQUEST_METHODS.exclude?(request_method)
cdn_hostnames = GlobalSetting.cdn_hostnames
return if cdn_hostnames.blank?

View File

@ -159,7 +159,7 @@ module DiscourseTagging
parent_tag = tags.select { |t| t.id == parent_tag_ids.first }.first
original_child_tag = tags.select { |t| t.id == tag_id }.first
next unless parent_tag.present? && original_child_tag.present?
next if parent_tag.blank? || original_child_tag.blank?
parent_child_names_map[parent_tag.name] = original_child_tag.name
end

View File

@ -300,7 +300,7 @@ module Email
def reply_by_email_address
return @reply_by_email_address if @reply_by_email_address
return nil unless SiteSetting.reply_by_email_address.present?
return nil if SiteSetting.reply_by_email_address.blank?
@reply_by_email_address = SiteSetting.reply_by_email_address.dup

View File

@ -445,7 +445,7 @@ module Email
text_content_type = @mail.content_type
end
return unless text.present? || html.present?
return if text.blank? && html.blank?
if text.present?
text = trim_discourse_markers(text)

View File

@ -423,7 +423,7 @@ module Email
.css("a")
.each do |link|
begin
link["href"] = "#{site_uri}#{link["href"]}" unless URI(link["href"].to_s).host.present?
link["href"] = "#{site_uri}#{link["href"]}" if URI(link["href"].to_s).host.blank?
rescue URI::Error
# leave it
end

View File

@ -20,7 +20,7 @@ module EmailControllerHelper
take_next: false,
) do |memo, v|
memo[:current] = v[:name] if v[:value] == frequency_in_minutes && email_digests
next(memo) unless allowed_frequencies.include?(v[:name])
next(memo) if allowed_frequencies.exclude?(v[:name])
memo.tap do |m|
m[:selected] = v[:value] if m[:take_next] && email_digests

View File

@ -26,7 +26,7 @@ module Encodings
end
def self.delete_bom!(string)
string.sub!(/\A\xEF\xBB\xBF/, "") unless string.blank?
string.sub!(/\A\xEF\xBB\xBF/, "") if string.present?
string
end
end

View File

@ -407,7 +407,7 @@ class FinalDestination
def validate_uri_format
return false unless @uri && @uri.host
return false unless %w[https http].include?(@uri.scheme)
return false if %w[https http].exclude?(@uri.scheme)
# In some cases (like local/test environments) we may want to allow http URLs
# to be used for internal hosts, but only if it's the case that the host is

View File

@ -2,7 +2,7 @@
class FinalDestination::HTTP < Net::HTTP
def connect
raise ArgumentError.new("address cannot be nil or empty") unless @address.present?
raise ArgumentError.new("address cannot be nil or empty") if @address.blank?
original_open_timeout = @open_timeout
return super if @ipaddr

View File

@ -73,7 +73,7 @@ module I18n
execute_reload if @requires_reload
locale = (opts[:locale] || config.locale).to_sym
load_locale(locale) unless @loaded_locales.include?(locale)
load_locale(locale) if @loaded_locales.exclude?(locale)
results = {}
regexp = I18n::Backend::DiscourseI18n.create_search_regexp(query)
@ -99,7 +99,7 @@ module I18n
def ensure_loaded!(locale)
locale = locale.to_sym
@loaded_locales ||= []
load_locale(locale) unless @loaded_locales.include?(locale)
load_locale(locale) if @loaded_locales.exclude?(locale)
end
# In some environments such as migrations we don't want to use overrides.
@ -198,7 +198,7 @@ module I18n
key = args.shift
locale = (options[:locale] || config.locale).to_sym
load_locale(locale) unless @loaded_locales.include?(locale)
load_locale(locale) if @loaded_locales.exclude?(locale)
if @overrides_enabled
overrides = {}
@ -234,7 +234,7 @@ module I18n
locale ||= config.locale
locale = locale.to_sym
load_locale(locale) unless @loaded_locales.include?(locale)
load_locale(locale) if @loaded_locales.exclude?(locale)
exists_no_cache?(key, locale)
end

View File

@ -26,7 +26,7 @@ module HasErrors
end
def add_error(msg)
errors.add(:base, msg) unless errors[:base].include?(msg)
errors.add(:base, msg) if errors[:base].exclude?(msg)
end
def add_errors_from(obj)

View File

@ -125,7 +125,7 @@ module ImportExport
@export_data[:categories].each do |c|
c[:permissions_params].each do |group_name, _|
group_names << group_name unless auto_group_names.include?(group_name.to_s)
group_names << group_name if auto_group_names.exclude?(group_name.to_s)
end
end

View File

@ -59,7 +59,7 @@ class NewPostManager
pattern = SiteSetting.auto_silence_first_post_regex
return false unless pattern.present?
return false if pattern.blank?
return false unless is_first_post?(manager)
begin

View File

@ -29,7 +29,7 @@ class NewPostResult
if arr.empty?
@success = true
else
arr.each { |e| errors.add(:base, e) unless errors[:base].include?(e) }
arr.each { |e| errors.add(:base, e) if errors[:base].exclude?(e) }
end
end

View File

@ -182,7 +182,7 @@ module Onebox
)
response = http.head(uri.path)
unless %w[200 301 302].include?(response.code)
if %w[200 301 302].exclude?(response.code)
raise "unexpected response code #{response.code}"
end

View File

@ -23,7 +23,7 @@ module Onebox
end
def data
return nil unless %w[story comment].include?(raw["type"])
return nil if %w[story comment].exclude?(raw["type"])
html_entities = HTMLEntities.new
data = {

Some files were not shown because too many files have changed in this diff Show More