From fa5d03eae00bc8931f99598a74ffd76e0cbca3da Mon Sep 17 00:00:00 2001 From: Ivan Kuchin Date: Thu, 30 May 2024 14:28:42 +0200 Subject: [PATCH] rubocop safe autocorrect all except Rails/WhereRange --- app/components/members/table_component.rb | 2 +- .../members/user_filter_component.rb | 2 +- app/components/row_component.rb | 4 +- .../new_form_header_component.rb | 2 +- app/components/user_filter_component.rb | 2 +- app/contracts/custom_actions/cu_contract.rb | 2 +- app/contracts/versions/base_contract.rb | 6 +- app/controllers/admin/backups_controller.rb | 12 +- .../concerns/accounts/current_user.rb | 8 +- .../work_packages/bulk_controller.rb | 6 +- app/helpers/search_helper.rb | 24 +- app/helpers/users_helper.rb | 1 - app/helpers/work_packages_helper.rb | 74 +++--- app/mailers/work_package_mailer.rb | 12 +- .../activities/base_activity_provider.rb | 30 +-- app/models/application_record.rb | 1 - app/models/attachment.rb | 12 +- app/models/queries/days/day_query.rb | 2 +- .../selects/work_package_select.rb | 13 +- app/models/query.rb | 2 +- app/models/query/highlighting.rb | 2 +- app/models/repository/git.rb | 2 +- app/models/repository/subversion.rb | 2 +- app/models/work_package/pdf_export/gantt.rb | 4 +- .../pdf_export/work_package_to_pdf.rb | 2 +- app/seeders/basic_data/project_role_seeder.rb | 2 +- app/services/base_services/delete.rb | 2 +- app/services/base_services/write.rb | 2 +- app/services/custom_actions/update_service.rb | 4 +- app/services/grids/copy_service.rb | 2 +- app/services/members/delete_service.rb | 2 +- .../create_from_model_service.rb | 4 +- app/services/oauth_clients/create_service.rb | 2 +- app/services/roles/delete_service.rb | 4 +- app/services/roles/set_attributes_service.rb | 2 +- app/services/users/create_service.rb | 2 +- app/services/users/set_attributes_service.rb | 2 +- app/services/users/update_service.rb | 2 +- .../work_package_members/delete_service.rb | 2 +- app/views/journals/index.atom.builder | 10 +- app/workers/application_job.rb | 2 +- app/workers/backup_job.rb | 12 +- .../scm/create_remote_repository_job.rb | 2 +- app/workers/scm/relocate_repository_job.rb | 2 +- config/application.rb | 33 ++- config/initializers/acts_as_watchable.rb | 4 +- config/initializers/custom_field_format.rb | 1 - db/migrate/20240123151246_create_good_jobs.rb | 15 +- ..._on_priority_created_at_when_unfinished.rb | 7 +- ...240123151250_create_good_job_executions.rb | 2 +- ..._good_job_cron_indexes_with_conditional.rb | 20 +- ...d_project_custom_fields_in_all_projects.rb | 9 +- ...0306154735_create_good_job_labels_index.rb | 6 +- ...ndex_good_job_jobs_for_candidate_lookup.rb | 7 +- ...0240311111957_enable_unaccent_extension.rb | 86 +++---- lib/api/decorators/linked_resource.rb | 4 +- lib/api/errors/unauthenticated.rb | 2 +- lib/api/errors/unsupported_media_type.rb | 2 +- lib/api/utilities/meta_property.rb | 2 +- lib/api/utilities/payload_representer.rb | 8 +- lib/api/v3/activities/activities_api.rb | 6 +- .../activities_by_work_package_api.rb | 4 +- lib/api/v3/activities/activity_representer.rb | 4 +- lib/api/v3/backups/backups_api.rb | 2 +- .../schemas/membership_schema_representer.rb | 5 +- ...ery_filter_instance_payload_representer.rb | 2 +- ..._instance_schema_collection_representer.rb | 2 +- .../schemas/query_schema_representer.rb | 5 +- .../schemas/version_schema_representer.rb | 5 +- .../work_package_at_timestamp_representer.rb | 4 +- lib/open_project/plugins/acts_as_op_engine.rb | 4 +- .../filters/autolink_filter.rb | 3 +- .../filters/syntax_highlight_filter.rb | 4 +- .../filters/table_of_contents_filter.rb | 2 +- .../dsl/work_package_autocompleter_input.rb | 2 +- lib/tabular_form_builder.rb | 4 +- lib_static/open_project/acts/favorable.rb | 1 + lib_static/open_project/acts/watchable.rb | 8 +- .../lib/acts/journalized/journalized.rb | 4 +- .../common/autocomplete_preview.rb | 1 - .../lib/omni_auth/flexible_builder.rb | 4 +- .../lib/omni_auth/flexible_strategy.rb | 2 +- .../lib/open_project/auth_saml/engine.rb | 14 +- .../open_project/backlogs/burndown/series.rb | 2 +- .../backlogs/burndown/series_raw_data.rb | 2 +- .../backlogs/mixins/prevent_issue_sti.rb | 2 +- .../patches/permitted_params_patch.rb | 2 +- .../bim/bcf/viewpoints/create_service.rb | 2 +- .../lib/open_project/bim/bcf_xml/exporter.rb | 2 +- .../open_project/bim/patches/type_patch.rb | 2 +- .../services/boards/base_create_service.rb | 2 +- .../app/models/time_entries/scopes/ongoing.rb | 3 +- .../app/controllers/gantt/menus_controller.rb | 2 +- .../services/upsert_github_user_spec.rb | 4 +- .../grids/schemas/grid_schema_representer.rb | 5 +- .../services/grids/set_attributes_service.rb | 2 +- .../ldap_groups/synchronize_groups_service.rb | 4 +- .../meetings/meeting_filters_component.rb | 2 +- .../forms/meeting_agenda_item/meeting_form.rb | 13 +- .../app/services/meetings/create_service.rb | 1 - .../journal_formatter/agenda_item_position.rb | 2 +- .../controllers/meetings_controller_spec.rb | 1 + .../structured_meeting_crud_spec.rb | 2 +- modules/meeting/spec/models/meeting_spec.rb | 2 +- .../lib/open_project/openid_connect/engine.rb | 18 +- .../sidebar_component.rb | 1 + modules/overviews/config/routes.rb | 6 +- .../app/models/cost_query/sql_statement.rb | 2 +- modules/reporting/lib/widget/settings.rb | 2 +- .../reporting/lib/widget/settings/fieldset.rb | 2 +- .../forms/oauth_client_form_component.rb | 4 +- .../forms/redirect_uri_form_component.rb | 4 +- ...auth_access_grant_nudge_modal_component.rb | 4 +- .../admin/oauth_application_info_component.rb | 4 +- .../oauth_application_info_copy_component.rb | 4 +- .../admin/oauth_client_info_component.rb | 4 +- .../storages/admin/redirect_uri_component.rb | 4 +- .../body.rb | 4 +- .../admin/access_management_controller.rb | 2 +- ...ally_managed_project_folders_controller.rb | 2 +- .../project_storage_members_controller.rb | 2 +- .../app/models/storages/storage_file.rb | 13 +- .../storages/file_links/create_service.rb | 2 +- .../project_storages/create_service.rb | 2 +- .../project_storages/delete_service.rb | 2 +- .../project_storages/update_service.rb | 2 +- .../storages/storages/create_service.rb | 2 +- .../set_provider_fields_attributes_service.rb | 2 +- .../spec/support/pages/team_planner.rb | 2 +- .../token_service.rb | 4 +- .../lib/open_project/xls_export/xls_views.rb | 2 +- .../contracts/backups/create_contract_spec.rb | 10 +- spec/factories/backup_factory.rb | 2 +- spec/factories/user_factory.rb | 32 +-- .../project_attributes_activity_spec.rb | 6 +- .../overview_page/shared_context.rb | 41 ++-- .../lib/acts_as_watchable/routes_spec.rb | 8 +- spec/mailers/announcement_mailer_spec.rb | 4 +- ...duce_configurable_design_variables_spec.rb | 1 - spec/models/application_record_spec.rb | 6 +- spec/models/version_spec.rb | 228 +++++++++--------- .../work_package_list_to_pdf_spec.rb | 190 +++++++-------- ...ctivities_by_work_package_resource_spec.rb | 40 +-- spec/routing/watchers_spec.rb | 2 +- .../work_packages/shared/all_days_spec.rb | 5 +- .../work_packages/shared/working_days_spec.rb | 2 +- spec/support/components/common/modal.rb | 4 +- .../pages/notifications/split_screen.rb | 2 +- .../pages/work_packages/split_work_package.rb | 2 +- .../work_packages/work_packages_timeline.rb | 2 +- spec/support/wait/handler.rb | 4 +- spec/support/webmock.rb | 3 +- spec/workers/backup_job_spec.rb | 20 +- 153 files changed, 686 insertions(+), 680 deletions(-) diff --git a/app/components/members/table_component.rb b/app/components/members/table_component.rb index d0cb617fd29..9ab1fc921b0 100644 --- a/app/components/members/table_component.rb +++ b/app/components/members/table_component.rb @@ -43,7 +43,7 @@ module Members sortable_columns :name, :mail, :status def apply_sort(model) - apply_member_scopes super(model) + apply_member_scopes super end def apply_member_scopes(model) diff --git a/app/components/members/user_filter_component.rb b/app/components/members/user_filter_component.rb index e128e44d99a..43180102d97 100644 --- a/app/components/members/user_filter_component.rb +++ b/app/components/members/user_filter_component.rb @@ -128,7 +128,7 @@ module Members end def apply_filters(params, query) - super(params, query) + super filter_shares(query, params[:shared_role_id]) if params.key?(:shared_role_id) query diff --git a/app/components/row_component.rb b/app/components/row_component.rb index 7ed07b4e4af..2a17c54a822 100644 --- a/app/components/row_component.rb +++ b/app/components/row_component.rb @@ -33,8 +33,8 @@ class RowComponent < ApplicationComponent attr_reader :table - def initialize(row:, table:, **options) - super(row, **options) + def initialize(row:, table:, **) + super(row, **) @table = table end diff --git a/app/components/settings/project_custom_fields/new_form_header_component.rb b/app/components/settings/project_custom_fields/new_form_header_component.rb index dca15e48831..de78e91c9a9 100644 --- a/app/components/settings/project_custom_fields/new_form_header_component.rb +++ b/app/components/settings/project_custom_fields/new_form_header_component.rb @@ -32,7 +32,7 @@ module Settings def breadcrumb_items [{ href: admin_index_path, text: t("label_administration") }, { href: admin_settings_project_custom_fields_path, text: t("label_project_plural") }, - { href: admin_settings_project_custom_fields_path, text: t("settings.project_attributes.heading") }, + { href: admin_settings_project_custom_fields_path, text: t("settings.project_attributes.heading") }, t("settings.project_attributes.new.heading")] end end diff --git a/app/components/user_filter_component.rb b/app/components/user_filter_component.rb index 9cd43c56598..7c047d12d0c 100644 --- a/app/components/user_filter_component.rb +++ b/app/components/user_filter_component.rb @@ -59,7 +59,7 @@ class UserFilterComponent < IndividualPrincipalBaseFilterComponent protected def apply_filters(params, query) - super(params, query) + super filter_status query, status_param(params) query diff --git a/app/contracts/custom_actions/cu_contract.rb b/app/contracts/custom_actions/cu_contract.rb index e2c2d65abcc..3fac14a8618 100644 --- a/app/contracts/custom_actions/cu_contract.rb +++ b/app/contracts/custom_actions/cu_contract.rb @@ -36,7 +36,7 @@ module CustomActions end def initialize(model, user = nil) - super(model, user) + super end attribute :name diff --git a/app/contracts/versions/base_contract.rb b/app/contracts/versions/base_contract.rb index 253c13e9c6b..96178fb42ba 100644 --- a/app/contracts/versions/base_contract.rb +++ b/app/contracts/versions/base_contract.rb @@ -63,10 +63,10 @@ module Versions true else case s - when 'system' + when "system" # Only admin users can set a systemwide sharing user.admin? - when 'hierarchy', 'tree' + when "hierarchy", "tree" # Only users allowed to manage versions of the root project can # set sharing to hierarchy or tree model.project.nil? || user.allowed_in_project?(:manage_versions, model.project.root) @@ -83,7 +83,7 @@ module Versions if wiki wiki.pages else - WikiPage.where('1=0') + WikiPage.where("1=0") end end diff --git a/app/controllers/admin/backups_controller.rb b/app/controllers/admin/backups_controller.rb index 4bd22d77104..b156aef9a08 100644 --- a/app/controllers/admin/backups_controller.rb +++ b/app/controllers/admin/backups_controller.rb @@ -31,7 +31,7 @@ class Admin::BackupsController < ApplicationController include ActionView::Helpers::TagHelper include BackupHelper - layout 'admin' + layout "admin" before_action :check_enabled before_action :authorize_global @@ -65,7 +65,7 @@ class Admin::BackupsController < ApplicationController rescue StandardError => e token_reset_failed! e ensure - redirect_to action: 'show' + redirect_to action: "show" end def delete_token @@ -73,7 +73,7 @@ class Admin::BackupsController < ApplicationController flash[:info] = t("backup.text_token_deleted") - redirect_to action: 'show' + redirect_to action: "show" end def default_breadcrumb @@ -105,16 +105,16 @@ class Admin::BackupsController < ApplicationController def token_reset_flash_message(token) [ - t('my.access_token.notice_reset_token', type: 'Backup'), + t("my.access_token.notice_reset_token", type: "Backup"), content_tag(:strong, token.plain_value), - t('my.access_token.token_value_warning') + t("my.access_token.token_value_warning") ] end def token_reset_failed!(error) Rails.logger.error "Failed to reset user ##{current_user.id}'s Backup token: #{error}" - flash[:error] = t('my.access_token.failed_to_reset_token', error: error.message) + flash[:error] = t("my.access_token.failed_to_reset_token", error: error.message) end def may_include_attachments? diff --git a/app/controllers/concerns/accounts/current_user.rb b/app/controllers/concerns/accounts/current_user.rb index ef2b81a36f5..a52a9ca84b4 100644 --- a/app/controllers/concerns/accounts/current_user.rb +++ b/app/controllers/concerns/accounts/current_user.rb @@ -89,7 +89,7 @@ module Accounts::CurrentUser def current_autologin_user return unless Setting::Autologin.enabled? - autologin_cookie_name = OpenProject::Configuration['autologin_cookie_name'] + autologin_cookie_name = OpenProject::Configuration["autologin_cookie_name"] autologin_token = cookies[autologin_cookie_name] return unless autologin_token @@ -105,7 +105,7 @@ module Accounts::CurrentUser end def current_rss_key_user - if params[:format] == 'atom' && params[:key] && accept_key_auth_actions.include?(params[:action]) + if params[:format] == "atom" && params[:key] && accept_key_auth_actions.include?(params[:action]) # RSS key authentication does not start a session User.find_by_rss_key(params[:key]) end @@ -183,8 +183,8 @@ module Accounts::CurrentUser format.any(:xml, :js, :json) do head :unauthorized, - 'X-Reason' => 'login needed', - 'WWW-Authenticate' => auth_header + "X-Reason" => "login needed", + "WWW-Authenticate" => auth_header end format.all { head :not_acceptable } diff --git a/app/controllers/work_packages/bulk_controller.rb b/app/controllers/work_packages/bulk_controller.rb index d834d0ec382..0951fd72de3 100644 --- a/app/controllers/work_packages/bulk_controller.rb +++ b/app/controllers/work_packages/bulk_controller.rb @@ -48,7 +48,7 @@ class WorkPackages::BulkController < ApplicationController if @call.success? flash[:notice] = t(:notice_successful_update) - redirect_back_or_default(controller: '/work_packages', action: :index, project_id: @project) + redirect_back_or_default(controller: "/work_packages", action: :index, project_id: @project) else flash[:error] = bulk_error_message(@work_packages, @call) setup_edit @@ -75,7 +75,7 @@ class WorkPackages::BulkController < ApplicationController associated: WorkPackage.associated_classes_to_address_before_destruction_of(@work_packages) } end format.json do - render json: { error_message: 'Clean up of associated objects required' }, status: 420 + render json: { error_message: "Clean up of associated objects required" }, status: 420 end end end @@ -125,6 +125,6 @@ class WorkPackages::BulkController < ApplicationController def transform_attributes(attributes) Hash(attributes) .compact_blank - .transform_values { |v| Array(v).include?('none') ? '' : v } + .transform_values { |v| Array(v).include?("none") ? "" : v } end end diff --git a/app/helpers/search_helper.rb b/app/helpers/search_helper.rb index 031371c2685..fb9c7f17e2a 100644 --- a/app/helpers/search_helper.rb +++ b/app/helpers/search_helper.rb @@ -32,11 +32,11 @@ module SearchHelper return nil unless split_text.length > 1 || text_on_not_found - result = '' + result = "" split_text.each_with_index do |words, i| if result.length > 1200 # maximum length of the preview reached - result << '...' + result << "..." break end @@ -83,7 +83,7 @@ module SearchHelper def notes_anchor(event) version = event.version.to_i - version > 1 ? "note-#{version - 1}" : '' + version > 1 ? "note-#{version - 1}" : "" end def with_notes_anchor(event, tokens) @@ -100,8 +100,8 @@ module SearchHelper def current_scope params[:scope] || - ('subprojects' unless @project.nil? || @project.descendants.active.empty?) || - ('current_project' unless @project.nil?) + ("subprojects" unless @project.nil? || @project.descendants.active.empty?) || + ("current_project" unless @project.nil?) end def link_to_previous_search_page(pagination_previous_date) @@ -109,7 +109,7 @@ module SearchHelper @search_params.merge(previous: 1, project_id: @project.try(:identifier), offset: pagination_previous_date.to_r.to_s), - class: 'navigate-left') + class: "navigate-left") end def link_to_next_search_page(pagination_next_date) @@ -117,20 +117,20 @@ module SearchHelper @search_params.merge(previous: nil, project_id: @project.try(:identifier), offset: pagination_next_date.to_r.to_s), - class: 'navigate-right') + class: "navigate-right") end private def attachment_fulltexts(event) only_if_tsv_supported(event) do - Attachment.where(id: event.attachment_ids).pluck(:fulltext).join(' ') + Attachment.where(id: event.attachment_ids).pluck(:fulltext).join(" ") end end def attachment_filenames(event) only_if_tsv_supported(event) do - event.attachments&.map(&:filename)&.join(' ') + event.attachments&.map(&:filename)&.join(" ") end end @@ -142,7 +142,7 @@ module SearchHelper def token_span(tokens, words) t = (tokens.index(words.downcase) || 0) % 4 - content_tag('span', h(words), class: "search-highlight token-#{t}") + content_tag("span", h(words), class: "search-highlight token-#{t}") end def abbreviated_text(words) @@ -154,11 +154,11 @@ module SearchHelper formatted_words end - if words[0] == ' ' + if words[0] == " " abbreviated_words = " #{abbreviated_words}" end - if words[-1] == ' ' && words.length > 1 + if words[-1] == " " && words.length > 1 abbreviated_words = "#{abbreviated_words} " end diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb index 53f56cd7546..786242f9bc8 100644 --- a/app/helpers/users_helper.rb +++ b/app/helpers/users_helper.rb @@ -115,7 +115,6 @@ module UsersHelper end def change_user_status_links(user) - build_change_user_status_action(user) do |title, name| link_to title, change_status_user_path(user, diff --git a/app/helpers/work_packages_helper.rb b/app/helpers/work_packages_helper.rb index 00567210411..5e3a566ccca 100644 --- a/app/helpers/work_packages_helper.rb +++ b/app/helpers/work_packages_helper.rb @@ -85,7 +85,7 @@ module WorkPackagesHelper if package.closed? && !options[:no_hidden] parts[:hidden_link] << content_tag(:span, I18n.t(:label_closed_work_packages), - class: 'hidden-for-sighted') + class: "hidden-for-sighted") end # Suffix part @@ -109,12 +109,12 @@ module WorkPackagesHelper # combining - prefix = parts[:prefix].join(' ') - suffix = parts[:suffix].join(' ') - link = parts[:link].join(' ').strip + prefix = parts[:prefix].join(" ") + suffix = parts[:suffix].join(" ") + link = parts[:link].join(" ").strip hidden_link = parts[:hidden_link].join - title = parts[:title].join(' ') - css_class = parts[:css_class].join(' ') + title = parts[:title].join(" ") + css_class = parts[:css_class].join(" ") # Determine path or url work_package_link = @@ -125,8 +125,8 @@ module WorkPackagesHelper end if options[:all_link] - link_text = [prefix, link].reject(&:empty?).join(' - ') - link_text = [link_text, suffix].reject(&:empty?).join(': ') + link_text = [prefix, link].reject(&:empty?).join(" - ") + link_text = [link_text, suffix].reject(&:empty?).join(": ") link_text = [hidden_link, link_text].reject(&:empty?).join link_to(link_text.html_safe, @@ -141,8 +141,8 @@ module WorkPackagesHelper title:, class: css_class) - [[prefix, html_link].reject(&:empty?).join(' - '), - suffix].reject(&:empty?).join(': ') + [[prefix, html_link].reject(&:empty?).join(" - "), + suffix].reject(&:empty?).join(": ") end.html_safe end @@ -158,41 +158,41 @@ module WorkPackagesHelper end def send_notification_option(checked = false) - content_tag(:label, for: 'send_notification', class: 'form--label-with-check-box') do - (content_tag 'span', class: 'form--check-box-container' do - boxes = hidden_field_tag('send_notification', '0', id: nil) + content_tag(:label, for: "send_notification", class: "form--label-with-check-box") do + (content_tag "span", class: "form--check-box-container" do + boxes = hidden_field_tag("send_notification", "0", id: nil) - boxes += check_box_tag('send_notification', - '1', + boxes += check_box_tag("send_notification", + "1", checked, - class: 'form--check-box') + class: "form--check-box") boxes - end) + I18n.t('notifications.send_notifications') + end) + I18n.t("notifications.send_notifications") end end # Returns a string of css classes that apply to the issue def work_package_css_classes(work_package) - s = 'work_package preview-trigger'.html_safe + s = "work_package preview-trigger".html_safe s << " status-#{work_package.status.position}" if work_package.status s << " priority-#{work_package.priority.position}" if work_package.priority - s << ' closed' if work_package.closed? - s << ' overdue' if work_package.overdue? - s << ' child' if work_package.child? - s << ' parent' unless work_package.leaf? - s << ' created-by-me' if User.current.logged? && work_package.author_id == User.current.id - s << ' assigned-to-me' if User.current.logged? && work_package.assigned_to_id == User.current.id + s << " closed" if work_package.closed? + s << " overdue" if work_package.overdue? + s << " child" if work_package.child? + s << " parent" unless work_package.leaf? + s << " created-by-me" if User.current.logged? && work_package.author_id == User.current.id + s << " assigned-to-me" if User.current.logged? && work_package.assigned_to_id == User.current.id s end def work_package_associations_to_address(associated) - ret = ''.html_safe + ret = "".html_safe - ret += content_tag(:p, I18n.t(:text_destroy_with_associated), class: 'bold') + ret += content_tag(:p, I18n.t(:text_destroy_with_associated), class: "bold") ret += content_tag(:ul) do - associated.inject(''.html_safe) do |list, associated_class| - list += content_tag(:li, associated_class.model_name.human, class: 'decorated') + associated.inject("".html_safe) do |list, associated_class| + list += content_tag(:li, associated_class.model_name.human, class: "decorated") list end @@ -202,8 +202,8 @@ module WorkPackagesHelper end def back_url_is_wp_show? - route = Rails.application.routes.recognize_path(params[:back_url] || request.env['HTTP_REFERER']) - route[:controller] == 'work_packages' && route[:action] == 'index' && route[:state]&.match?(/^\d+/) + route = Rails.application.routes.recognize_path(params[:back_url] || request.env["HTTP_REFERER"]) + route[:controller] == "work_packages" && route[:action] == "index" && route[:state]&.match?(/^\d+/) end def last_work_package_note(work_package) @@ -228,7 +228,7 @@ module WorkPackagesHelper def protected_work_packages_columns_options work_packages_columns_options - .select { |column| column[:id] == 'id' || column[:id] == 'subject' } + .select { |column| column[:id] == "id" || column[:id] == "subject" } end private @@ -239,8 +239,8 @@ module WorkPackagesHelper if description_lines[lines - 1] && work_package.description.to_s.lines.to_a.size > lines description_lines[lines - 1].strip! - while !description_lines[lines - 1].end_with?('...') - description_lines[lines - 1] = description_lines[lines - 1] + '.' + while !description_lines[lines - 1].end_with?("...") + description_lines[lines - 1] = description_lines[lines - 1] + "." end end @@ -248,7 +248,7 @@ module WorkPackagesHelper empty_element_tag else ::OpenProject::TextFormatting::Renderer.format_text( - description_lines.join(''), + description_lines.join(""), object: work_package, attribute: :description, no_nesting: true @@ -267,12 +267,12 @@ module WorkPackagesHelper h(work_package.assigned_to.name).to_s end - [responsible, assignee].compact.join('
').html_safe + [responsible, assignee].compact.join("
").html_safe end def link_to_work_package_css_classes(package, options) - classes = ['work_package'] - classes << 'closed' if package.closed? + classes = ["work_package"] + classes << "closed" if package.closed? classes << options[:class].to_s classes diff --git a/app/mailers/work_package_mailer.rb b/app/mailers/work_package_mailer.rb index 8d3a2b8410b..151506314e7 100644 --- a/app/mailers/work_package_mailer.rb +++ b/app/mailers/work_package_mailer.rb @@ -43,7 +43,7 @@ class WorkPackageMailer < ApplicationMailer references journal send_localized_mail(recipient) do - I18n.t(:'mail.mention.subject', + I18n.t(:"mail.mention.subject", user_name: author.name, id: @work_package.id, subject: @work_package.subject) @@ -75,13 +75,13 @@ class WorkPackageMailer < ApplicationMailer end def set_work_package_headers(work_package) - open_project_headers 'Project' => work_package.project.identifier, - 'WorkPackage-Id' => work_package.id, - 'WorkPackage-Author' => work_package.author.login, - 'Type' => 'WorkPackage' + open_project_headers "Project" => work_package.project.identifier, + "WorkPackage-Id" => work_package.id, + "WorkPackage-Author" => work_package.author.login, + "Type" => "WorkPackage" if work_package.assigned_to - open_project_headers 'WorkPackage-Assignee' => work_package.assigned_to.login + open_project_headers "WorkPackage-Assignee" => work_package.assigned_to.login end end end diff --git a/app/models/activities/base_activity_provider.rb b/app/models/activities/base_activity_provider.rb index 6ce3df6038d..ff537b9dcc9 100644 --- a/app/models/activities/base_activity_provider.rb +++ b/app/models/activities/base_activity_provider.rb @@ -108,7 +108,7 @@ class Activities::BaseActivityProvider end def event_datetime(event) - event['event_datetime'].is_a?(String) ? DateTime.parse(event['event_datetime']) : event['event_datetime'] + event["event_datetime"].is_a?(String) ? DateTime.parse(event["event_datetime"]) : event["event_datetime"] end def event_type(_event_data) @@ -128,12 +128,12 @@ class Activities::BaseActivityProvider # reference table is different from 'project_id' # ############################################################################# def project_id_reference_field - 'project_id' + "project_id" end def activitied_type class_name = self.class.name.demodulize - class_name.gsub('ActivityProvider', '').constantize + class_name.gsub("ActivityProvider", "").constantize end protected @@ -174,11 +174,11 @@ class Activities::BaseActivityProvider def event_params(event_data) params = { provider: self, - event_id: event_data['event_id'], - event_description: event_data['event_description'], - author_id: event_data['author_id'].to_i, - journable_id: event_data['journable_id'], - project_id: event_data['project_id'].to_i } + event_id: event_data["event_id"], + event_description: event_data["event_description"], + author_id: event_data["author_id"].to_i, + journable_id: event_data["journable_id"], + project_id: event_data["project_id"].to_i } %i[event_name event_title event_type event_description event_datetime event_path event_url].each do |a| params[a] = send(a, event_data) if self.class.method_defined? a @@ -190,12 +190,12 @@ class Activities::BaseActivityProvider end def event_projection - [[:id, 'event_id'], - [:created_at, 'event_datetime'], - [:user_id, 'author_id'], - [:notes, 'event_description'], - [:version, 'version'], - [:journable_id, 'journable_id']].map do |column, alias_name| + [[:id, "event_id"], + [:created_at, "event_datetime"], + [:user_id, "author_id"], + [:notes, "event_description"], + [:version, "version"], + [:journable_id, "journable_id"]].map do |column, alias_name| journals_table[column].as(alias_name) end end @@ -281,7 +281,7 @@ class Activities::BaseActivityProvider def event_name(event) @event_names ||= {} - @event_names[event_type(event)] ||= I18n.t(event_type(event).underscore, scope: 'events') + @event_names[event_type(event)] ||= I18n.t(event_type(event).underscore, scope: "events") end def url_helpers diff --git a/app/models/application_record.rb b/app/models/application_record.rb index 5015d2199eb..40fbed060ce 100644 --- a/app/models/application_record.rb +++ b/app/models/application_record.rb @@ -1,4 +1,3 @@ - class ApplicationRecord < ActiveRecord::Base include ::OpenProject::Acts::Watchable include ::OpenProject::Acts::Favorable diff --git a/app/models/attachment.rb b/app/models/attachment.rb index 3772a2c6ca0..874d4dca4a1 100644 --- a/app/models/attachment.rb +++ b/app/models/attachment.rb @@ -26,7 +26,7 @@ # See COPYRIGHT and LICENSE files for more details. #++ -require 'digest/md5' +require "digest/md5" class Attachment < ApplicationRecord enum status: { @@ -38,7 +38,7 @@ class Attachment < ApplicationRecord }.freeze, _prefix: true belongs_to :container, polymorphic: true - belongs_to :author, class_name: 'User' + belongs_to :author, class_name: "User" validates :author, :content_type, :filesize, :status, presence: true validates :description, length: { maximum: 255 } @@ -65,7 +65,7 @@ class Attachment < ApplicationRecord acts_as_journalized acts_as_event title: -> { file.name }, url: (Proc.new do |o| - { controller: '/attachments', action: 'download', id: o.id, filename: o.filename } + { controller: "/attachments", action: "download", id: o.id, filename: o.filename } end) mount_uploader :file, OpenProject::Configuration.file_uploader @@ -108,7 +108,7 @@ class Attachment < ApplicationRecord end def content_disposition(include_filename: true) - disposition = inlineable? ? 'inline' : 'attachment' + disposition = inlineable? ? "inline" : "attachment" if include_filename "#{disposition}; filename=#{filename}" @@ -160,7 +160,7 @@ class Attachment < ApplicationRecord alias :image? :is_image? def is_pdf? - content_type == 'application/pdf' + content_type == "application/pdf" end def is_text? @@ -194,7 +194,7 @@ class Attachment < ApplicationRecord end def filename - attributes['file'] || super + attributes["file"] || super end ## diff --git a/app/models/queries/days/day_query.rb b/app/models/queries/days/day_query.rb index a4560d9c1a4..de0163f0a87 100644 --- a/app/models/queries/days/day_query.rb +++ b/app/models/queries/days/day_query.rb @@ -43,7 +43,7 @@ class Queries::Days::DayQuery # If there are multiple filters with custom from clause (currently not possible), # the first one is applied and the rest is ignored. def apply_filters(scope) - scope = super(scope) + scope = super from_clause_filter = filters.find(&:from) scope = scope.from(from_clause_filter.from) if from_clause_filter scope diff --git a/app/models/queries/work_packages/selects/work_package_select.rb b/app/models/queries/work_packages/selects/work_package_select.rb index 38d50886502..bc5e3b72f75 100644 --- a/app/models/queries/work_packages/selects/work_package_select.rb +++ b/app/models/queries/work_packages/selects/work_package_select.rb @@ -27,19 +27,18 @@ #++ class Queries::WorkPackages::Selects::WorkPackageSelect - attr_accessor :highlightable + attr_accessor :highlightable, + :name, + :sortable_join, + :summable, + :default_order, + :association alias_method :highlightable?, :highlightable attr_reader :groupable, :sortable, :displayable - attr_accessor :name, - :sortable_join, - :summable, - :default_order, - :association - attr_writer :null_handling, :summable_select, :summable_work_packages_select diff --git a/app/models/query.rb b/app/models/query.rb index 6ec1cfe331b..80b321cd40a 100644 --- a/app/models/query.rb +++ b/app/models/query.rb @@ -190,7 +190,7 @@ class Query < ApplicationRecord end def filter_for(field) - filter = (filters || []).detect { |f| f.field.to_s == field.to_s } || super(field) + filter = (filters || []).detect { |f| f.field.to_s == field.to_s } || super filter.context = self diff --git a/app/models/query/highlighting.rb b/app/models/query/highlighting.rb index be260dd9a4a..8c41137cd8f 100644 --- a/app/models/query/highlighting.rb +++ b/app/models/query/highlighting.rb @@ -100,7 +100,7 @@ module Query::Highlighting if difference.any? errors.add(:highlighted_attributes, I18n.t(:error_attribute_not_highlightable, - attributes: difference.map(&:to_s).map(&:capitalize).join(', '))) + attributes: difference.map(&:to_s).map(&:capitalize).join(", "))) end end diff --git a/app/models/repository/git.rb b/app/models/repository/git.rb index f28f1d708bc..86477f305fe 100644 --- a/app/models/repository/git.rb +++ b/app/models/repository/git.rb @@ -50,7 +50,7 @@ class Repository::Git < Repository end def self.permitted_params(params) - super(params).merge(params.permit(:path_encoding)) + super.merge(params.permit(:path_encoding)) end def self.supported_types diff --git a/app/models/repository/subversion.rb b/app/models/repository/subversion.rb index 343ac62596c..0e6032c2e69 100644 --- a/app/models/repository/subversion.rb +++ b/app/models/repository/subversion.rb @@ -54,7 +54,7 @@ class Repository::Subversion < Repository end def self.permitted_params(params) - super(params).merge(params.permit(:login, :password)) + super.merge(params.permit(:login, :password)) end def self.supported_types diff --git a/app/models/work_package/pdf_export/gantt.rb b/app/models/work_package/pdf_export/gantt.rb index 3545c7c70e9..5b9b827b60c 100644 --- a/app/models/work_package/pdf_export/gantt.rb +++ b/app/models/work_package/pdf_export/gantt.rb @@ -96,7 +96,7 @@ module WorkPackage::PDFExport::Gantt GanttDataPageGroup = Struct.new(:index, :entry_ids, :pages) do def initialize(*args) - super(*args) + super pages.each { |page| page.group = self } end end @@ -104,7 +104,7 @@ module WorkPackage::PDFExport::Gantt GanttDataPage = Struct.new(:index, :entry_ids, :header_cells, :rows, :columns, :text_column, :width, :height, :header_row_height, :group, :lines) do def initialize(*args) - super(*args) + super rows.each { |row| row.page = self } columns.each { |column| column.page = self } self.lines = [] diff --git a/app/models/work_package/pdf_export/work_package_to_pdf.rb b/app/models/work_package/pdf_export/work_package_to_pdf.rb index 7a8a76c3142..ea69bfbe572 100644 --- a/app/models/work_package/pdf_export/work_package_to_pdf.rb +++ b/app/models/work_package/pdf_export/work_package_to_pdf.rb @@ -82,7 +82,7 @@ class WorkPackage::PDFExport::WorkPackageToPdf < Exports::Exporter def title # ____.pdf build_pdf_filename([work_package.project, work_package.type, - "##{work_package.id}", work_package.subject].join('_')) + "##{work_package.id}", work_package.subject].join("_")) end def with_images? diff --git a/app/seeders/basic_data/project_role_seeder.rb b/app/seeders/basic_data/project_role_seeder.rb index bf58496b270..7883c90d29c 100644 --- a/app/seeders/basic_data/project_role_seeder.rb +++ b/app/seeders/basic_data/project_role_seeder.rb @@ -31,7 +31,7 @@ module BasicData self.seed_data_model_key = "project_roles" def update_permissions_with_modules_data(role_data) - super(role_data) + super role_data["permissions"] += OpenProject::AccessControl.public_permissions.map(&:name) end diff --git a/app/services/base_services/delete.rb b/app/services/base_services/delete.rb index de1f9653bbc..27e5d3a6cdc 100644 --- a/app/services/base_services/delete.rb +++ b/app/services/base_services/delete.rb @@ -34,7 +34,7 @@ module BaseServices end def persist(service_result) - service_result = super(service_result) + service_result = super unless destroy(service_result.result) service_result.errors = service_result.result.errors diff --git a/app/services/base_services/write.rb b/app/services/base_services/write.rb index aceb0c57f4d..24ab3f9e16c 100644 --- a/app/services/base_services/write.rb +++ b/app/services/base_services/write.rb @@ -31,7 +31,7 @@ module BaseServices protected def persist(service_result) - service_result = super(service_result) + service_result = super unless service_result.result.save service_result.errors = service_result.result.errors diff --git a/app/services/custom_actions/update_service.rb b/app/services/custom_actions/update_service.rb index 23c02f611c5..7830ad11ffb 100644 --- a/app/services/custom_actions/update_service.rb +++ b/app/services/custom_actions/update_service.rb @@ -35,7 +35,7 @@ class CustomActions::UpdateService < CustomActions::BaseService self.user = user end - def call(attributes:, &block) - super(attributes:, action:, &block) + def call(attributes:, &) + super(attributes:, action:, &) end end diff --git a/app/services/grids/copy_service.rb b/app/services/grids/copy_service.rb index d574e5e536a..7bee216da69 100644 --- a/app/services/grids/copy_service.rb +++ b/app/services/grids/copy_service.rb @@ -46,7 +46,7 @@ module Grids end def initialize(user:, source:, contract_class: ::EmptyContract) - super(user:, source:, contract_class:) + super end protected diff --git a/app/services/members/delete_service.rb b/app/services/members/delete_service.rb index 860c82069eb..d60cb5983d8 100644 --- a/app/services/members/delete_service.rb +++ b/app/services/members/delete_service.rb @@ -40,7 +40,7 @@ class Members::DeleteService < BaseServices::Delete protected def after_perform(service_call) - super(service_call).tap do |call| + super.tap do |call| member = call.result cleanup_for_group(member) diff --git a/app/services/notifications/create_from_model_service.rb b/app/services/notifications/create_from_model_service.rb index 9713bd1cded..f51be96b049 100644 --- a/app/services/notifications/create_from_model_service.rb +++ b/app/services/notifications/create_from_model_service.rb @@ -48,7 +48,7 @@ class Notifications::CreateFromModelService MENTION_GROUP_TAG_ID_PATTERN, MENTION_GROUP_HASH_ID_PATTERN] .map { |pattern| "(?:#{pattern})" } - .join('|').freeze + .join("|").freeze # Skip looking for mentions in quoted lines completely. # We need to allow an optional single white space before the ">", because the `#text_for_mentions` @@ -264,7 +264,7 @@ class Notifications::CreateFromModelService end end - potential_text.gsub(QUOTED_LINES_PATTERN, '') + potential_text.gsub(QUOTED_LINES_PATTERN, "") end def mentioned_ids diff --git a/app/services/oauth_clients/create_service.rb b/app/services/oauth_clients/create_service.rb index 9e0e14e7598..ff0bb5b5e83 100644 --- a/app/services/oauth_clients/create_service.rb +++ b/app/services/oauth_clients/create_service.rb @@ -38,7 +38,7 @@ module OAuthClients def after_validate(params, contract_call) OAuthClient.where(integration: params[:integration]).delete_all - super(params, contract_call) + super end end end diff --git a/app/services/roles/delete_service.rb b/app/services/roles/delete_service.rb index 5f77cf7671c..9042081aef8 100644 --- a/app/services/roles/delete_service.rb +++ b/app/services/roles/delete_service.rb @@ -30,13 +30,13 @@ class Roles::DeleteService < BaseServices::Delete def persist(service_result) # after destroy permissions can not be reached @permissions = model.permissions - super(service_result) + super end protected def after_perform(service_call) - super(service_call).tap do |_call| + super.tap do |_call| ::OpenProject::Notifications.send( ::OpenProject::Events::ROLE_DESTROYED, permissions: @permissions diff --git a/app/services/roles/set_attributes_service.rb b/app/services/roles/set_attributes_service.rb index 4fb7c99c557..e6db6692076 100644 --- a/app/services/roles/set_attributes_service.rb +++ b/app/services/roles/set_attributes_service.rb @@ -29,7 +29,7 @@ module Roles class SetAttributesService < ::BaseServices::SetAttributes def set_attributes(params) - super(params) + super if model.is_a?(ProjectRole) model.permissions += OpenProject::AccessControl.public_permissions.map(&:name) diff --git a/app/services/users/create_service.rb b/app/services/users/create_service.rb index 947c4458f5c..15cc2657d05 100644 --- a/app/services/users/create_service.rb +++ b/app/services/users/create_service.rb @@ -36,7 +36,7 @@ module Users def persist(call) new_user = call.result - return super(call) unless new_user.invited? + return super unless new_user.invited? # As we're basing on the user's mail, this parameter is required # before we're able to validate the contract or user diff --git a/app/services/users/set_attributes_service.rb b/app/services/users/set_attributes_service.rb index 92b5c90d00c..63f9ef98259 100644 --- a/app/services/users/set_attributes_service.rb +++ b/app/services/users/set_attributes_service.rb @@ -37,7 +37,7 @@ module Users def set_attributes(params) self.pref = params.delete(:pref) - super(params) + super end def validate_and_result diff --git a/app/services/users/update_service.rb b/app/services/users/update_service.rb index 2bf14a6c5bb..74ce53bbc26 100644 --- a/app/services/users/update_service.rb +++ b/app/services/users/update_service.rb @@ -41,7 +41,7 @@ module Users end def persist(service_result) - service_result = super(service_result) + service_result = super if service_result.success? service_result.success = model.pref.save diff --git a/app/services/work_package_members/delete_service.rb b/app/services/work_package_members/delete_service.rb index d72835ff631..1574b02a09a 100644 --- a/app/services/work_package_members/delete_service.rb +++ b/app/services/work_package_members/delete_service.rb @@ -40,7 +40,7 @@ class WorkPackageMembers::DeleteService < BaseServices::Delete protected def after_perform(service_call) - super(service_call).tap do |call| + super.tap do |call| work_package_member = call.result cleanup_for_group(work_package_member) diff --git a/app/views/journals/index.atom.builder b/app/views/journals/index.atom.builder index 6f7aaa6855a..e0cee145af6 100644 --- a/app/views/journals/index.atom.builder +++ b/app/views/journals/index.atom.builder @@ -29,9 +29,9 @@ xml.instruct! xml.feed "xmlns" => "http://www.w3.org/2005/Atom" do xml.title title - xml.link "rel" => "self", "href" => url_for(format: 'atom', key: User.current.rss_key, only_path: false) + xml.link "rel" => "self", "href" => url_for(format: "atom", key: User.current.rss_key, only_path: false) xml.link "rel" => "alternate", "href" => home_url(only_path: false) - xml.id url_for(controller: '/homescreen', action: :index, only_path: false) + xml.id url_for(controller: "/homescreen", action: :index, only_path: false) xml.updated((journals.first ? journals.first.created_at : Time.now).xmlschema) xml.author { xml.name Setting.app_title.to_s } journals.each do |change| @@ -39,7 +39,7 @@ xml.feed "xmlns" => "http://www.w3.org/2005/Atom" do xml.entry do xml.title "#{work_package.project.name} - #{work_package.type.name} ##{work_package.id}: #{work_package.subject}" xml.link "rel" => "alternate", "href" => work_package_url(work_package) - xml.id url_for(controller: '/work_packages', action: 'show', id: work_package, journal_id: change, + xml.id url_for(controller: "/work_packages", action: "show", id: work_package, journal_id: change, only_path: false) xml.updated change.created_at.xmlschema xml.author do @@ -47,12 +47,12 @@ xml.feed "xmlns" => "http://www.w3.org/2005/Atom" do xml.email(change.user.mail) if change.user.is_a?(User) && change.user.mail.present? && change.user.pref.can_expose_mail? end xml.content "type" => "html" do - xml.text! '
    ' + xml.text! "
      " change.details.each do |detail| change_content = change.render_detail(detail, html: true) xml.text!(content_tag(:li, change_content)) if change_content.present? end - xml.text! '
    ' + xml.text! "
" xml.text! format_text(change, :notes, only_path: false) if change.notes.present? end end diff --git a/app/workers/application_job.rb b/app/workers/application_job.rb index 44643a51945..7c4b71fb871 100644 --- a/app/workers/application_job.rb +++ b/app/workers/application_job.rb @@ -61,7 +61,7 @@ class ApplicationJob < ActiveJob::Base if value.is_a?(Symbol) super(priority_number(value)) else - super(value) + super end end diff --git a/app/workers/backup_job.rb b/app/workers/backup_job.rb index 4d87468c0b7..24d8b1b8d85 100644 --- a/app/workers/backup_job.rb +++ b/app/workers/backup_job.rb @@ -26,8 +26,8 @@ # See COPYRIGHT and LICENSE files for more details. #++ -require 'tempfile' -require 'zip' +require "tempfile" +require "zip" class BackupJob < ApplicationJob include OpenProject::PostgresEnvironment @@ -135,21 +135,21 @@ class BackupJob < ApplicationJob File.open(file_name) do |file| call = Attachments::CreateService .bypass_whitelist(user:) - .call(container: backup, filename: file_name, file:, description: 'OpenProject backup') + .call(container: backup, filename: file_name, file:, description: "OpenProject backup") call.on_success do download_url = ::API::V3::Utilities::PathHelper::ApiV3Path.attachment_content(call.result.id) upsert_status( status: :success, - message: I18n.t('export.succeeded'), + message: I18n.t("export.succeeded"), payload: download_payload(download_url) ) end call.on_failure do upsert_status status: :failure, - message: I18n.t('export.failed', message: call.message) + message: I18n.t("export.failed", message: call.message) end end end @@ -253,7 +253,7 @@ class BackupJob < ApplicationJob end def failure!(error: nil) - msg = I18n.t 'backup.failed' + msg = I18n.t "backup.failed" upsert_status( status: :failure, diff --git a/app/workers/scm/create_remote_repository_job.rb b/app/workers/scm/create_remote_repository_job.rb index d72aff9ce9d..3665b260cbc 100644 --- a/app/workers/scm/create_remote_repository_job.rb +++ b/app/workers/scm/create_remote_repository_job.rb @@ -36,7 +36,7 @@ # Until then, a synchronous process is more failsafe. class SCM::CreateRemoteRepositoryJob < SCM::RemoteRepositoryJob def perform(repository) - super(repository) + super response = send_request(repository_request.merge(action: :create)) repository.root_url = response["path"] diff --git a/app/workers/scm/relocate_repository_job.rb b/app/workers/scm/relocate_repository_job.rb index c00fbc23832..f3138a1b767 100644 --- a/app/workers/scm/relocate_repository_job.rb +++ b/app/workers/scm/relocate_repository_job.rb @@ -32,7 +32,7 @@ class SCM::RelocateRepositoryJob < SCM::RemoteRepositoryJob queue_with_priority :below_normal def perform(repository) - super(repository) + super if repository.class.manages_remote? relocate_remote diff --git a/config/application.rb b/config/application.rb index ef213504f88..00f7e0cb6ec 100644 --- a/config/application.rb +++ b/config/application.rb @@ -26,12 +26,12 @@ # See COPYRIGHT and LICENSE files for more details. #++ -require_relative 'boot' +require_relative "boot" -require 'rails/all' -require 'active_support' -require 'active_support/dependencies' -require 'core_extensions' +require "rails/all" +require "active_support" +require "active_support/dependencies" +require "core_extensions" require "view_component" require "primer/view_components/engine" @@ -39,7 +39,7 @@ require "primer/view_components/engine" # you've limited to :test, :development, or :production. Bundler.require(*Rails.groups(:opf_plugins)) -require_relative '../lib_static/open_project/configuration' +require_relative "../lib_static/open_project/configuration" module OpenProject class Application < Rails::Application @@ -104,8 +104,8 @@ module OpenProject if: lambda { |_env, _code, headers, _body| # Firefox fails to properly decode gzip attachments # We thus avoid deflating if sending gzip already. - content_type = headers['Content-Type'] - content_type != 'application/x-gzip' + content_type = headers["Content-Type"] + content_type != "application/x-gzip" } config.middleware.use Rack::Attack @@ -115,14 +115,14 @@ module OpenProject # Add lookbook preview paths when enabled if OpenProject::Configuration.lookbook_enabled? - config.paths.add Primer::ViewComponents::Engine.root.join('app/components').to_s, eager_load: true + config.paths.add Primer::ViewComponents::Engine.root.join("app/components").to_s, eager_load: true config.paths.add Rails.root.join("lookbook/previews").to_s, eager_load: true - config.paths.add Primer::ViewComponents::Engine.root.join('previews').to_s, eager_load: true + config.paths.add Primer::ViewComponents::Engine.root.join("previews").to_s, eager_load: true end # Constants in lib_static should only be loaded once and never be unloaded. # That directory contains configurations and patches to rails core functionality. - config.autoload_once_paths << Rails.root.join('lib_static').to_s + config.autoload_once_paths << Rails.root.join("lib_static").to_s # Configure the relative url root to be whatever the configuration is set to. # This allows for setting the root either via config file or via environment variable. @@ -130,7 +130,7 @@ module OpenProject # than `config.exceptions_app = routes`. Otherwise Rails.application.routes.url_helpers # will not have configured prefix. # Read https://github.com/rails/rails/issues/42243 for some details. - config.relative_url_root = OpenProject::Configuration['rails_relative_url_root'] + config.relative_url_root = OpenProject::Configuration["rails_relative_url_root"] # Use our own error rendering for prettier error pages config.exceptions_app = routes @@ -167,7 +167,7 @@ module OpenProject I18n.backend.class.send(:include, I18n::Backend::Cascade) # Configure the default encoding used in templates for Ruby 1.9. - config.encoding = 'utf-8' + config.encoding = "utf-8" # Enable escaping HTML in JSON. config.active_support.escape_html_entities_in_json = true @@ -208,14 +208,13 @@ module OpenProject # Load any local configuration that is kept out of source control # (e.g. patches). - if File.exist?(File.join(File.dirname(__FILE__), 'additional_environment.rb')) - instance_eval File.read(File.join(File.dirname(__FILE__), 'additional_environment.rb')) + if File.exist?(File.join(File.dirname(__FILE__), "additional_environment.rb")) + instance_eval File.read(File.join(File.dirname(__FILE__), "additional_environment.rb")) end # initialize variable for register plugin tests config.plugins_to_test_paths = [] - config.active_job.queue_adapter = :good_job config.good_job.retry_on_unhandled_error = false @@ -236,7 +235,7 @@ module OpenProject # Return false instead of self when enqueuing is aborted from a callback. # Rails.application.config.active_job.return_false_on_aborted_enqueue = true - config.log_level = OpenProject::Configuration['log_level'].to_sym + config.log_level = OpenProject::Configuration["log_level"].to_sym # Enable the Rails 7 cache format config.active_support.cache_format_version = 7.0 diff --git a/config/initializers/acts_as_watchable.rb b/config/initializers/acts_as_watchable.rb index 03ef5dafada..14d752ce61d 100644 --- a/config/initializers/acts_as_watchable.rb +++ b/config/initializers/acts_as_watchable.rb @@ -3,6 +3,6 @@ # In development and non-eager loaded mode, we need to register the acts_as_watchable models manually # as no eager loading takes place Rails.application.config.after_initialize do - OpenProject::Acts::Watchable::Registry - .add(WorkPackage, Message, Forum, News, Meeting, Wiki, WikiPage) + OpenProject::Acts::Watchable::Registry + .add(WorkPackage, Message, Forum, News, Meeting, Wiki, WikiPage) end diff --git a/config/initializers/custom_field_format.rb b/config/initializers/custom_field_format.rb index 22ad44f9663..5a250e1569d 100644 --- a/config/initializers/custom_field_format.rb +++ b/config/initializers/custom_field_format.rb @@ -79,5 +79,4 @@ OpenProject::CustomFieldFormat.map do |fields| label: nil, order: 11, formatter: "CustomValue::EmptyStrategy") - end diff --git a/db/migrate/20240123151246_create_good_jobs.rb b/db/migrate/20240123151246_create_good_jobs.rb index 83cb7893fae..a476bd5069d 100644 --- a/db/migrate/20240123151246_create_good_jobs.rb +++ b/db/migrate/20240123151246_create_good_jobs.rb @@ -29,12 +29,15 @@ class CreateGoodJobs < ActiveRecord::Migration[7.0] end add_index :good_jobs, :scheduled_at, where: "(finished_at IS NULL)", name: :index_good_jobs_on_scheduled_at - add_index :good_jobs, [:queue_name, :scheduled_at], where: "(finished_at IS NULL)", name: :index_good_jobs_on_queue_name_and_scheduled_at - add_index :good_jobs, [:active_job_id, :created_at], name: :index_good_jobs_on_active_job_id_and_created_at - add_index :good_jobs, :concurrency_key, where: "(finished_at IS NULL)", name: :index_good_jobs_on_concurrency_key_when_unfinished - add_index :good_jobs, [:cron_key, :created_at], name: :index_good_jobs_on_cron_key_and_created_at - add_index :good_jobs, [:cron_key, :cron_at], name: :index_good_jobs_on_cron_key_and_cron_at, unique: true + add_index :good_jobs, %i[queue_name scheduled_at], where: "(finished_at IS NULL)", + name: :index_good_jobs_on_queue_name_and_scheduled_at + add_index :good_jobs, %i[active_job_id created_at], name: :index_good_jobs_on_active_job_id_and_created_at + add_index :good_jobs, :concurrency_key, where: "(finished_at IS NULL)", + name: :index_good_jobs_on_concurrency_key_when_unfinished + add_index :good_jobs, %i[cron_key created_at], name: :index_good_jobs_on_cron_key_and_created_at + add_index :good_jobs, %i[cron_key cron_at], name: :index_good_jobs_on_cron_key_and_cron_at, unique: true add_index :good_jobs, [:active_job_id], name: :index_good_jobs_on_active_job_id - add_index :good_jobs, [:finished_at], where: "retried_good_job_id IS NULL AND finished_at IS NOT NULL", name: :index_good_jobs_jobs_on_finished_at + add_index :good_jobs, [:finished_at], where: "retried_good_job_id IS NULL AND finished_at IS NOT NULL", + name: :index_good_jobs_jobs_on_finished_at end end diff --git a/db/migrate/20240123151248_create_index_good_jobs_jobs_on_priority_created_at_when_unfinished.rb b/db/migrate/20240123151248_create_index_good_jobs_jobs_on_priority_created_at_when_unfinished.rb index 7b9dbab3816..aaa5a52cd1c 100644 --- a/db/migrate/20240123151248_create_index_good_jobs_jobs_on_priority_created_at_when_unfinished.rb +++ b/db/migrate/20240123151248_create_index_good_jobs_jobs_on_priority_created_at_when_unfinished.rb @@ -12,8 +12,9 @@ class CreateIndexGoodJobsJobsOnPriorityCreatedAtWhenUnfinished < ActiveRecord::M end end - add_index :good_jobs, [:priority, :created_at], order: { priority: "DESC NULLS LAST", created_at: :asc }, - where: "finished_at IS NULL", name: :index_good_jobs_jobs_on_priority_created_at_when_unfinished, - algorithm: :concurrently + add_index :good_jobs, %i[priority created_at], order: { priority: "DESC NULLS LAST", created_at: :asc }, + where: "finished_at IS NULL", + name: :index_good_jobs_jobs_on_priority_created_at_when_unfinished, + algorithm: :concurrently end end diff --git a/db/migrate/20240123151250_create_good_job_executions.rb b/db/migrate/20240123151250_create_good_job_executions.rb index 32723220cce..5722a38edc5 100644 --- a/db/migrate/20240123151250_create_good_job_executions.rb +++ b/db/migrate/20240123151250_create_good_job_executions.rb @@ -21,7 +21,7 @@ class CreateGoodJobExecutions < ActiveRecord::Migration[7.0] t.datetime :finished_at t.text :error - t.index [:active_job_id, :created_at], name: :index_good_job_executions_on_active_job_id_and_created_at + t.index %i[active_job_id created_at], name: :index_good_job_executions_on_active_job_id_and_created_at end change_table :good_jobs do |t| diff --git a/db/migrate/20240123151252_recreate_good_job_cron_indexes_with_conditional.rb b/db/migrate/20240123151252_recreate_good_job_cron_indexes_with_conditional.rb index aff2d4eae9a..83c94a8a605 100644 --- a/db/migrate/20240123151252_recreate_good_job_cron_indexes_with_conditional.rb +++ b/db/migrate/20240123151252_recreate_good_job_cron_indexes_with_conditional.rb @@ -7,12 +7,15 @@ class RecreateGoodJobCronIndexesWithConditional < ActiveRecord::Migration[7.0] reversible do |dir| dir.up do unless connection.index_name_exists?(:good_jobs, :index_good_jobs_on_cron_key_and_created_at_cond) - add_index :good_jobs, [:cron_key, :created_at], where: "(cron_key IS NOT NULL)", - name: :index_good_jobs_on_cron_key_and_created_at_cond, algorithm: :concurrently + add_index :good_jobs, %i[cron_key created_at], where: "(cron_key IS NOT NULL)", + name: :index_good_jobs_on_cron_key_and_created_at_cond, + algorithm: :concurrently end unless connection.index_name_exists?(:good_jobs, :index_good_jobs_on_cron_key_and_cron_at_cond) - add_index :good_jobs, [:cron_key, :cron_at], where: "(cron_key IS NOT NULL)", unique: true, - name: :index_good_jobs_on_cron_key_and_cron_at_cond, algorithm: :concurrently + add_index :good_jobs, %i[cron_key cron_at], where: "(cron_key IS NOT NULL)", + unique: true, + name: :index_good_jobs_on_cron_key_and_cron_at_cond, + algorithm: :concurrently end if connection.index_name_exists?(:good_jobs, :index_good_jobs_on_cron_key_and_created_at) @@ -25,12 +28,13 @@ class RecreateGoodJobCronIndexesWithConditional < ActiveRecord::Migration[7.0] dir.down do unless connection.index_name_exists?(:good_jobs, :index_good_jobs_on_cron_key_and_created_at) - add_index :good_jobs, [:cron_key, :created_at], - name: :index_good_jobs_on_cron_key_and_created_at, algorithm: :concurrently + add_index :good_jobs, %i[cron_key created_at], name: :index_good_jobs_on_cron_key_and_created_at, + algorithm: :concurrently end unless connection.index_name_exists?(:good_jobs, :index_good_jobs_on_cron_key_and_cron_at) - add_index :good_jobs, [:cron_key, :cron_at], unique: true, - name: :index_good_jobs_on_cron_key_and_cron_at, algorithm: :concurrently + add_index :good_jobs, %i[cron_key cron_at], unique: true, + name: :index_good_jobs_on_cron_key_and_cron_at, + algorithm: :concurrently end if connection.index_name_exists?(:good_jobs, :index_good_jobs_on_cron_key_and_created_at_cond) diff --git a/db/migrate/20240208100316_enable_required_project_custom_fields_in_all_projects.rb b/db/migrate/20240208100316_enable_required_project_custom_fields_in_all_projects.rb index 8ac7940f7b7..66e98d87c49 100644 --- a/db/migrate/20240208100316_enable_required_project_custom_fields_in_all_projects.rb +++ b/db/migrate/20240208100316_enable_required_project_custom_fields_in_all_projects.rb @@ -12,13 +12,12 @@ class EnableRequiredProjectCustomFieldsInAllProjects < ActiveRecord::Migration[7 .group_by(&:first) .transform_values { |values| values.map(&:last) } .reduce([]) do |acc, (project_id, custom_field_ids)| + missing_custom_field_ids = required_custom_field_ids - custom_field_ids - missing_custom_field_ids = required_custom_field_ids - custom_field_ids - - acc + missing_custom_field_ids.map do |custom_field_id| - { project_id: , custom_field_id: } + acc + missing_custom_field_ids.map do |custom_field_id| + { project_id:, custom_field_id: } + end end - end ProjectCustomFieldProjectMapping.insert_all!(missing_custom_field_attributes) end diff --git a/db/migrate/20240306154735_create_good_job_labels_index.rb b/db/migrate/20240306154735_create_good_job_labels_index.rb index cbfc6879356..2a380ebb38b 100644 --- a/db/migrate/20240306154735_create_good_job_labels_index.rb +++ b/db/migrate/20240306154735_create_good_job_labels_index.rb @@ -35,8 +35,10 @@ class CreateGoodJobLabelsIndex < ActiveRecord::Migration[7.1] reversible do |dir| dir.up do unless connection.index_name_exists?(:good_jobs, :index_good_jobs_on_labels) - add_index :good_jobs, :labels, using: :gin, where: "(labels IS NOT NULL)", - name: :index_good_jobs_on_labels, algorithm: :concurrently + add_index :good_jobs, :labels, using: :gin, + where: "(labels IS NOT NULL)", + name: :index_good_jobs_on_labels, + algorithm: :concurrently end end diff --git a/db/migrate/20240306154737_create_index_good_job_jobs_for_candidate_lookup.rb b/db/migrate/20240306154737_create_index_good_job_jobs_for_candidate_lookup.rb index 318fc758d4e..5d84cf23747 100644 --- a/db/migrate/20240306154737_create_index_good_job_jobs_for_candidate_lookup.rb +++ b/db/migrate/20240306154737_create_index_good_job_jobs_for_candidate_lookup.rb @@ -40,8 +40,9 @@ class CreateIndexGoodJobJobsForCandidateLookup < ActiveRecord::Migration[7.1] end end - add_index :good_jobs, [:priority, :created_at], order: { priority: "ASC NULLS LAST", created_at: :asc }, - where: "finished_at IS NULL", name: :index_good_job_jobs_for_candidate_lookup, - algorithm: :concurrently + add_index :good_jobs, %i[priority created_at], order: { priority: "ASC NULLS LAST", created_at: :asc }, + where: "finished_at IS NULL", + name: :index_good_job_jobs_for_candidate_lookup, + algorithm: :concurrently end end diff --git a/db/migrate/20240311111957_enable_unaccent_extension.rb b/db/migrate/20240311111957_enable_unaccent_extension.rb index cec572b5918..8d4897b7671 100644 --- a/db/migrate/20240311111957_enable_unaccent_extension.rb +++ b/db/migrate/20240311111957_enable_unaccent_extension.rb @@ -1,47 +1,47 @@ - #-- copyright - # OpenProject is an open source project management software. - # Copyright (C) 2012-2024 the OpenProject GmbH - # - # This program is free software; you can redistribute it and/or - # modify it under the terms of the GNU General Public License version 3. - # - # OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: - # Copyright (C) 2006-2013 Jean-Philippe Lang - # Copyright (C) 2010-2013 the ChiliProject Team - # - # This program is free software; you can redistribute it and/or - # modify it under the terms of the GNU General Public License - # as published by the Free Software Foundation; either version 2 - # of the License, or (at your option) any later version. - # - # This program is distributed in the hope that it will be useful, - # but WITHOUT ANY WARRANTY; without even the implied warranty of - # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - # GNU General Public License for more details. - # - # You should have received a copy of the GNU General Public License - # along with this program; if not, write to the Free Software - # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - # - # See COPYRIGHT and LICENSE files for more details. - #++ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ - class EnableUnaccentExtension < ActiveRecord::Migration[7.1] - def up - ActiveRecord::Base.connection.execute("CREATE EXTENSION IF NOT EXISTS unaccent WITH SCHEMA pg_catalog;") - rescue StandardError => e - raise unless e.message.include?("unaccent") +class EnableUnaccentExtension < ActiveRecord::Migration[7.1] + def up + ActiveRecord::Base.connection.execute("CREATE EXTENSION IF NOT EXISTS unaccent WITH SCHEMA pg_catalog;") + rescue StandardError => e + raise unless e.message.include?("unaccent") - raise <<~MESSAGE - \e[33mWARNING:\e[0m Could not find or enable the `unaccent` extension for PostgreSQL. - This is needed for filtering users with accents, please install the postgresql-contrib module - for your PostgreSQL installation and re-run this migration. + raise <<~MESSAGE + \e[33mWARNING:\e[0m Could not find or enable the `unaccent` extension for PostgreSQL. + This is needed for filtering users with accents, please install the postgresql-contrib module + for your PostgreSQL installation and re-run this migration. - Read more about the contrib module at `https://www.postgresql.org/docs/current/contrib.html`. - MESSAGE - end - - def down - ActiveRecord::Base.connection.execute("DROP EXTENSION IF EXISTS unaccent CASCADE;") - end + Read more about the contrib module at `https://www.postgresql.org/docs/current/contrib.html`. + MESSAGE end + + def down + ActiveRecord::Base.connection.execute("DROP EXTENSION IF EXISTS unaccent CASCADE;") + end +end diff --git a/lib/api/decorators/linked_resource.rb b/lib/api/decorators/linked_resource.rb index df3ddfa6dbf..992cad1afed 100644 --- a/lib/api/decorators/linked_resource.rb +++ b/lib/api/decorators/linked_resource.rb @@ -37,7 +37,7 @@ module API base.extend ClassMethods end - def from_hash(hash, *args) + def from_hash(hash, *) return super unless hash && hash["_links"] copied_hash = hash.deep_dup @@ -52,7 +52,7 @@ module API copied_hash[name] = fragment end - super(copied_hash, *args) + super(copied_hash, *) end module ClassMethods diff --git a/lib/api/errors/unauthenticated.rb b/lib/api/errors/unauthenticated.rb index ab61961ef5a..638deaebad4 100644 --- a/lib/api/errors/unauthenticated.rb +++ b/lib/api/errors/unauthenticated.rb @@ -33,7 +33,7 @@ module API code 401 def initialize(message = I18n.t("api_v3.errors.code_401")) - super(message) + super end end end diff --git a/lib/api/errors/unsupported_media_type.rb b/lib/api/errors/unsupported_media_type.rb index 0c889209c8c..5f7feca4d9e 100644 --- a/lib/api/errors/unsupported_media_type.rb +++ b/lib/api/errors/unsupported_media_type.rb @@ -33,7 +33,7 @@ module API code 415 def initialize(message) - super(message) + super end end end diff --git a/lib/api/utilities/meta_property.rb b/lib/api/utilities/meta_property.rb index fed56c41ce5..d25d3ec8a7c 100644 --- a/lib/api/utilities/meta_property.rb +++ b/lib/api/utilities/meta_property.rb @@ -47,7 +47,7 @@ module API def create(model, **args) meta = args.delete(:meta) - super(model, **args).tap do |instance| + super.tap do |instance| instance.meta = meta end end diff --git a/lib/api/utilities/payload_representer.rb b/lib/api/utilities/payload_representer.rb index 4041db577f5..50aa1bbbeb7 100644 --- a/lib/api/utilities/payload_representer.rb +++ b/lib/api/utilities/payload_representer.rb @@ -95,13 +95,13 @@ module API property.merge!(render_filter: filter) end - def from_hash(hash, *args) + def from_hash(hash, *) # Prevent entries in _embedded from overriding anything in the _links section copied_hash = hash.deep_dup copied_hash.delete("_embedded") - super(copied_hash, *args) + super(copied_hash, *) end def contract?(represented) @@ -126,8 +126,8 @@ module API end module ClassMethods - def create_class(*args) - new_class = super(*args) + def create_class(*) + new_class = super new_class.send(:include, ::API::Utilities::PayloadRepresenter) diff --git a/lib/api/v3/activities/activities_api.rb b/lib/api/v3/activities/activities_api.rb index 68bbad2f5c0..87c2958c0a1 100644 --- a/lib/api/v3/activities/activities_api.rb +++ b/lib/api/v3/activities/activities_api.rb @@ -31,7 +31,7 @@ module API module Activities class ActivitiesAPI < ::API::OpenProjectAPI resources :activities do - route_param :id, type: Integer, desc: 'Activity ID' do + route_param :id, type: Integer, desc: "Activity ID" do after_validation do @activity = Journal.find(declared_params[:id]) @@ -41,7 +41,7 @@ module API end get &::API::V3::Utilities::Endpoints::Show.new(model: ::Journal, - api_name: 'Activity', + api_name: "Activity", instance_generator: ->(*) { @activity }) .mount @@ -50,7 +50,7 @@ module API end patch &::API::V3::Utilities::Endpoints::Update.new(model: ::Journal, - api_name: 'Activity', + api_name: "Activity", instance_generator: ->(*) { @activity }, params_modifier: ->(*) { { notes: declared_params[:comment] } diff --git a/lib/api/v3/activities/activities_by_work_package_api.rb b/lib/api/v3/activities/activities_by_work_package_api.rb index bdd1053e3ae..f3f67cd7805 100644 --- a/lib/api/v3/activities/activities_by_work_package_api.rb +++ b/lib/api/v3/activities/activities_by_work_package_api.rb @@ -26,7 +26,7 @@ # See COPYRIGHT and LICENSE files for more details. #++ -require 'api/v3/activities/activity_representer' +require "api/v3/activities/activity_representer" module API module V3 @@ -58,7 +58,7 @@ module API .new(user: current_user, work_package: @work_package) .call(params[:comment][:raw], - send_notifications: !(params.has_key?(:notify) && params[:notify] == 'false')) + send_notifications: !(params.has_key?(:notify) && params[:notify] == "false")) if call.success? Activities::ActivityRepresenter.new(call.result, current_user:) diff --git a/lib/api/v3/activities/activity_representer.rb b/lib/api/v3/activities/activity_representer.rb index 85e590fa018..4f8410d982f 100644 --- a/lib/api/v3/activities/activity_representer.rb +++ b/lib/api/v3/activities/activity_representer.rb @@ -79,9 +79,9 @@ module API def _type if represented.noop? || represented.notes.present? - 'Activity::Comment' + "Activity::Comment" else - 'Activity' + "Activity" end end diff --git a/lib/api/v3/backups/backups_api.rb b/lib/api/v3/backups/backups_api.rb index e445bdb88d7..c872937f96a 100644 --- a/lib/api/v3/backups/backups_api.rb +++ b/lib/api/v3/backups/backups_api.rb @@ -46,7 +46,7 @@ module API :attachments, type: Boolean, default: true, - desc: 'Whether or not to include attachments (default: true)' + desc: "Whether or not to include attachments (default: true)" ) end post do diff --git a/lib/api/v3/memberships/schemas/membership_schema_representer.rb b/lib/api/v3/memberships/schemas/membership_schema_representer.rb index ab5f4a9affa..8d491d1984f 100644 --- a/lib/api/v3/memberships/schemas/membership_schema_representer.rb +++ b/lib/api/v3/memberships/schemas/membership_schema_representer.rb @@ -32,10 +32,7 @@ module API module Schemas class MembershipSchemaRepresenter < ::API::Decorators::SchemaRepresenter def initialize(represented, self_link: nil, current_user: nil, form_embedded: false) - super(represented, - self_link:, - current_user:, - form_embedded:) + super end schema :id, diff --git a/lib/api/v3/queries/filters/query_filter_instance_payload_representer.rb b/lib/api/v3/queries/filters/query_filter_instance_payload_representer.rb index d4461c7fd57..5df9168af48 100644 --- a/lib/api/v3/queries/filters/query_filter_instance_payload_representer.rb +++ b/lib/api/v3/queries/filters/query_filter_instance_payload_representer.rb @@ -34,7 +34,7 @@ module API include ::API::Utilities::PayloadRepresenter def initialize(model) - super(model) + super end end end diff --git a/lib/api/v3/queries/schemas/query_filter_instance_schema_collection_representer.rb b/lib/api/v3/queries/schemas/query_filter_instance_schema_collection_representer.rb index 7939206e379..535d64f749b 100644 --- a/lib/api/v3/queries/schemas/query_filter_instance_schema_collection_representer.rb +++ b/lib/api/v3/queries/schemas/query_filter_instance_schema_collection_representer.rb @@ -34,7 +34,7 @@ module API def initialize(filters, ...) filters = filters.reject { ::Queries::Register.excluded_filters.include?(_1.class) } - super(filters, ...) + super end def model_self_link(model) diff --git a/lib/api/v3/queries/schemas/query_schema_representer.rb b/lib/api/v3/queries/schemas/query_schema_representer.rb index 6f8a6e5223d..501dec185d7 100644 --- a/lib/api/v3/queries/schemas/query_schema_representer.rb +++ b/lib/api/v3/queries/schemas/query_schema_representer.rb @@ -35,10 +35,7 @@ module API module Schemas class QuerySchemaRepresenter < ::API::Decorators::SchemaRepresenter def initialize(represented, self_link: nil, current_user: nil, form_embedded: false) - super(represented, - self_link:, - current_user:, - form_embedded:) + super end def self.filters_schema diff --git a/lib/api/v3/versions/schemas/version_schema_representer.rb b/lib/api/v3/versions/schemas/version_schema_representer.rb index 7d52bf1f04c..8ef1dfff436 100644 --- a/lib/api/v3/versions/schemas/version_schema_representer.rb +++ b/lib/api/v3/versions/schemas/version_schema_representer.rb @@ -36,10 +36,7 @@ module API custom_field_injector type: :schema_representer def initialize(represented, self_link: nil, current_user: nil, form_embedded: false) - super(represented, - self_link:, - current_user:, - form_embedded:) + super end schema :id, diff --git a/lib/api/v3/work_packages/work_package_at_timestamp_representer.rb b/lib/api/v3/work_packages/work_package_at_timestamp_representer.rb index 782ce1554a4..0f1db7c4466 100644 --- a/lib/api/v3/work_packages/work_package_at_timestamp_representer.rb +++ b/lib/api/v3/work_packages/work_package_at_timestamp_representer.rb @@ -77,9 +77,9 @@ module API Representable::Binding::Map.new(super.select { |bind| rendered_properties.include?(bind.name) }) end - def compile_links_for(configs, *args) + def compile_links_for(configs, *) super(configs.select { |config| rendered_properties_for_links.include?(config.first[:rel]) }, - *args) + *) end def rendered_properties diff --git a/lib/open_project/plugins/acts_as_op_engine.rb b/lib/open_project/plugins/acts_as_op_engine.rb index 13ec85c4a93..c2bba999b38 100644 --- a/lib/open_project/plugins/acts_as_op_engine.rb +++ b/lib/open_project/plugins/acts_as_op_engine.rb @@ -293,9 +293,9 @@ module OpenProject::Plugins OpenProject::Activity.register(event_type, options) end - def add_cron_jobs(&block) + def add_cron_jobs config.to_prepare do - Rails.application.config.good_job.cron.merge!(block.call) + Rails.application.config.good_job.cron.merge!(yield) end end diff --git a/lib/open_project/text_formatting/filters/autolink_filter.rb b/lib/open_project/text_formatting/filters/autolink_filter.rb index cc2ff141f6e..305048e9e23 100644 --- a/lib/open_project/text_formatting/filters/autolink_filter.rb +++ b/lib/open_project/text_formatting/filters/autolink_filter.rb @@ -42,7 +42,8 @@ module OpenProject::TextFormatting autolink_context = default_autolink_options.merge context.fetch(:autolink, {}) return doc if autolink_context[:enabled] == false - ::Rinku.auto_link(html, :all, "class=\"#{autolink_context[:classes]}\" rel=\"noopener noreferrer\"", nil, Rinku::AUTOLINK_SHORT_DOMAINS) + ::Rinku.auto_link(html, :all, "class=\"#{autolink_context[:classes]}\" rel=\"noopener noreferrer\"", nil, + Rinku::AUTOLINK_SHORT_DOMAINS) end def default_autolink_options diff --git a/lib/open_project/text_formatting/filters/syntax_highlight_filter.rb b/lib/open_project/text_formatting/filters/syntax_highlight_filter.rb index 9164d9e5527..aebe0e14fff 100644 --- a/lib/open_project/text_formatting/filters/syntax_highlight_filter.rb +++ b/lib/open_project/text_formatting/filters/syntax_highlight_filter.rb @@ -29,8 +29,8 @@ module OpenProject::TextFormatting module Filters class SyntaxHighlightFilter < HTML::Pipeline::SyntaxHighlightFilter - def initialize(*args) - super(*args) + def initialize(*) + super @formatter = highlighter_class end diff --git a/lib/open_project/text_formatting/filters/table_of_contents_filter.rb b/lib/open_project/text_formatting/filters/table_of_contents_filter.rb index 68c9426eb5e..d4f3274be9f 100644 --- a/lib/open_project/text_formatting/filters/table_of_contents_filter.rb +++ b/lib/open_project/text_formatting/filters/table_of_contents_filter.rb @@ -35,7 +35,7 @@ module OpenProject::TextFormatting attr_reader :headings, :ids def initialize(doc, context = nil, result = nil) - super(doc, context, result) + super @headings ||= doc.css("h1, h2, h3, h4, h5, h6") @ids = Set.new end diff --git a/lib/primer/open_project/forms/dsl/work_package_autocompleter_input.rb b/lib/primer/open_project/forms/dsl/work_package_autocompleter_input.rb index 8a96cee1397..bd89aabfa92 100644 --- a/lib/primer/open_project/forms/dsl/work_package_autocompleter_input.rb +++ b/lib/primer/open_project/forms/dsl/work_package_autocompleter_input.rb @@ -9,7 +9,7 @@ module Primer options.reverse_merge( component: "opce-autocompleter", resource: "work_packages", - searchKey: "subjectOrId", + searchKey: "subjectOrId" ) end end diff --git a/lib/tabular_form_builder.rb b/lib/tabular_form_builder.rb index 5e1287b5a1a..8bcad6d282c 100644 --- a/lib/tabular_form_builder.rb +++ b/lib/tabular_form_builder.rb @@ -123,7 +123,7 @@ class TabularFormBuilder < ActionView::Helpers::FormBuilder (label + container_wrap_field(input, :date_picker, options)) end - def radio_button(field, value, options = {}, *args) + def radio_button(field, value, options = {}, *) options[:class] = Array(options[:class]) + %w(form--radio-button) input_options, label_options = extract_from options @@ -134,7 +134,7 @@ class TabularFormBuilder < ActionView::Helpers::FormBuilder end label = label_for_field(field, label_options) - input = super(field, value, input_options, *args) + input = super(field, value, input_options, *) (label + container_wrap_field(input, "radio-button", options)) end diff --git a/lib_static/open_project/acts/favorable.rb b/lib_static/open_project/acts/favorable.rb index 3fab37d3280..3a049474338 100644 --- a/lib_static/open_project/acts/favorable.rb +++ b/lib_static/open_project/acts/favorable.rb @@ -47,6 +47,7 @@ module OpenProject # as it's used to identify whether a user can actually favorite the object. def acts_as_favorable return if included_modules.include?(::OpenProject::Acts::Favorable::InstanceMethods) + OpenProject::Acts::Favorable::Registry.add(self) class_eval do diff --git a/lib_static/open_project/acts/watchable.rb b/lib_static/open_project/acts/watchable.rb index a6c963aa6f5..99de12d98aa 100644 --- a/lib_static/open_project/acts/watchable.rb +++ b/lib_static/open_project/acts/watchable.rb @@ -114,10 +114,10 @@ module OpenProject active_scope = Principal.not_locked.user allowed_scope = if project.public? - User.allowed(self.class.acts_as_watchable_permission, project) - else - User.allowed_members_on_work_package(self.class.acts_as_watchable_permission, self) - end + User.allowed(self.class.acts_as_watchable_permission, project) + else + User.allowed_members_on_work_package(self.class.acts_as_watchable_permission, self) + end active_scope.where(id: allowed_scope) end diff --git a/lib_static/plugins/acts_as_journalized/lib/acts/journalized/journalized.rb b/lib_static/plugins/acts_as_journalized/lib/acts/journalized/journalized.rb index d94ca15c11a..fd87611ae57 100644 --- a/lib_static/plugins/acts_as_journalized/lib/acts/journalized/journalized.rb +++ b/lib_static/plugins/acts_as_journalized/lib/acts/journalized/journalized.rb @@ -77,8 +77,8 @@ module Acts::Journalized module ClassMethods # Overrides the +journaled+ method to first define the +journaled?+ class method before # deferring to the original +journaled+. - def acts_as_journalized(*args) - super(*args) + def acts_as_journalized(*) + super class << self def journaled? diff --git a/lookbook/previews/open_project/common/autocomplete_preview.rb b/lookbook/previews/open_project/common/autocomplete_preview.rb index 3b0388849e3..ceb2ed71c70 100644 --- a/lookbook/previews/open_project/common/autocomplete_preview.rb +++ b/lookbook/previews/open_project/common/autocomplete_preview.rb @@ -30,7 +30,6 @@ module OpenProject module Common # @logical_path OpenProject/Common class AutocompletePreview < Lookbook::Preview - # @display min_height 250px def decorated render_with_template diff --git a/modules/auth_plugins/lib/omni_auth/flexible_builder.rb b/modules/auth_plugins/lib/omni_auth/flexible_builder.rb index 4c00ed36738..dc6f0be1c83 100644 --- a/modules/auth_plugins/lib/omni_auth/flexible_builder.rb +++ b/modules/auth_plugins/lib/omni_auth/flexible_builder.rb @@ -28,9 +28,9 @@ module OmniAuth class FlexibleBuilder < Builder - def use(middleware, *args, &) + def use(middleware, *, &) middleware.extend FlexibleStrategyClass - super(middleware, *args, &) + super end end end diff --git a/modules/auth_plugins/lib/omni_auth/flexible_strategy.rb b/modules/auth_plugins/lib/omni_auth/flexible_strategy.rb index 634176927f8..f0cd48a0267 100644 --- a/modules/auth_plugins/lib/omni_auth/flexible_strategy.rb +++ b/modules/auth_plugins/lib/omni_auth/flexible_strategy.rb @@ -91,7 +91,7 @@ module OmniAuth module FlexibleStrategyClass def new(app, *args, &) - super(app, *args, &).tap do |strategy| + super.tap do |strategy| strategy.extend FlexibleStrategy end end diff --git a/modules/auth_saml/lib/open_project/auth_saml/engine.rb b/modules/auth_saml/lib/open_project/auth_saml/engine.rb index 0222a4ab726..8dbf4c9b9ca 100644 --- a/modules/auth_saml/lib/open_project/auth_saml/engine.rb +++ b/modules/auth_saml/lib/open_project/auth_saml/engine.rb @@ -1,4 +1,4 @@ -require 'omniauth-saml' +require "omniauth-saml" module OpenProject module AuthSaml def self.configuration @@ -26,10 +26,10 @@ module OpenProject end def self.settings_from_config - if OpenProject::Configuration['saml'].present? + if OpenProject::Configuration["saml"].present? Rails.logger.info("[auth_saml] Registering saml integration from configuration.yml") - OpenProject::Configuration['saml'] + OpenProject::Configuration["saml"] end end @@ -47,8 +47,8 @@ module OpenProject include OpenProject::Plugins::ActsAsOpEngine extend OpenProject::Plugins::AuthPlugin - register 'openproject-auth_saml', - author_url: 'https://github.com/finnlabs/openproject-auth_saml', + register "openproject-auth_saml", + author_url: "https://github.com/finnlabs/openproject-auth_saml", bundled: true, settings: { default: { "providers" => nil } } @@ -78,8 +78,8 @@ module OpenProject end end - initializer 'auth_saml.configuration' do - ::Settings::Definition.add 'saml', + initializer "auth_saml.configuration" do + ::Settings::Definition.add "saml", default: nil, format: :hash, writable: false diff --git a/modules/backlogs/lib/open_project/backlogs/burndown/series.rb b/modules/backlogs/lib/open_project/backlogs/burndown/series.rb index 1266f852733..5cdb883d6d0 100644 --- a/modules/backlogs/lib/open_project/backlogs/burndown/series.rb +++ b/modules/backlogs/lib/open_project/backlogs/burndown/series.rb @@ -35,7 +35,7 @@ module OpenProject::Backlogs::Burndown raise "Unsupported unit '#{@unit}'" unless %i[points hours].include? @unit - super(*args) + super end attr_reader :unit, :name diff --git a/modules/backlogs/lib/open_project/backlogs/burndown/series_raw_data.rb b/modules/backlogs/lib/open_project/backlogs/burndown/series_raw_data.rb index f95971ad6ca..ee209bb4949 100644 --- a/modules/backlogs/lib/open_project/backlogs/burndown/series_raw_data.rb +++ b/modules/backlogs/lib/open_project/backlogs/burndown/series_raw_data.rb @@ -32,7 +32,7 @@ module OpenProject::Backlogs::Burndown @collect = args.pop @sprint = args.pop @project = args.pop - super(*args) + super end attr_reader :collect, :sprint, :project diff --git a/modules/backlogs/lib/open_project/backlogs/mixins/prevent_issue_sti.rb b/modules/backlogs/lib/open_project/backlogs/mixins/prevent_issue_sti.rb index ccbe648a48e..4a714599b4f 100644 --- a/modules/backlogs/lib/open_project/backlogs/mixins/prevent_issue_sti.rb +++ b/modules/backlogs/lib/open_project/backlogs/mixins/prevent_issue_sti.rb @@ -39,7 +39,7 @@ module OpenProject::Backlogs::Mixins def find_sti_class(type_name) type_name = to_s if type_name == "WorkPackage" - super(type_name) + super end end end diff --git a/modules/backlogs/lib/open_project/backlogs/patches/permitted_params_patch.rb b/modules/backlogs/lib/open_project/backlogs/patches/permitted_params_patch.rb index d64e0e32718..fbd268917b3 100644 --- a/modules/backlogs/lib/open_project/backlogs/patches/permitted_params_patch.rb +++ b/modules/backlogs/lib/open_project/backlogs/patches/permitted_params_patch.rb @@ -33,7 +33,7 @@ module OpenProject::Backlogs::Patches::PermittedParamsPatch module InstanceMethods def update_work_package(args = {}) - permitted_params = super(args) + permitted_params = super backlogs_params = params.require(:work_package).permit(:story_points) permitted_params.merge!(backlogs_params) diff --git a/modules/bim/app/services/bim/bcf/viewpoints/create_service.rb b/modules/bim/app/services/bim/bcf/viewpoints/create_service.rb index 60691267cf7..8ea480c2971 100644 --- a/modules/bim/app/services/bim/bcf/viewpoints/create_service.rb +++ b/modules/bim/app/services/bim/bcf/viewpoints/create_service.rb @@ -35,7 +35,7 @@ module Bim::Bcf # snapshot base64 data must not get stored service_result.result.json_viewpoint["snapshot"]&.delete("snapshot_data") - super(service_result) + super end end end diff --git a/modules/bim/lib/open_project/bim/bcf_xml/exporter.rb b/modules/bim/lib/open_project/bim/bcf_xml/exporter.rb index 661e24a7b37..b3dbb206a22 100644 --- a/modules/bim/lib/open_project/bim/bcf_xml/exporter.rb +++ b/modules/bim/lib/open_project/bim/bcf_xml/exporter.rb @@ -4,7 +4,7 @@ module OpenProject::Bim::BcfXml class Exporter < ::WorkPackage::Exports::QueryExporter def initialize(object, options = {}) object.add_filter("bcf_issue_associated", "=", ["t"]) - super(object, options) + super end def current_user diff --git a/modules/bim/lib/open_project/bim/patches/type_patch.rb b/modules/bim/lib/open_project/bim/patches/type_patch.rb index 7269c2b6dc7..0734b5d88e7 100644 --- a/modules/bim/lib/open_project/bim/patches/type_patch.rb +++ b/modules/bim/lib/open_project/bim/patches/type_patch.rb @@ -42,7 +42,7 @@ module OpenProject::Bim::Patches::TypePatch private def default_attribute?(active_cfs, key) - super(active_cfs, key) && key != "bcf_thumbnail" + super && key != "bcf_thumbnail" end end end diff --git a/modules/boards/app/services/boards/base_create_service.rb b/modules/boards/app/services/boards/base_create_service.rb index 5a8150acef4..942c0208875 100644 --- a/modules/boards/app/services/boards/base_create_service.rb +++ b/modules/boards/app/services/boards/base_create_service.rb @@ -14,7 +14,7 @@ module Boards end def before_perform(params, _service_result) - return super(params, _service_result) if no_widgets_initially? + return super if no_widgets_initially? create_query_result = create_query(params) diff --git a/modules/costs/app/models/time_entries/scopes/ongoing.rb b/modules/costs/app/models/time_entries/scopes/ongoing.rb index 7ef8dc360f2..4e5837ac512 100644 --- a/modules/costs/app/models/time_entries/scopes/ongoing.rb +++ b/modules/costs/app/models/time_entries/scopes/ongoing.rb @@ -42,7 +42,8 @@ module TimeEntries::Scopes def visible_work_packages(user) WorkPackage.allowed_to(user, :log_own_time).or( - WorkPackage.where(project_id: Project.allowed_to(User.current, :log_time))) + WorkPackage.where(project_id: Project.allowed_to(User.current, :log_time)) + ) end def not_ongoing diff --git a/modules/gantt/app/controllers/gantt/menus_controller.rb b/modules/gantt/app/controllers/gantt/menus_controller.rb index 8b99b082b8f..094e0148151 100644 --- a/modules/gantt/app/controllers/gantt/menus_controller.rb +++ b/modules/gantt/app/controllers/gantt/menus_controller.rb @@ -60,7 +60,7 @@ module Gantt menu_item( params, - I18n.t("js.queries.#{query_key.to_s}"), + I18n.t("js.queries.#{query_key}") ) end end diff --git a/modules/github_integration/spec/lib/open_project/github_integration/services/upsert_github_user_spec.rb b/modules/github_integration/spec/lib/open_project/github_integration/services/upsert_github_user_spec.rb index e6c1d2afd98..7878d51a712 100644 --- a/modules/github_integration/spec/lib/open_project/github_integration/services/upsert_github_user_spec.rb +++ b/modules/github_integration/spec/lib/open_project/github_integration/services/upsert_github_user_spec.rb @@ -57,7 +57,9 @@ RSpec.describe OpenProject::GithubIntegration::Services::UpsertGithubUser do end it "updates the github user" do - expect { upsert }.to change { github_user.reload.github_avatar_url }.from("https://github.com/test_user/old_avatar.jpg").to("https://github.com/test_user/avatar.jpg") + expect { upsert }.to change { github_user.reload.github_avatar_url } + .from("https://github.com/test_user/old_avatar.jpg") + .to("https://github.com/test_user/avatar.jpg") end end end diff --git a/modules/grids/app/representers/api/v3/grids/schemas/grid_schema_representer.rb b/modules/grids/app/representers/api/v3/grids/schemas/grid_schema_representer.rb index 702940dd8a9..c0cbf8c4b32 100644 --- a/modules/grids/app/representers/api/v3/grids/schemas/grid_schema_representer.rb +++ b/modules/grids/app/representers/api/v3/grids/schemas/grid_schema_representer.rb @@ -32,10 +32,7 @@ module API module Schemas class GridSchemaRepresenter < ::API::Decorators::SchemaRepresenter def initialize(represented, self_link: nil, current_user: nil, form_embedded: false) - super(represented, - self_link:, - current_user:, - form_embedded:) + super end schema :id, diff --git a/modules/grids/app/services/grids/set_attributes_service.rb b/modules/grids/app/services/grids/set_attributes_service.rb index c2317ad4cb0..a04141ea319 100644 --- a/modules/grids/app/services/grids/set_attributes_service.rb +++ b/modules/grids/app/services/grids/set_attributes_service.rb @@ -34,7 +34,7 @@ class Grids::SetAttributesService < BaseServices::SetAttributes def set_attributes(attributes) widget_attributes = attributes.delete(:widgets) - ret = super(attributes) + ret = super update_widgets(widget_attributes) diff --git a/modules/ldap_groups/app/services/ldap_groups/synchronize_groups_service.rb b/modules/ldap_groups/app/services/ldap_groups/synchronize_groups_service.rb index d7257958c13..55ebfd87c71 100644 --- a/modules/ldap_groups/app/services/ldap_groups/synchronize_groups_service.rb +++ b/modules/ldap_groups/app/services/ldap_groups/synchronize_groups_service.rb @@ -45,7 +45,7 @@ module LdapGroups def map_to_users(sync_group, entries) create_missing!(entries) if sync_group.sync_users - User.where('LOWER(login) IN (?)', entries.keys.map(&:downcase)) + User.where("LOWER(login) IN (?)", entries.keys.map(&:downcase)) end ## @@ -129,7 +129,7 @@ module LdapGroups # Get the memberof filter to use for querying members def memberof_filter(group) # memberOf filter to identify member entries of the group - filter = Net::LDAP::Filter.eq('memberOf', group.dn) + filter = Net::LDAP::Filter.eq("memberOf", group.dn) # Add the LDAP auth source own filter if present if ldap.filter_string.present? diff --git a/modules/meeting/app/components/meetings/meeting_filters_component.rb b/modules/meeting/app/components/meetings/meeting_filters_component.rb index 0e37103f39b..987425ad05d 100644 --- a/modules/meeting/app/components/meetings/meeting_filters_component.rb +++ b/modules/meeting/app/components/meetings/meeting_filters_component.rb @@ -60,7 +60,7 @@ module Meetings } } else - super(filter) + super end end diff --git a/modules/meeting/app/forms/meeting_agenda_item/meeting_form.rb b/modules/meeting/app/forms/meeting_agenda_item/meeting_form.rb index 9aa49bac6f2..f89e7c59b43 100644 --- a/modules/meeting/app/forms/meeting_agenda_item/meeting_form.rb +++ b/modules/meeting/app/forms/meeting_agenda_item/meeting_form.rb @@ -47,11 +47,14 @@ class MeetingAgendaItem::MeetingForm < ApplicationForm .where("meetings.start_time + (interval '1 hour' * meetings.duration) >= ?", Time.zone.now) .includes(:project) .find_each do |meeting| - select.option( - label: "#{meeting.project.name}: #{meeting.title} #{format_date(meeting.start_time)} #{format_time(meeting.start_time, false)}", - value: meeting.id - ) - end + select.option( + label: "#{meeting.project.name}: " \ + "#{meeting.title} " \ + "#{format_date(meeting.start_time)} " \ + "#{format_time(meeting.start_time, false)}", + value: meeting.id + ) + end end end diff --git a/modules/meeting/app/services/meetings/create_service.rb b/modules/meeting/app/services/meetings/create_service.rb index defc3399d97..b0818cd297f 100644 --- a/modules/meeting/app/services/meetings/create_service.rb +++ b/modules/meeting/app/services/meetings/create_service.rb @@ -31,7 +31,6 @@ module Meetings protected def instance(params) - # Setting the #type as attributes will not work # as the STI instance is not changed without using e.g., +becomes!+ case params.delete(:type) diff --git a/modules/meeting/lib/open_project/journal_formatter/agenda_item_position.rb b/modules/meeting/lib/open_project/journal_formatter/agenda_item_position.rb index 20367571a55..6d79eb6a93b 100644 --- a/modules/meeting/lib/open_project/journal_formatter/agenda_item_position.rb +++ b/modules/meeting/lib/open_project/journal_formatter/agenda_item_position.rb @@ -27,7 +27,7 @@ #++ class OpenProject::JournalFormatter::AgendaItemPosition < JournalFormatter::Base - def render(_key, values, options = { html: true }) + def render(_key, _values, options = { html: true }) label_text = I18n.t(:label_agenda_items) label_text = content_tag(:strong, label_text) if options[:html] diff --git a/modules/meeting/spec/controllers/meetings_controller_spec.rb b/modules/meeting/spec/controllers/meetings_controller_spec.rb index 3a89a0d6f1c..07f605110ea 100644 --- a/modules/meeting/spec/controllers/meetings_controller_spec.rb +++ b/modules/meeting/spec/controllers/meetings_controller_spec.rb @@ -58,6 +58,7 @@ RSpec.describe MeetingsController do before do get "index" end + it { expect(response).to be_successful } it { expect(assigns(:meetings)).to match_array meetings[1..2] } end diff --git a/modules/meeting/spec/features/structured_meetings/structured_meeting_crud_spec.rb b/modules/meeting/spec/features/structured_meetings/structured_meeting_crud_spec.rb index b5a9fbf9aa3..4d2004fd0c2 100644 --- a/modules/meeting/spec/features/structured_meetings/structured_meeting_crud_spec.rb +++ b/modules/meeting/spec/features/structured_meetings/structured_meeting_crud_spec.rb @@ -325,7 +325,7 @@ RSpec.describe "Structured meetings CRUD", perform_enqueued_jobs expect(ActionMailer::Base.deliveries.size).to eq 0 end - + context "with sections" do let!(:meeting) { create(:structured_meeting, project:, author: current_user) } let(:show_page) { Pages::StructuredMeeting::Show.new(meeting) } diff --git a/modules/meeting/spec/models/meeting_spec.rb b/modules/meeting/spec/models/meeting_spec.rb index 5a34ce14fd0..80794cacce3 100644 --- a/modules/meeting/spec/models/meeting_spec.rb +++ b/modules/meeting/spec/models/meeting_spec.rb @@ -196,7 +196,7 @@ RSpec.describe Meeting do describe "acts_as_watchable" do it "is watchable" do - expect(described_class).to include(::OpenProject::Acts::Watchable::InstanceMethods) + expect(described_class).to include(OpenProject::Acts::Watchable::InstanceMethods) end it "uses the :view_meetings permission" do diff --git a/modules/openid_connect/lib/open_project/openid_connect/engine.rb b/modules/openid_connect/lib/open_project/openid_connect/engine.rb index 832e3807258..4591f5ed970 100644 --- a/modules/openid_connect/lib/open_project/openid_connect/engine.rb +++ b/modules/openid_connect/lib/open_project/openid_connect/engine.rb @@ -1,4 +1,4 @@ -require 'open_project/plugins' +require "open_project/plugins" module OpenProject::OpenIDConnect class Engine < ::Rails::Engine @@ -7,16 +7,16 @@ module OpenProject::OpenIDConnect include OpenProject::Plugins::ActsAsOpEngine extend OpenProject::Plugins::AuthPlugin - register 'openproject-openid_connect', - author_url: 'https://www.openproject.org', + register "openproject-openid_connect", + author_url: "https://www.openproject.org", bundled: true, - settings: { 'default' => { 'providers' => {} } } do + settings: { "default" => { "providers" => {} } } do menu :admin_menu, :plugin_openid_connect, :openid_connect_providers_path, parent: :authentication, - caption: ->(*) { I18n.t('openid_connect.menu_title') }, - enterprise_feature: 'openid_providers' + caption: ->(*) { I18n.t("openid_connect.menu_title") }, + enterprise_feature: "openid_providers" end assets %w( @@ -25,7 +25,7 @@ module OpenProject::OpenIDConnect openid_connect/auth_provider-heroku.png ) - class_inflection_override('openid_connect' => 'OpenIDConnect') + class_inflection_override("openid_connect" => "OpenIDConnect") register_auth_providers do OmniAuth::OpenIDConnect::Providers.configure custom_options: %i[ @@ -60,11 +60,11 @@ module OpenProject::OpenIDConnect ) end - initializer 'openid_connect.form_post_method' do + initializer "openid_connect.form_post_method" do # If response_mode 'form_post' is chosen, # the IP sends a POST to the callback. Only if # the sameSite flag is not set on the session cookie, is the cookie send along with the request. - if OpenProject::Configuration['openid_connect']&.any? { |_, v| v['response_mode']&.to_s == 'form_post' } + if OpenProject::Configuration["openid_connect"]&.any? { |_, v| v["response_mode"]&.to_s == "form_post" } SecureHeaders::Configuration.default.cookies[:samesite][:lax] = false # Need to reload the secure_headers config to # avoid having set defaults (e.g. https) when changing the cookie values diff --git a/modules/overviews/app/components/project_custom_fields/sidebar_component.rb b/modules/overviews/app/components/project_custom_fields/sidebar_component.rb index 73350be6ecd..09a3159a88f 100644 --- a/modules/overviews/app/components/project_custom_fields/sidebar_component.rb +++ b/modules/overviews/app/components/project_custom_fields/sidebar_component.rb @@ -39,6 +39,7 @@ module ProjectCustomFields end private + def available_project_custom_fields_grouped_by_section @available_project_custom_fields_grouped_by_section ||= @project.available_custom_fields.group_by(&:project_custom_field_section) diff --git a/modules/overviews/config/routes.rb b/modules/overviews/config/routes.rb index 846ce8d17a1..9a007f2a0e7 100644 --- a/modules/overviews/config/routes.rb +++ b/modules/overviews/config/routes.rb @@ -3,9 +3,11 @@ Rails.application.routes.draw do get "projects/:project_id", to: "overviews/overviews#show", as: :project_overview - get "projects/:project_id/project_custom_fields_sidebar", to: "overviews/overviews#project_custom_fields_sidebar", as: :project_custom_fields_sidebar + get "projects/:project_id/project_custom_fields_sidebar", to: "overviews/overviews#project_custom_fields_sidebar", + as: :project_custom_fields_sidebar get "projects/:project_id/project_custom_field_section_dialog/:section_id", to: "overviews/overviews#project_custom_field_section_dialog", as: :project_custom_field_section_dialog - put "projects/:project_id/update_project_custom_values/:section_id", to: "overviews/overviews#update_project_custom_values", as: :update_project_custom_values + put "projects/:project_id/update_project_custom_values/:section_id", to: "overviews/overviews#update_project_custom_values", + as: :update_project_custom_values end end diff --git a/modules/reporting/app/models/cost_query/sql_statement.rb b/modules/reporting/app/models/cost_query/sql_statement.rb index db4e05a32db..76ce030349a 100644 --- a/modules/reporting/app/models/cost_query/sql_statement.rb +++ b/modules/reporting/app/models/cost_query/sql_statement.rb @@ -37,7 +37,7 @@ class CostQuery::SqlStatement < Report::SqlStatement attr_accessor :entry_union def initialize(table, desc = "") - super(table, desc) + super @entry_union = false end diff --git a/modules/reporting/lib/widget/settings.rb b/modules/reporting/lib/widget/settings.rb index 3adbdf7a382..9e735989e4b 100644 --- a/modules/reporting/lib/widget/settings.rb +++ b/modules/reporting/lib/widget/settings.rb @@ -87,7 +87,7 @@ class Widget::Settings < Widget::Base @cost_types = options.delete(:cost_types) @selected_type_id = options.delete(:selected_type_id) - super(options, &) + super end def settings_to_render diff --git a/modules/reporting/lib/widget/settings/fieldset.rb b/modules/reporting/lib/widget/settings/fieldset.rb index 86a98061b39..235b9200159 100644 --- a/modules/reporting/lib/widget/settings/fieldset.rb +++ b/modules/reporting/lib/widget/settings/fieldset.rb @@ -33,7 +33,7 @@ class Widget::Settings::Fieldset < Widget::Base @type = options.delete(:type) || "filter" @id = @type.to_s @label = :"label_#{@type}" - super(options, &) + super end def render diff --git a/modules/storages/app/components/storages/admin/forms/oauth_client_form_component.rb b/modules/storages/app/components/storages/admin/forms/oauth_client_form_component.rb index 39da667990e..02a25df14e5 100644 --- a/modules/storages/app/components/storages/admin/forms/oauth_client_form_component.rb +++ b/modules/storages/app/components/storages/admin/forms/oauth_client_form_component.rb @@ -35,8 +35,8 @@ module Storages::Admin::Forms attr_reader :storage alias_method :oauth_client, :model - def initialize(oauth_client:, storage:, **options) - super(oauth_client, **options) + def initialize(oauth_client:, storage:, **) + super(oauth_client, **) @storage = storage end diff --git a/modules/storages/app/components/storages/admin/forms/redirect_uri_form_component.rb b/modules/storages/app/components/storages/admin/forms/redirect_uri_form_component.rb index 094d528d880..8bc1430f95e 100644 --- a/modules/storages/app/components/storages/admin/forms/redirect_uri_form_component.rb +++ b/modules/storages/app/components/storages/admin/forms/redirect_uri_form_component.rb @@ -35,8 +35,8 @@ module Storages::Admin::Forms attr_reader :storage alias_method :oauth_client, :model - def initialize(oauth_client:, storage:, **options) - super(oauth_client, **options) + def initialize(oauth_client:, storage:, **) + super(oauth_client, **) @storage = storage end diff --git a/modules/storages/app/components/storages/admin/oauth_access_grant_nudge_modal_component.rb b/modules/storages/app/components/storages/admin/oauth_access_grant_nudge_modal_component.rb index cfbd3ff4d80..a10707c3ff9 100644 --- a/modules/storages/app/components/storages/admin/oauth_access_grant_nudge_modal_component.rb +++ b/modules/storages/app/components/storages/admin/oauth_access_grant_nudge_modal_component.rb @@ -36,9 +36,9 @@ module Storages::Admin attr_reader :project_storage - def initialize(project_storage:, **options) + def initialize(project_storage:, **) @project_storage = find_project_storage(project_storage) - super(@project_storage, **options) + super(@project_storage, **) end def render? diff --git a/modules/storages/app/components/storages/admin/oauth_application_info_component.rb b/modules/storages/app/components/storages/admin/oauth_application_info_component.rb index 5df3bd1ea3a..3e0bd63f070 100644 --- a/modules/storages/app/components/storages/admin/oauth_application_info_component.rb +++ b/modules/storages/app/components/storages/admin/oauth_application_info_component.rb @@ -36,8 +36,8 @@ module Storages::Admin attr_reader :storage alias_method :oauth_application, :model - def initialize(oauth_application:, storage:, **options) - super(oauth_application, **options) + def initialize(oauth_application:, storage:, **) + super(oauth_application, **) @storage = storage end end diff --git a/modules/storages/app/components/storages/admin/oauth_application_info_copy_component.rb b/modules/storages/app/components/storages/admin/oauth_application_info_copy_component.rb index ca7390e835b..4be78441b2e 100644 --- a/modules/storages/app/components/storages/admin/oauth_application_info_copy_component.rb +++ b/modules/storages/app/components/storages/admin/oauth_application_info_copy_component.rb @@ -35,8 +35,8 @@ module Storages::Admin attr_reader :storage alias_method :oauth_application, :model - def initialize(oauth_application:, storage:, **options) - super(oauth_application, **options) + def initialize(oauth_application:, storage:, **) + super(oauth_application, **) @storage = storage end diff --git a/modules/storages/app/components/storages/admin/oauth_client_info_component.rb b/modules/storages/app/components/storages/admin/oauth_client_info_component.rb index 0fe220a80a6..75f280104c2 100644 --- a/modules/storages/app/components/storages/admin/oauth_client_info_component.rb +++ b/modules/storages/app/components/storages/admin/oauth_client_info_component.rb @@ -36,8 +36,8 @@ module Storages::Admin attr_reader :storage alias_method :oauth_client, :model - def initialize(oauth_client:, storage:, **options) - super(oauth_client, **options) + def initialize(oauth_client:, storage:, **) + super(oauth_client, **) @storage = storage end diff --git a/modules/storages/app/components/storages/admin/redirect_uri_component.rb b/modules/storages/app/components/storages/admin/redirect_uri_component.rb index 48c0f5777ec..d5d9de4c5be 100644 --- a/modules/storages/app/components/storages/admin/redirect_uri_component.rb +++ b/modules/storages/app/components/storages/admin/redirect_uri_component.rb @@ -36,8 +36,8 @@ module Storages::Admin attr_reader :storage alias_method :oauth_client, :model - def initialize(oauth_client:, storage:, **options) - super(oauth_client, **options) + def initialize(oauth_client:, storage:, **) + super(oauth_client, **) @storage = storage end diff --git a/modules/storages/app/components/storages/open_project_storage_modal_component/body.rb b/modules/storages/app/components/storages/open_project_storage_modal_component/body.rb index 0b856713f40..b443ba50f8c 100644 --- a/modules/storages/app/components/storages/open_project_storage_modal_component/body.rb +++ b/modules/storages/app/components/storages/open_project_storage_modal_component/body.rb @@ -30,8 +30,8 @@ class Storages::OpenProjectStorageModalComponent::Body < ApplicationComponent # waiting_title: I18n.t("storages.open_project_storage_modal.waiting.title"), waiting_subtitle: I18n.t("storages.open_project_storage_modal.waiting.subtitle") - def initialize(state, **options) + def initialize(state, **) @state = state - super(nil, **options) + super(nil, **) end end diff --git a/modules/storages/app/controllers/storages/admin/access_management_controller.rb b/modules/storages/app/controllers/storages/admin/access_management_controller.rb index e887fcee1bb..7391af563f6 100644 --- a/modules/storages/app/controllers/storages/admin/access_management_controller.rb +++ b/modules/storages/app/controllers/storages/admin/access_management_controller.rb @@ -97,7 +97,7 @@ class Storages::Admin::AccessManagementController < ApplicationController private def find_model_object(object_id = :storage_id) - super(object_id) + super @storage = @object end diff --git a/modules/storages/app/controllers/storages/admin/automatically_managed_project_folders_controller.rb b/modules/storages/app/controllers/storages/admin/automatically_managed_project_folders_controller.rb index 34fedfb06b7..094fd8f94c5 100644 --- a/modules/storages/app/controllers/storages/admin/automatically_managed_project_folders_controller.rb +++ b/modules/storages/app/controllers/storages/admin/automatically_managed_project_folders_controller.rb @@ -129,7 +129,7 @@ class Storages::Admin::AutomaticallyManagedProjectFoldersController < Applicatio # GET /admin/settings/storages/:storage_id/automatically_managed_project_folders/new # POST /admin/settings/storages/:storage_id/automatically_managed_project_folders def find_model_object(object_id = :storage_id) - super(object_id) + super @storage = @object end diff --git a/modules/storages/app/controllers/storages/project_settings/project_storage_members_controller.rb b/modules/storages/app/controllers/storages/project_settings/project_storage_members_controller.rb index f5f7de107e6..214fff42ad2 100644 --- a/modules/storages/app/controllers/storages/project_settings/project_storage_members_controller.rb +++ b/modules/storages/app/controllers/storages/project_settings/project_storage_members_controller.rb @@ -58,7 +58,7 @@ class Storages::ProjectSettings::ProjectStorageMembersController < Projects::Set private def find_model_object(object_id = :project_storage_id) - super(object_id) + super @project_storage = @object @storage = @project_storage.storage end diff --git a/modules/storages/app/models/storages/storage_file.rb b/modules/storages/app/models/storages/storage_file.rb index 0603dbe2b0d..70fcf0fc586 100644 --- a/modules/storages/app/models/storages/storage_file.rb +++ b/modules/storages/app/models/storages/storage_file.rb @@ -53,18 +53,7 @@ module Storages location: nil, permissions: nil ) - super( - id:, - name:, - size:, - mime_type:, - created_at:, - last_modified_at:, - created_by_name:, - last_modified_by_name:, - location:, - permissions: - ) + super end end end diff --git a/modules/storages/app/services/storages/file_links/create_service.rb b/modules/storages/app/services/storages/file_links/create_service.rb index 033c2fc1cad..e49728c0ae4 100644 --- a/modules/storages/app/services/storages/file_links/create_service.rb +++ b/modules/storages/app/services/storages/file_links/create_service.rb @@ -33,7 +33,7 @@ class Storages::FileLinks::CreateService < BaseServices::Create service_result else # create - super(service_result) + super end end diff --git a/modules/storages/app/services/storages/project_storages/create_service.rb b/modules/storages/app/services/storages/project_storages/create_service.rb index d567d252b90..00d51b85bf1 100644 --- a/modules/storages/app/services/storages/project_storages/create_service.rb +++ b/modules/storages/app/services/storages/project_storages/create_service.rb @@ -32,7 +32,7 @@ module Storages::ProjectStorages protected def after_perform(service_call) - super(service_call) + super project_storage = service_call.result project_folder_mode = project_storage.project_folder_mode.to_sym diff --git a/modules/storages/app/services/storages/project_storages/delete_service.rb b/modules/storages/app/services/storages/project_storages/delete_service.rb index c1de8da7c70..6538a78e45e 100644 --- a/modules/storages/app/services/storages/project_storages/delete_service.rb +++ b/modules/storages/app/services/storages/project_storages/delete_service.rb @@ -45,7 +45,7 @@ module Storages::ProjectStorages # by ::BaseServices::Delete def persist(service_result) # Perform the @object.destroy etc. in the super-class - super(service_result).tap do |deletion_result| + super.tap do |deletion_result| if deletion_result.success? delete_associated_file_links OpenProject::Notifications.send( diff --git a/modules/storages/app/services/storages/project_storages/update_service.rb b/modules/storages/app/services/storages/project_storages/update_service.rb index 731d5b4b886..da5f97e1045 100644 --- a/modules/storages/app/services/storages/project_storages/update_service.rb +++ b/modules/storages/app/services/storages/project_storages/update_service.rb @@ -33,7 +33,7 @@ module Storages::ProjectStorages protected def after_perform(service_call) - super(service_call) + super project_storage = service_call.result project_folder_mode = project_storage.project_folder_mode.to_sym diff --git a/modules/storages/app/services/storages/storages/create_service.rb b/modules/storages/app/services/storages/storages/create_service.rb index 70e1944a063..13398d7141a 100644 --- a/modules/storages/app/services/storages/storages/create_service.rb +++ b/modules/storages/app/services/storages/storages/create_service.rb @@ -37,7 +37,7 @@ module Storages::Storages protected def after_perform(service_call) - super(service_call) + super storage = service_call.result # Automatically create an OAuthApplication object for the Nextcloud storage diff --git a/modules/storages/app/services/storages/storages/set_provider_fields_attributes_service.rb b/modules/storages/app/services/storages/storages/set_provider_fields_attributes_service.rb index 93e5bc9cfd3..7a0288781d0 100644 --- a/modules/storages/app/services/storages/storages/set_provider_fields_attributes_service.rb +++ b/modules/storages/app/services/storages/storages/set_provider_fields_attributes_service.rb @@ -40,7 +40,7 @@ module Storages::Storages private def set_attributes(params) - super(params) + super set_default_provider_fields(params) end diff --git a/modules/team_planner/spec/support/pages/team_planner.rb b/modules/team_planner/spec/support/pages/team_planner.rb index a6e1b1e1fa0..67272a78bb7 100644 --- a/modules/team_planner/spec/support/pages/team_planner.rb +++ b/modules/team_planner/spec/support/pages/team_planner.rb @@ -36,7 +36,7 @@ module Pages attr_reader :filters def initialize(project) - super(project) + super @filters = ::Components::WorkPackages::Filters.new end diff --git a/modules/two_factor_authentication/app/services/two_factor_authentication/token_service.rb b/modules/two_factor_authentication/app/services/two_factor_authentication/token_service.rb index 84a0ff401b0..94fc4563cc4 100644 --- a/modules/two_factor_authentication/app/services/two_factor_authentication/token_service.rb +++ b/modules/two_factor_authentication/app/services/two_factor_authentication/token_service.rb @@ -57,13 +57,13 @@ module TwoFactorAuthentication ## # Validate a token that was input by the user - def verify(input, **options) + def verify(input, **) # Validate that we can request the token for this user # and get the matching strategy we will use verify_device_and_strategy # Produce the token with the given strategy (e.g., sending an sms) - result = strategy.verify(input, **options) + result = strategy.verify(input, **) ServiceResult.new(success: result) rescue StandardError => e diff --git a/modules/xls_export/lib/open_project/xls_export/xls_views.rb b/modules/xls_export/lib/open_project/xls_export/xls_views.rb index e2f597647d5..4b9dba6566b 100644 --- a/modules/xls_export/lib/open_project/xls_export/xls_views.rb +++ b/modules/xls_export/lib/open_project/xls_export/xls_views.rb @@ -16,7 +16,7 @@ class OpenProject::XlsExport::XlsViews when :project_id then project_representation(value) when :user_id, :assigned_to_id then user_representation(value) when :work_package_id then work_package_representation(value) - else super(key, value) + else super end end diff --git a/spec/contracts/backups/create_contract_spec.rb b/spec/contracts/backups/create_contract_spec.rb index eb6913deff5..7cb9dc947d6 100644 --- a/spec/contracts/backups/create_contract_spec.rb +++ b/spec/contracts/backups/create_contract_spec.rb @@ -26,19 +26,19 @@ # See COPYRIGHT and LICENSE files for more details. #++ -require 'spec_helper' -require 'contracts/shared/model_contract_shared_context' +require "spec_helper" +require "contracts/shared/model_contract_shared_context" RSpec.describe Backups::CreateContract do let(:backup) { Backup.new } let(:contract) { described_class.new backup, current_user, options: { backup_token: backup_token.plain_value } } let(:backup_token) { create(:backup_token, user: current_user) } - include_context 'ModelContract shared context' + include_context "ModelContract shared context" - context 'with regular user who has the :create_backup permission' do + context "with regular user who has the :create_backup permission" do let(:current_user) { create(:user, global_permissions: [:create_backup]) } - it_behaves_like 'contract is valid' + it_behaves_like "contract is valid" end end diff --git a/spec/factories/backup_factory.rb b/spec/factories/backup_factory.rb index 6dc69ee55f4..a57ab606f58 100644 --- a/spec/factories/backup_factory.rb +++ b/spec/factories/backup_factory.rb @@ -27,6 +27,6 @@ #++ FactoryBot.define do - factory :backup, class: 'Backup' do + factory :backup, class: "Backup" do end end diff --git a/spec/factories/user_factory.rb b/spec/factories/user_factory.rb index ece978101bc..a01126d44cc 100644 --- a/spec/factories/user_factory.rb +++ b/spec/factories/user_factory.rb @@ -27,22 +27,22 @@ #++ FactoryBot.define do - factory :user, parent: :principal, class: 'User' do - firstname { 'Bob' } - lastname { 'Bobbit' } + factory :user, parent: :principal, class: "User" do + firstname { "Bob" } + lastname { "Bobbit" } sequence(:login) { |n| "bob#{n}" } sequence(:mail) { |n| "bobmail#{n}.bobbit@bob.com" } - password { 'adminADMIN!' } - password_confirmation { 'adminADMIN!' } + password { "adminADMIN!" } + password_confirmation { "adminADMIN!" } transient do preferences { {} } end - language { 'en' } + language { "en" } status { User.statuses[:active] } admin { false } - first_login { false if User.table_exists? and User.columns.map(&:name).include? 'first_login' } + first_login { false if User.table_exists? and User.columns.map(&:name).include? "first_login" } callback(:after_build) do |user, evaluator| evaluator.preferences&.each do |key, val| @@ -71,23 +71,23 @@ FactoryBot.define do end factory :admin do - firstname { 'OpenProject' } + firstname { "OpenProject" } sequence(:lastname) { |n| "Admin#{n}" } sequence(:login) { |n| "admin#{n}" } sequence(:mail) { |n| "admin#{n}@example.com" } admin { true } - first_login { false if User.table_exists? and User.columns.map(&:name).include? 'first_login' } + first_login { false if User.table_exists? and User.columns.map(&:name).include? "first_login" } end - factory :deleted_user, class: 'DeletedUser' + factory :deleted_user, class: "DeletedUser" factory :locked_user do - firstname { 'Locked' } - lastname { 'User' } + firstname { "Locked" } + lastname { "User" } sequence(:login) { |n| "locked#{n}" } sequence(:mail) { |n| "locked#{n}@bob.com" } - password { 'adminADMIN!' } - password_confirmation { 'adminADMIN!' } + password { "adminADMIN!" } + password_confirmation { "adminADMIN!" } status { User.statuses[:locked] } end @@ -96,11 +96,11 @@ FactoryBot.define do end end - factory :anonymous, class: 'AnonymousUser' do + factory :anonymous, class: "AnonymousUser" do initialize_with { User.anonymous } end - factory :system, class: 'SystemUser' do + factory :system, class: "SystemUser" do initialize_with { User.system } end end diff --git a/spec/features/activities/project_attributes_activity_spec.rb b/spec/features/activities/project_attributes_activity_spec.rb index 88464dee9e9..f1735b85dbb 100644 --- a/spec/features/activities/project_attributes_activity_spec.rb +++ b/spec/features/activities/project_attributes_activity_spec.rb @@ -31,9 +31,9 @@ require "spec_helper" RSpec.describe "Project attributes activity", :js, :with_cuprite do let(:user) do create(:user, member_with_permissions: { - project => %i[view_work_packages edit_work_packages], - project2 => %i[view_work_packages edit_work_packages] - }) + project => %i[view_work_packages edit_work_packages], + project2 => %i[view_work_packages edit_work_packages] + }) end let(:parent_project) { create(:project, name: "parent") } let(:project) { create(:project, parent: parent_project, active: false) } diff --git a/spec/features/projects/project_custom_fields/overview_page/shared_context.rb b/spec/features/projects/project_custom_fields/overview_page/shared_context.rb index 9f21d9613ac..f70a8e6449b 100644 --- a/spec/features/projects/project_custom_fields/overview_page/shared_context.rb +++ b/spec/features/projects/project_custom_fields/overview_page/shared_context.rb @@ -83,7 +83,8 @@ RSpec.shared_context "with seeded projects, members and project custom fields" d let!(:section_for_multi_select_fields) { create(:project_custom_field_section, name: "Multi select fields") } let!(:boolean_project_custom_field) do - field = create(:boolean_project_custom_field, projects: [project], name: "Boolean field", + field = create(:boolean_project_custom_field, projects: [project], + name: "Boolean field", project_custom_field_section: section_for_input_fields) create(:custom_value, customized: project, custom_field: field, value: true) @@ -92,7 +93,8 @@ RSpec.shared_context "with seeded projects, members and project custom fields" d end let!(:string_project_custom_field) do - field = create(:string_project_custom_field, projects: [project], name: "String field", + field = create(:string_project_custom_field, projects: [project], + name: "String field", project_custom_field_section: section_for_input_fields) create(:custom_value, customized: project, custom_field: field, value: "Foo") @@ -101,7 +103,8 @@ RSpec.shared_context "with seeded projects, members and project custom fields" d end let!(:integer_project_custom_field) do - field = create(:integer_project_custom_field, projects: [project], name: "Integer field", + field = create(:integer_project_custom_field, projects: [project], + name: "Integer field", project_custom_field_section: section_for_input_fields) create(:custom_value, customized: project, custom_field: field, value: 123) @@ -110,7 +113,8 @@ RSpec.shared_context "with seeded projects, members and project custom fields" d end let!(:float_project_custom_field) do - field = create(:float_project_custom_field, projects: [project], name: "Float field", + field = create(:float_project_custom_field, projects: [project], + name: "Float field", project_custom_field_section: section_for_input_fields) create(:custom_value, customized: project, custom_field: field, value: 123.456) @@ -119,7 +123,8 @@ RSpec.shared_context "with seeded projects, members and project custom fields" d end let!(:date_project_custom_field) do - field = create(:date_project_custom_field, projects: [project], name: "Date field", + field = create(:date_project_custom_field, projects: [project], + name: "Date field", project_custom_field_section: section_for_input_fields) create(:custom_value, customized: project, custom_field: field, value: Date.new(2024, 1, 1)) @@ -128,8 +133,9 @@ RSpec.shared_context "with seeded projects, members and project custom fields" d end let!(:link_project_custom_field) do - field = create(:link_project_custom_field, projects: [project], name: "Link field", - project_custom_field_section: section_for_input_fields) + field = create(:link_project_custom_field, projects: [project], + name: "Link field", + project_custom_field_section: section_for_input_fields) create(:custom_value, customized: project, custom_field: field, value: "https://www.openproject.org") @@ -137,7 +143,8 @@ RSpec.shared_context "with seeded projects, members and project custom fields" d end let!(:text_project_custom_field) do - field = create(:text_project_custom_field, projects: [project], name: "Text field", + field = create(:text_project_custom_field, projects: [project], + name: "Text field", project_custom_field_section: section_for_input_fields) create(:custom_value, customized: project, custom_field: field, value: "Lorem\n\nipsum") @@ -146,7 +153,8 @@ RSpec.shared_context "with seeded projects, members and project custom fields" d end let!(:list_project_custom_field) do - field = create(:list_project_custom_field, projects: [project], name: "List field", + field = create(:list_project_custom_field, projects: [project], + name: "List field", project_custom_field_section: section_for_select_fields, possible_values: ["Option 1", "Option 2", "Option 3"]) @@ -156,7 +164,8 @@ RSpec.shared_context "with seeded projects, members and project custom fields" d end let!(:version_project_custom_field) do - field = create(:version_project_custom_field, projects: [project], name: "Version field", + field = create(:version_project_custom_field, projects: [project], + name: "Version field", project_custom_field_section: section_for_select_fields) create(:custom_value, customized: project, custom_field: field, value: first_version.id) @@ -165,7 +174,8 @@ RSpec.shared_context "with seeded projects, members and project custom fields" d end let!(:user_project_custom_field) do - field = create(:user_project_custom_field, projects: [project], name: "User field", + field = create(:user_project_custom_field, projects: [project], + name: "User field", project_custom_field_section: section_for_select_fields) create(:custom_value, customized: project, custom_field: field, value: member_in_project.id) @@ -174,7 +184,8 @@ RSpec.shared_context "with seeded projects, members and project custom fields" d end let!(:multi_list_project_custom_field) do - field = create(:list_project_custom_field, projects: [project], name: "Multi list field", + field = create(:list_project_custom_field, projects: [project], + name: "Multi list field", project_custom_field_section: section_for_multi_select_fields, possible_values: ["Option 1", "Option 2", "Option 3"], multi_value: true) @@ -186,7 +197,8 @@ RSpec.shared_context "with seeded projects, members and project custom fields" d end let!(:multi_version_project_custom_field) do - field = create(:version_project_custom_field, projects: [project], name: "Multi version field", + field = create(:version_project_custom_field, projects: [project], + name: "Multi version field", project_custom_field_section: section_for_multi_select_fields, multi_value: true) @@ -197,7 +209,8 @@ RSpec.shared_context "with seeded projects, members and project custom fields" d end let!(:multi_user_project_custom_field) do - field = create(:user_project_custom_field, projects: [project], name: "Multi user field", + field = create(:user_project_custom_field, projects: [project], + name: "Multi user field", project_custom_field_section: section_for_multi_select_fields, multi_value: true) diff --git a/spec/lib/acts_as_watchable/lib/acts_as_watchable/routes_spec.rb b/spec/lib/acts_as_watchable/lib/acts_as_watchable/routes_spec.rb index bc6773c8c12..c089a1b3be9 100644 --- a/spec/lib/acts_as_watchable/lib/acts_as_watchable/routes_spec.rb +++ b/spec/lib/acts_as_watchable/lib/acts_as_watchable/routes_spec.rb @@ -28,7 +28,7 @@ require "spec_helper" -RSpec.describe ::OpenProject::Acts::Watchable::Routes do +RSpec.describe OpenProject::Acts::Watchable::Routes do let(:request) do Struct.new(:type, :id) do def path_parameters @@ -43,7 +43,7 @@ RSpec.describe ::OpenProject::Acts::Watchable::Routes do let(:id) { "1" } it "is true" do - expect(::OpenProject::Acts::Watchable::Routes.matches?(request)).to be_truthy + expect(OpenProject::Acts::Watchable::Routes.matches?(request)).to be_truthy end end @@ -51,7 +51,7 @@ RSpec.describe ::OpenProject::Acts::Watchable::Routes do let(:id) { "schmu" } it "is false" do - expect(::OpenProject::Acts::Watchable::Routes.matches?(request)).to be_falsey + expect(OpenProject::Acts::Watchable::Routes.matches?(request)).to be_falsey end end end @@ -69,7 +69,7 @@ RSpec.describe ::OpenProject::Acts::Watchable::Routes do let(:id) { "4" } it "is false" do - expect(::OpenProject::Acts::Watchable::Routes.matches?(request)).to be_falsey + expect(OpenProject::Acts::Watchable::Routes.matches?(request)).to be_falsey end end end diff --git a/spec/mailers/announcement_mailer_spec.rb b/spec/mailers/announcement_mailer_spec.rb index a02e34a0dd6..0e0d0a0f948 100644 --- a/spec/mailers/announcement_mailer_spec.rb +++ b/spec/mailers/announcement_mailer_spec.rb @@ -64,8 +64,8 @@ RSpec.describe AnnouncementMailer do let(:recipient) { build_stubbed(:user, status: Principal.statuses[:locked]) } it "does not send an email" do - expect(mail.subject).to be nil - expect(mail.to).to be nil + expect(mail.subject).to be_nil + expect(mail.to).to be_nil end end end diff --git a/spec/migrations/reduce_configurable_design_variables_spec.rb b/spec/migrations/reduce_configurable_design_variables_spec.rb index 77e8dc63bee..deb0d3cbcf4 100644 --- a/spec/migrations/reduce_configurable_design_variables_spec.rb +++ b/spec/migrations/reduce_configurable_design_variables_spec.rb @@ -73,7 +73,6 @@ RSpec.describe ReduceConfigurableDesignVariables, type: :model do expect(DesignColor.find_by(variable: "primary-color-dark")).not_to be_nil expect(DesignColor.find_by(variable: "alternative-color")).not_to be_nil expect(DesignColor.find_by(variable: "content-link-color")).not_to be_nil - end end end diff --git a/spec/models/application_record_spec.rb b/spec/models/application_record_spec.rb index 2a6e4a5b76d..b01ac2c9490 100644 --- a/spec/models/application_record_spec.rb +++ b/spec/models/application_record_spec.rb @@ -1,7 +1,7 @@ -require 'spec_helper' +require "spec_helper" RSpec.describe ApplicationRecord do - describe '#most_recently_changed' do + describe "#most_recently_changed" do let!(:work_package) do create(:work_package).tap do |wp| wp.update_column(:updated_at, 5.days.from_now) @@ -24,7 +24,7 @@ RSpec.describe ApplicationRecord do expect(postgres_utc_iso8601).to eq(rails_utc_iso8601) end - it 'returns the most recently changed timestamp of the given resource classes' do + it "returns the most recently changed timestamp of the given resource classes" do expect_matched_date described_class.most_recently_changed(WorkPackage, Type, Status), work_package.updated_at diff --git a/spec/models/version_spec.rb b/spec/models/version_spec.rb index 485a96b6113..ecb5fa19995 100644 --- a/spec/models/version_spec.rb +++ b/spec/models/version_spec.rb @@ -26,90 +26,90 @@ # See COPYRIGHT and LICENSE files for more details. #++ -require 'spec_helper' +require "spec_helper" RSpec.describe Version do - subject(:version) { build(:version, name: 'Test Version') } + subject(:version) { build(:version, name: "Test Version") } it { is_expected.to be_valid } - describe 'default values' do + describe "default values" do let(:version) { described_class.new } - it 'sets the status to be open' do + it "sets the status to be open" do expect(version.status) - .to eq 'open' + .to eq "open" end end - describe 'validations' do - context 'with finish date that is smaller than the start date' do + describe "validations" do + context "with finish date that is smaller than the start date" do before do - version.start_date = '2013-05-01' - version.effective_date = '2012-01-01' + version.start_date = "2013-05-01" + version.effective_date = "2012-01-01" end - it 'is invalid' do + it "is invalid" do expect(version).not_to be_valid expect(version.errors[:effective_date]) - .to eq [I18n.t('activerecord.errors.messages.greater_than_start_date')] + .to eq [I18n.t("activerecord.errors.messages.greater_than_start_date")] end end - context 'with an invalid date' do + context "with an invalid date" do before do - version.start_date = '2013-05-01' - version.effective_date = '99999-01-01' + version.start_date = "2013-05-01" + version.effective_date = "99999-01-01" end - it 'is invalid' do + it "is invalid" do expect(version).not_to be_valid expect(version.errors[:effective_date]) - .to eq [I18n.t('activerecord.errors.messages.not_a_date')] + .to eq [I18n.t("activerecord.errors.messages.not_a_date")] end end end - describe '#to_s_for_project' do + describe "#to_s_for_project" do let(:other_project) { build(:project) } - it 'returns only the version for the same project' do + it "returns only the version for the same project" do expect(version.to_s_for_project(version.project)).to eq(version.name.to_s) end - it 'returns the project name and the version name for a different project' do + it "returns the project name and the version name for a different project" do expect(version.to_s_for_project(other_project)).to eq("#{version.project.name} - #{version.name}") end end - describe '#systemwide' do - it 'contains the version if it is shared with all projects' do - version.sharing = 'system' + describe "#systemwide" do + it "contains the version if it is shared with all projects" do + version.sharing = "system" version.save! expect(described_class.systemwide).to contain_exactly(version) end - it 'is empty if the version is not shared' do - version.sharing = 'none' + it "is empty if the version is not shared" do + version.sharing = "none" version.save! expect(described_class.systemwide).to be_empty end - it 'is empty if the version is shared with the project hierarchy' do - version.sharing = 'hierarchy' + it "is empty if the version is shared with the project hierarchy" do + version.sharing = "hierarchy" version.save! expect(described_class.systemwide).to be_empty end end - describe '#<=>' do + describe "#<=>" do let(:version1) { build_stubbed(:version) } let(:version2) { build_stubbed(:version) } - it 'is 0 if name and project are equal' do + it "is 0 if name and project are equal" do version1.project = version2.project version1.name = version2.name @@ -117,19 +117,19 @@ RSpec.describe Version do end it "is -1 if the project name is alphabetically before the other's project name" do - version1.name = 'BBBB' - version1.project.name = 'AAAA' - version2.name = 'AAAA' - version2.project.name = 'BBBB' + version1.name = "BBBB" + version1.project.name = "AAAA" + version2.name = "AAAA" + version2.project.name = "BBBB" expect(version1 <=> version2).to be -1 end it "is 1 if the project name is alphabetically after the other's project name" do - version1.name = 'AAAA' - version1.project.name = 'BBBB' - version2.name = 'BBBB' - version2.project.name = 'AAAA' + version1.name = "AAAA" + version1.project.name = "BBBB" + version2.name = "BBBB" + version2.project.name = "AAAA" expect(version1 <=> version2).to be 1 end @@ -137,8 +137,8 @@ RSpec.describe Version do it "is -1 if the project name is equal and the version's name is alphabetically before the other's name" do version1.project.name = version2.project.name - version1.name = 'AAAA' - version2.name = 'BBBB' + version1.name = "AAAA" + version2.name = "BBBB" expect(version1 <=> version2).to be -1 end @@ -146,13 +146,13 @@ RSpec.describe Version do it "is 1 if the project name is equal and the version's name is alphabetically after the other's name" do version1.project.name = version2.project.name - version1.name = 'BBBB' - version2.name = 'AAAA' + version1.name = "BBBB" + version2.name = "AAAA" expect(version1 <=> version2).to be 1 end - it 'is 0 if name and project are equal except for case' do + it "is 0 if name and project are equal except for case" do version1.project.name = version2.project.name.upcase version1.name = version2.name.upcase @@ -160,19 +160,19 @@ RSpec.describe Version do end it "is -1 if the project name is alphabetically before the other's project name ignoring case" do - version1.name = 'BBBB' - version1.project.name = 'aaaa' - version2.name = 'AAAA' - version2.project.name = 'BBBB' + version1.name = "BBBB" + version1.project.name = "aaaa" + version2.name = "AAAA" + version2.project.name = "BBBB" expect(version1 <=> version2).to be -1 end it "is 1 if the project name is alphabetically after the other's project name ignoring case" do - version1.name = 'AAAA' - version1.project.name = 'BBBB' - version2.name = 'BBBB' - version2.project.name = 'aaaa' + version1.name = "AAAA" + version1.project.name = "BBBB" + version2.name = "BBBB" + version2.project.name = "aaaa" expect(version1 <=> version2).to be 1 end @@ -180,8 +180,8 @@ RSpec.describe Version do it "is -1 if the project name is equal and the version's name is alphabetically before the other's name ignoring case" do version1.project.name = version2.project.name - version1.name = 'aaaa' - version2.name = 'BBBB' + version1.name = "aaaa" + version2.name = "BBBB" expect(version1 <=> version2).to be -1 end @@ -189,47 +189,47 @@ RSpec.describe Version do it "is 1 if the project name is equal and the version's name is alphabetically after the other's name ignoring case" do version1.project.name = version2.project.name - version1.name = 'BBBB' - version2.name = 'aaaa' + version1.name = "BBBB" + version2.name = "aaaa" expect(version1 <=> version2).to be 1 end end - describe '#projects' do + describe "#projects" do let(:grand_parent_project) do - build(:project, name: 'grand_parent_project') + build(:project, name: "grand_parent_project") end let(:parent_project) do - build(:project, parent: grand_parent_project, name: 'parent_project') + build(:project, parent: grand_parent_project, name: "parent_project") end let(:sibling_parent_project) do - build(:project, parent: grand_parent_project, name: 'sibling_parent_project') + build(:project, parent: grand_parent_project, name: "sibling_parent_project") end let(:child_project) do - build(:project, parent: parent_project, name: 'child_project') + build(:project, parent: parent_project, name: "child_project") end let(:sibling_project) do - build(:project, parent: parent_project, name: 'sibling_project') + build(:project, parent: parent_project, name: "sibling_project") end let(:unrelated_project) do - build(:project, name: 'unrelated_project') + build(:project, name: "unrelated_project") end let(:unshared_version) do - build(:version, project: parent_project, sharing: 'none') + build(:version, project: parent_project, sharing: "none") end let(:hierarchy_shared_version) do - build(:version, project: parent_project, sharing: 'hierarchy') + build(:version, project: parent_project, sharing: "hierarchy") end let(:descendants_shared_version) do - build(:version, project: parent_project, sharing: 'descendants') + build(:version, project: parent_project, sharing: "descendants") end let(:system_shared_version) do - build(:version, project: parent_project, sharing: 'system') + build(:version, project: parent_project, sharing: "system") end let(:tree_shared_version) do - build(:version, project: parent_project, sharing: 'tree') + build(:version, project: parent_project, sharing: "tree") end def save_all_projects @@ -245,50 +245,50 @@ RSpec.describe Version do save_all_projects end - it 'returns a scope' do + it "returns a scope" do unshared_version.save expect(unshared_version.projects).to be_a(ActiveRecord::Relation) end - it 'is empty for a new version' do + it "is empty for a new version" do expect(described_class.new.projects).to be_empty end - it 'returns project the version is defined in for unshared' do + it "returns project the version is defined in for unshared" do unshared_version.save expect(unshared_version.projects).to contain_exactly(parent_project) end - it 'returns all projects the version is shared with (hierarchy)' do + it "returns all projects the version is shared with (hierarchy)" do hierarchy_shared_version.save! expect(hierarchy_shared_version.projects).to contain_exactly(grand_parent_project, parent_project, child_project, sibling_project) end - it 'returns all projects the version is shared with (descendants)' do + it "returns all projects the version is shared with (descendants)" do descendants_shared_version.save! expect(descendants_shared_version.projects).to contain_exactly(parent_project, child_project, sibling_project) end - it 'returns all projects the version is shared with (tree)' do + it "returns all projects the version is shared with (tree)" do tree_shared_version.save! expect(tree_shared_version.projects).to contain_exactly(grand_parent_project, parent_project, sibling_parent_project, child_project, sibling_project) end - it 'returns all projects the version is shared with (system)' do + it "returns all projects the version is shared with (system)" do system_shared_version.save! expect(system_shared_version.projects).to contain_exactly(grand_parent_project, parent_project, sibling_parent_project, child_project, sibling_project, unrelated_project) end - it 'returns only the projects for the version although there is a system shared version' do + it "returns only the projects for the version although there is a system shared version" do unshared_version.save system_shared_version.save! @@ -296,108 +296,108 @@ RSpec.describe Version do end end - describe '#estimated_hours' do + describe "#estimated_hours" do before do version.save end - context 'without assigned work packages' do - it 'returns 0.0' do + context "without assigned work packages" do + it "returns 0.0" do expect(version.estimated_hours) .to eq 0.0 end end - context 'with assigned work packages without estimated hours' do + context "with assigned work packages without estimated hours" do let!(:work_package) { create(:work_package, version:) } - it 'returns 0.0' do + it "returns 0.0" do expect(version.estimated_hours) .to eq 0.0 end end - context 'with two assigned work packages with estimated hours' do + context "with two assigned work packages with estimated hours" do let!(:work_package1) { create(:work_package, version:, estimated_hours: 2.5) } let!(:work_package2) { create(:work_package, version:, estimated_hours: 5) } - it 'returns the sum of estimated hours' do + it "returns the sum of estimated hours" do expect(version.estimated_hours) .to eq 7.5 end end - context 'with assigned work packages with estimated hours in the leaves' do + context "with assigned work packages with estimated hours in the leaves" do let!(:parent) { create(:work_package, version:) } let!(:work_package1) { create(:work_package, parent:, version:, estimated_hours: 2.5) } let!(:work_package2) { create(:work_package, parent:, version:, estimated_hours: 5) } - it 'returns the sum of estimated hours' do + it "returns the sum of estimated hours" do expect(version.estimated_hours) .to eq 7.5 end end end - describe '#start_date' do - context 'with a value saved and a work package with its own start_date' do - let(:version) { create(:version, start_date: '2010-01-05') } - let!(:work_package) { create(:work_package, version:, start_date: '2010-03-01') } + describe "#start_date" do + context "with a value saved and a work package with its own start_date" do + let(:version) { create(:version, start_date: "2010-01-05") } + let!(:work_package) { create(:work_package, version:, start_date: "2010-03-01") } - it 'is the value' do + it "is the value" do expect(version.start_date) - .to eq Date.parse('2010-01-05') + .to eq Date.parse("2010-01-05") end end - context 'without a value saved and a work package with its own start_date' do + context "without a value saved and a work package with its own start_date" do let(:version) { create(:version) } - let!(:work_package) { create(:work_package, version:, start_date: '2010-03-01') } + let!(:work_package) { create(:work_package, version:, start_date: "2010-03-01") } - it 'is nil' do + it "is nil" do expect(version.start_date) .to be_nil end end end - describe '#completed_percent and #closed_percent' do + describe "#completed_percent and #closed_percent" do create_shared_association_defaults_for_work_package_factory let(:project) { create(:project) } let(:version) { create(:version, project:) } let(:closed_status) { create(:status, is_closed: true) } - context 'without a work package' do - it 'is 0 for completed_percent' do + context "without a work package" do + it "is 0 for completed_percent" do expect(version.completed_percent) .to eq 0 end - it 'is 0 for closed_percent' do + it "is 0 for closed_percent" do expect(version.closed_percent) .to eq 0 end end - context 'with assigned work packages that are not begun' do + context "with assigned work packages that are not begun" do before do create(:work_package, version:) create(:work_package, version:, done_ratio: 0) end - it 'is 0 for completed_percent' do + it "is 0 for completed_percent" do expect(version.completed_percent) .to eq 0 end - it 'is 0 for closed_percent' do + it "is 0 for closed_percent" do expect(version.closed_percent) .to eq 0 end end - context 'with assigned work packages that are closed' do + context "with assigned work packages that are closed" do before do create(:work_package, status: closed_status, version:) create(:work_package, status: closed_status, version:, done_ratio: 20) @@ -405,54 +405,54 @@ RSpec.describe Version do create(:work_package, status: closed_status, version:, estimated_hours: 15) end - it 'is 100 for completed_percent' do + it "is 100 for completed_percent" do expect(version.completed_percent) .to eq 100 end - it 'is 100 for closed_percent' do + it "is 100 for closed_percent" do expect(version.closed_percent) .to eq 100 end end - context 'with assigned work packages that have only done ratio' do + context "with assigned work packages that have only done ratio" do before do create(:work_package, version:) create(:work_package, version:, done_ratio: 20) create(:work_package, version:, done_ratio: 70) end - it 'considers the done ratio of open work packages' do + it "considers the done ratio of open work packages" do expect(version.completed_percent) .to eq (0.0 + 20.0 + 70.0) / 3 end - it 'is 0 for closed_percent' do + it "is 0 for closed_percent" do expect(version.closed_percent) .to eq 0 end end - context 'with assigned work packages that have only done ratio with one being closed' do + context "with assigned work packages that have only done ratio with one being closed" do before do create(:work_package, version:) create(:work_package, version:, done_ratio: 20) create(:work_package, status: closed_status, version:) end - it 'considers the done ratio of open work packages' do + it "considers the done ratio of open work packages" do expect(version.completed_percent) .to eq (0.0 + 20.0 + 100.0) / 3 end - it 'is 33 for closed_percent' do + it "is 33 for closed_percent" do expect(version.closed_percent) .to eq 100.0 / 3 end end - context 'with assigned work packages that have weighted done ratio' do + context "with assigned work packages that have weighted done ratio" do before do create(:work_package, version:, estimated_hours: 10) create(:work_package, version:, done_ratio: 30, estimated_hours: 20) @@ -460,18 +460,18 @@ RSpec.describe Version do create(:work_package, status: closed_status, version:, estimated_hours: 25) end - it 'considers the weighted done ratio of open work packages' do + it "considers the weighted done ratio of open work packages" do expect(version.completed_percent) .to eq ((10.0 * 0) + (20.0 * 0.3) + (40 * 0.1) + (25.0 * 1)) / 95.0 * 100 end - it 'is considers the weighted closed_percent' do + it "is considers the weighted closed_percent" do expect(version.closed_percent) .to eq 25.0 / 95.0 * 100 end end - context 'with assigned work packages that have partly weighted done ratio' do + context "with assigned work packages that have partly weighted done ratio" do before do create(:work_package, version:, done_ratio: 20) create(:work_package, version:, done_ratio: 30, estimated_hours: 10) @@ -479,19 +479,19 @@ RSpec.describe Version do create(:work_package, status: closed_status, version:) end - it 'considers the weighted done ratio of open work packages and uses default weighting if unset' do + it "considers the weighted done ratio of open work packages and uses default weighting if unset" do expect(version.completed_percent) .to eq ((25.0 * 0.2) + (25.0 * 1) + (10.0 * 0.3) + (40.0 * 0.1)) / 100.0 * 100 end - it 'is considers the weighted closed_percent using average for the estimated hours' do + it "is considers the weighted closed_percent using average for the estimated hours" do expect(version.closed_percent) .to eq 25.0 / 100.0 * 100 end end end - it_behaves_like 'acts_as_customizable included' do + it_behaves_like "acts_as_customizable included" do let(:model_instance) { version } let(:custom_field) { create(:version_custom_field) } end diff --git a/spec/models/work_packages/pdf_export/work_package_list_to_pdf_spec.rb b/spec/models/work_packages/pdf_export/work_package_list_to_pdf_spec.rb index cfff744ab78..c5d2028e888 100644 --- a/spec/models/work_packages/pdf_export/work_package_list_to_pdf_spec.rb +++ b/spec/models/work_packages/pdf_export/work_package_list_to_pdf_spec.rb @@ -154,12 +154,12 @@ RSpec.describe WorkPackage::PDFExport::WorkPackageListToPdf do describe "with a request for a PDF table" do it "contains correct data" do expect(pdf_strings).to eq [ - query.name, - *column_titles, - *work_package_columns(work_package_parent), - *work_package_columns(work_package_child), - "1/1", export_time_formatted, query.name - ].join(" ") + query.name, + *column_titles, + *work_package_columns(work_package_parent), + *work_package_columns(work_package_child), + "1/1", export_time_formatted, query.name + ].join(" ") end end @@ -168,15 +168,15 @@ RSpec.describe WorkPackage::PDFExport::WorkPackageListToPdf do it "contains correct data" do expect(pdf_strings).to eq [ - query.name, - work_package_parent.type.name, - *column_titles, - *work_package_columns(work_package_parent), - work_package_child.type.name, - *column_titles, - *work_package_columns(work_package_child), - "1/1", export_time_formatted, query.name - ].join(" ") + query.name, + work_package_parent.type.name, + *column_titles, + *work_package_columns(work_package_parent), + work_package_child.type.name, + *column_titles, + *work_package_columns(work_package_child), + "1/1", export_time_formatted, query.name + ].join(" ") end end @@ -185,17 +185,17 @@ RSpec.describe WorkPackage::PDFExport::WorkPackageListToPdf do it "contains correct data" do expect(pdf_strings).to eq [ - query.name, - work_package_parent.type.name, - *column_titles, - *work_package_columns(work_package_parent), - I18n.t("js.label_sum"), work_package_parent.story_points.to_s, - work_package_child.type.name, - *column_titles, - *work_package_columns(work_package_child), - I18n.t("js.label_sum"), work_package_child.story_points.to_s, - "1/1", export_time_formatted, query.name - ].join(" ") + query.name, + work_package_parent.type.name, + *column_titles, + *work_package_columns(work_package_parent), + I18n.t("js.label_sum"), work_package_parent.story_points.to_s, + work_package_child.type.name, + *column_titles, + *work_package_columns(work_package_child), + I18n.t("js.label_sum"), work_package_child.story_points.to_s, + "1/1", export_time_formatted, query.name + ].join(" ") end end @@ -204,17 +204,17 @@ RSpec.describe WorkPackage::PDFExport::WorkPackageListToPdf do it "contains correct data" do expect(pdf_strings).to eq [ - query.name, - "Foo", - *column_titles, - *work_package_columns(work_package_child), - I18n.t("js.label_sum"), work_package_child.story_points.to_s, - "Foo, Bar", - *column_titles, - *work_package_columns(work_package_parent), - I18n.t("js.label_sum"), work_package_parent.story_points.to_s, - "1/1", export_time_formatted, query.name - ].join(" ") + query.name, + "Foo", + *column_titles, + *work_package_columns(work_package_child), + I18n.t("js.label_sum"), work_package_child.story_points.to_s, + "Foo, Bar", + *column_titles, + *work_package_columns(work_package_parent), + I18n.t("js.label_sum"), work_package_parent.story_points.to_s, + "1/1", export_time_formatted, query.name + ].join(" ") end end @@ -223,15 +223,15 @@ RSpec.describe WorkPackage::PDFExport::WorkPackageListToPdf do it "contains correct data" do expect(pdf_strings).to eq [ - *cover_page_content, - query.name, - "1.", "2", work_package_parent.subject, - "2.", "2", work_package_child.subject, - "1/2", export_time_formatted, query.name, - *work_package_details(work_package_parent, "1"), - *work_package_details(work_package_child, "2"), - "2/2", export_time_formatted, query.name - ].join(" ") + *cover_page_content, + query.name, + "1.", "2", work_package_parent.subject, + "2.", "2", work_package_child.subject, + "1/2", export_time_formatted, query.name, + *work_package_details(work_package_parent, "1"), + *work_package_details(work_package_child, "2"), + "2/2", export_time_formatted, query.name + ].join(" ") end end @@ -241,15 +241,15 @@ RSpec.describe WorkPackage::PDFExport::WorkPackageListToPdf do it "contains correct data" do expect(pdf_strings).to eq [ - *cover_page_content, - query.name, - "1.", "2", work_package_parent.subject, - "1.1.", "2", work_package_child.subject, - "1/2", export_time_formatted, query.name, - *work_package_details(work_package_parent, "1"), - *work_package_details(work_package_child, "1.1"), - "2/2", export_time_formatted, query.name - ].join(" ") + *cover_page_content, + query.name, + "1.", "2", work_package_parent.subject, + "1.1.", "2", work_package_child.subject, + "1/2", export_time_formatted, query.name, + *work_package_details(work_package_parent, "1"), + *work_package_details(work_package_child, "1.1"), + "2/2", export_time_formatted, query.name + ].join(" ") end end @@ -259,18 +259,18 @@ RSpec.describe WorkPackage::PDFExport::WorkPackageListToPdf do it "contains correct data" do expect(pdf_strings).to eq [ - *cover_page_content, - query.name, - "1.", "2", work_package_parent.subject, - "2.", "2", work_package_child.subject, - "1/2", export_time_formatted, query.name, - I18n.t("js.work_packages.tabs.overview"), - column_title(:story_points), - I18n.t("js.label_sum"), work_packages_sum.to_s, - *work_package_details(work_package_parent, "1"), - *work_package_details(work_package_child, "2"), - "2/2", export_time_formatted, query.name - ].join(" ") + *cover_page_content, + query.name, + "1.", "2", work_package_parent.subject, + "2.", "2", work_package_child.subject, + "1/2", export_time_formatted, query.name, + I18n.t("js.work_packages.tabs.overview"), + column_title(:story_points), + I18n.t("js.label_sum"), work_packages_sum.to_s, + *work_package_details(work_package_parent, "1"), + *work_package_details(work_package_child, "2"), + "2/2", export_time_formatted, query.name + ].join(" ") end end @@ -280,20 +280,20 @@ RSpec.describe WorkPackage::PDFExport::WorkPackageListToPdf do it "contains correct data" do expect(pdf_strings).to eq [ - *cover_page_content, - query.name, - "1.", "2", work_package_parent.subject, - "2.", "2", work_package_child.subject, - "1/2", export_time_formatted, query.name, - I18n.t("js.work_packages.tabs.overview"), - column_title(:type), column_title(:story_points), - work_package_parent.type.name, work_package_parent.story_points.to_s, - work_package_child.type.name, work_package_child.story_points.to_s, - I18n.t("js.label_sum"), work_packages_sum.to_s, - *work_package_details(work_package_parent, "1"), - *work_package_details(work_package_child, "2"), - "2/2", export_time_formatted, query.name - ].join(" ") + *cover_page_content, + query.name, + "1.", "2", work_package_parent.subject, + "2.", "2", work_package_child.subject, + "1/2", export_time_formatted, query.name, + I18n.t("js.work_packages.tabs.overview"), + column_title(:type), column_title(:story_points), + work_package_parent.type.name, work_package_parent.story_points.to_s, + work_package_child.type.name, work_package_child.story_points.to_s, + I18n.t("js.label_sum"), work_packages_sum.to_s, + *work_package_details(work_package_parent, "1"), + *work_package_details(work_package_child, "2"), + "2/2", export_time_formatted, query.name + ].join(" ") end end @@ -303,22 +303,22 @@ RSpec.describe WorkPackage::PDFExport::WorkPackageListToPdf do it "contains correct data" do expect(pdf_strings).to eq [ - *cover_page_content, - query.name, - "1.", "2", work_package_child.subject, - "2.", "2", work_package_parent.subject, - "1/2", export_time_formatted, query.name, - I18n.t("js.work_packages.tabs.overview"), - list_custom_field.name.upcase, column_title(:story_points), + *cover_page_content, + query.name, + "1.", "2", work_package_child.subject, + "2.", "2", work_package_parent.subject, + "1/2", export_time_formatted, query.name, + I18n.t("js.work_packages.tabs.overview"), + list_custom_field.name.upcase, column_title(:story_points), - "Foo", work_package_child.story_points.to_s, - "Foo, Bar", work_package_parent.story_points.to_s, - I18n.t("js.label_sum"), work_packages_sum.to_s, + "Foo", work_package_child.story_points.to_s, + "Foo, Bar", work_package_parent.story_points.to_s, + I18n.t("js.label_sum"), work_packages_sum.to_s, - *work_package_details(work_package_child, "1"), - *work_package_details(work_package_parent, "2"), - "2/2", export_time_formatted, query.name - ].join(" ") + *work_package_details(work_package_child, "1"), + *work_package_details(work_package_parent, "2"), + "2/2", export_time_formatted, query.name + ].join(" ") end end end diff --git a/spec/requests/api/v3/activities_by_work_package_resource_spec.rb b/spec/requests/api/v3/activities_by_work_package_resource_spec.rb index b9f7d7e49b5..eb8198d6c67 100644 --- a/spec/requests/api/v3/activities_by_work_package_resource_spec.rb +++ b/spec/requests/api/v3/activities_by_work_package_resource_spec.rb @@ -26,16 +26,16 @@ # See COPYRIGHT and LICENSE files for more details. #++ -require 'spec_helper' -require 'rack/test' +require "spec_helper" +require "rack/test" RSpec.describe API::V3::Activities::ActivitiesByWorkPackageAPI do include API::V3::Utilities::PathHelper - describe 'activities' do + describe "activities" do let(:project) { work_package.project } let(:work_package) { create(:work_package) } - let(:comment) { 'This is a test comment!' } + let(:comment) { "This is a test comment!" } let(:current_user) do create(:user, member_with_roles: { project => role }) end @@ -46,28 +46,28 @@ RSpec.describe API::V3::Activities::ActivitiesByWorkPackageAPI do allow(User).to receive(:current).and_return(current_user) end - describe 'GET /api/v3/work_packages/:id/activities' do + describe "GET /api/v3/work_packages/:id/activities" do before do get api_v3_paths.work_package_activities work_package.id end - it 'succeeds' do + it "succeeds" do expect(last_response.status).to be 200 end - context 'not allowed to see work package' do + context "not allowed to see work package" do let(:current_user) { create(:user) } - it 'fails with HTTP Not Found' do + it "fails with HTTP Not Found" do expect(last_response.status).to be 404 end end end - describe 'POST /api/v3/work_packages/:id/activities' do + describe "POST /api/v3/work_packages/:id/activities" do let(:work_package) { create(:work_package) } - shared_context 'create activity' do + shared_context "create activity" do before do header "Content-Type", "application/json" post api_v3_paths.work_package_activities(work_package.id), @@ -75,34 +75,34 @@ RSpec.describe API::V3::Activities::ActivitiesByWorkPackageAPI do end end - it_behaves_like 'safeguarded API' do + it_behaves_like "safeguarded API" do let(:permissions) { %i(view_work_packages) } - include_context 'create activity' + include_context "create activity" end - it_behaves_like 'valid activity request' do + it_behaves_like "valid activity request" do let(:status_code) { 201 } - include_context 'create activity' + include_context "create activity" end - context 'with an erroneous work package' do + context "with an erroneous work package" do before do - work_package.subject = '' + work_package.subject = "" work_package.save!(validate: false) end - include_context 'create activity' + include_context "create activity" - it 'responds with error' do + it "responds with error" do expect(last_response.status).to be 422 end - it 'notes the error' do + it "notes the error" do expect(last_response.body) .to be_json_eql("Subject can't be blank.".to_json) - .at_path('message') + .at_path("message") end end end diff --git a/spec/routing/watchers_spec.rb b/spec/routing/watchers_spec.rb index 20bfba20a9f..fb674bfb7e6 100644 --- a/spec/routing/watchers_spec.rb +++ b/spec/routing/watchers_spec.rb @@ -31,7 +31,7 @@ require "spec_helper" RSpec.describe WatchersController do shared_examples_for "watched model routes" do before do - expect(::OpenProject::Acts::Watchable::Routes).to receive(:matches?).and_return(true) + expect(OpenProject::Acts::Watchable::Routes).to receive(:matches?).and_return(true) end it "connects POST /:object_type/:object_id/watch to watchers#watch" do diff --git a/spec/services/work_packages/shared/all_days_spec.rb b/spec/services/work_packages/shared/all_days_spec.rb index b74103033b1..df8647a14c2 100644 --- a/spec/services/work_packages/shared/all_days_spec.rb +++ b/spec/services/work_packages/shared/all_days_spec.rb @@ -166,8 +166,9 @@ RSpec.describe WorkPackages::Shared::AllDays do end context "with lag" do - include_examples "soonest working day with lag", date: Date.new(2022, 12, 24), lag: 7, - expected: Date.new(2022, 12, 31) + include_examples "soonest working day with lag", date: Date.new(2022, 12, 24), + lag: 7, + expected: Date.new(2022, 12, 31) end end end diff --git a/spec/services/work_packages/shared/working_days_spec.rb b/spec/services/work_packages/shared/working_days_spec.rb index a2be2810338..2b1d6f153e9 100644 --- a/spec/services/work_packages/shared/working_days_spec.rb +++ b/spec/services/work_packages/shared/working_days_spec.rb @@ -189,7 +189,7 @@ RSpec.describe WorkPackages::Shared::WorkingDays do end context "with lag" do - it "returns the soonest working day from the given day, after a configurable lag of working days" do + it "returns the soonest working day from the given day, after a configurable lag of working days" do expect(subject.soonest_working_day(sunday_2022_07_31, lag: nil)).to eq(sunday_2022_07_31) expect(subject.soonest_working_day(sunday_2022_07_31, lag: 0)).to eq(sunday_2022_07_31) expect(subject.soonest_working_day(sunday_2022_07_31, lag: 1)).to eq(monday_2022_08_01) diff --git a/spec/support/components/common/modal.rb b/spec/support/components/common/modal.rb index 5d8b3ad27f9..98d1821a13b 100644 --- a/spec/support/components/common/modal.rb +++ b/spec/support/components/common/modal.rb @@ -57,8 +57,8 @@ module Components end end - def within_modal(name = nil, **options, &) - super(name, **options, &) + def within_modal(name = nil, **, &) + super end def modal_element diff --git a/spec/support/pages/notifications/split_screen.rb b/spec/support/pages/notifications/split_screen.rb index 1b7a9aa02f2..0f8c943c0bf 100644 --- a/spec/support/pages/notifications/split_screen.rb +++ b/spec/support/pages/notifications/split_screen.rb @@ -35,7 +35,7 @@ module Pages include ::Components::Autocompleter::NgSelectAutocompleteHelpers def initialize(work_package, project = nil) - super(work_package, project) + super @selector = ".work-packages--details" end end diff --git a/spec/support/pages/work_packages/split_work_package.rb b/spec/support/pages/work_packages/split_work_package.rb index bbd5e28836c..e0d5fe868b5 100644 --- a/spec/support/pages/work_packages/split_work_package.rb +++ b/spec/support/pages/work_packages/split_work_package.rb @@ -34,7 +34,7 @@ module Pages attr_reader :selector def initialize(work_package, project = nil) - super(work_package, project) + super @selector = ".work-packages--details" end diff --git a/spec/support/pages/work_packages/work_packages_timeline.rb b/spec/support/pages/work_packages/work_packages_timeline.rb index b76802b9230..cc8b8206290 100644 --- a/spec/support/pages/work_packages/work_packages_timeline.rb +++ b/spec/support/pages/work_packages/work_packages_timeline.rb @@ -50,7 +50,7 @@ module Pages end def expect_work_package_listed(*work_packages) - super(*work_packages) + super within(timeline_container) do work_packages.each do |wp| diff --git a/spec/support/wait/handler.rb b/spec/support/wait/handler.rb index 68b6792e1c0..efee55b9a62 100644 --- a/spec/support/wait/handler.rb +++ b/spec/support/wait/handler.rb @@ -4,12 +4,12 @@ module RSpec module Wait module Handler - def handle_matcher(target, *args, &) + def handle_matcher(target, *, &) t = Time.current begin actual = target.respond_to?(:call) ? target.call : target - super(actual, *args, &) + super(actual, *, &) rescue RSpec::Expectations::ExpectationNotMetError => e elapsed = Time.current - t if elapsed < RSpec.configuration.wait_timeout diff --git a/spec/support/webmock.rb b/spec/support/webmock.rb index 723a0fec21f..45c49beb3fa 100644 --- a/spec/support/webmock.rb +++ b/spec/support/webmock.rb @@ -50,7 +50,8 @@ RSpec.configure do |config| "chromedriver.storage.googleapis.com", "openproject-ci-public-logs.s3.eu-west-1.amazonaws.com", "cuprite-chrome" - ]) + ] + ) WebMock.enable! example.run ensure diff --git a/spec/workers/backup_job_spec.rb b/spec/workers/backup_job_spec.rb index 1fc7438efb1..48b710316c3 100644 --- a/spec/workers/backup_job_spec.rb +++ b/spec/workers/backup_job_spec.rb @@ -26,7 +26,7 @@ # See COPYRIGHT and LICENSE files for more details. #++ -require 'spec_helper' +require "spec_helper" RSpec.describe BackupJob, type: :model do shared_examples "it creates a backup" do |opts = {}| @@ -85,16 +85,16 @@ RSpec.describe BackupJob, type: :model do job.perform **arguments.first end - describe 'environment variables' do + describe "environment variables" do let(:hash_config) do - ActiveRecord::DatabaseConfigurations::HashConfig.new('test', 'primary', config_double) + ActiveRecord::DatabaseConfigurations::HashConfig.new("test", "primary", config_double) end before do allow(ActiveRecord::Base).to receive(:connection_db_config).and_return(hash_config) end - context 'when config has username' do + context "when config has username" do let(:config_double) do { adapter: :postgresql, @@ -104,16 +104,16 @@ RSpec.describe BackupJob, type: :model do } end - it 'sets PGUSER and other variables' do + it "sets PGUSER and other variables" do perform expect(Open3).to have_received(:capture3) do |*args| - expect(args[0]).to include('PGUSER' => 'foobar', 'PGPASSWORD' => 'blabla', 'PGDATABASE' => 'test') + expect(args[0]).to include("PGUSER" => "foobar", "PGPASSWORD" => "blabla", "PGDATABASE" => "test") end end end - context 'when config has user reference, not username (regression #44251)' do + context "when config has user reference, not username (regression #44251)" do let(:config_double) do { adapter: :postgresql, @@ -123,11 +123,11 @@ RSpec.describe BackupJob, type: :model do } end - it 'still sets PGUSER and other variables' do + it "still sets PGUSER and other variables" do perform expect(Open3).to have_received(:capture3) do |*args| - expect(args[0]).to include('PGUSER' => 'foobar', 'PGPASSWORD' => 'blabla', 'PGDATABASE' => 'test') + expect(args[0]).to include("PGUSER" => "foobar", "PGPASSWORD" => "blabla", "PGDATABASE" => "test") end end end @@ -218,7 +218,7 @@ RSpec.describe BackupJob, type: :model do before do FileUtils.mkdir_p Pathname(dummy_path).parent.to_s - File.open(dummy_path, "w") { |f| f.puts 'dummy' } + File.open(dummy_path, "w") { |f| f.puts "dummy" } allow_any_instance_of(LocalFileUploader).to receive(:cached?).and_return(true) allow_any_instance_of(LocalFileUploader)