From dadaa32a575df47e852de19a1f6fb7ec5b3f37d9 Mon Sep 17 00:00:00 2001 From: Alexander Meindl Date: Sun, 18 Apr 2021 15:58:57 +0200 Subject: [PATCH] frozen_string_literal, Coding standards fixed and ruby 2.7 warnings - redmine 4.1 and ruby 2.5 is required --- .github/workflows/linters.yml | 3 +- .github/workflows/tests.yml | 12 +-- .gitignore | 1 + .rubocop.yml | 43 ++++++++- CHANGELOG.md | 10 +- Gemfile | 16 ++++ README.md | 5 +- .../messenger_settings_controller.rb | 6 +- app/helpers/messenger_projects_helper.rb | 4 +- app/models/messenger.rb | 45 ++++----- app/models/messenger_setting.rb | 2 + .../_messenger_select.html.slim | 6 +- .../_messenger_text.html.slim | 6 +- app/views/messenger_settings/_show.html.slim | 30 +++--- .../settings/_messenger_settings.html.slim | 94 +++++++++---------- config/routes.rb | 2 + db/migrate/001_create_messenger_settings.rb | 2 + db/migrate/002_add_default_mentions.rb | 2 + db/migrate/003_add_private_settings.rb | 2 + db/migrate/004_add_direct_messages.rb | 2 + init.rb | 6 +- lib/redmine_messenger.rb | 12 ++- lib/redmine_messenger/helpers.rb | 4 +- lib/redmine_messenger/hooks.rb | 8 +- .../patches/contact_patch.rb | 2 + .../patches/db_entry_patch.rb | 2 + lib/redmine_messenger/patches/issue_patch.rb | 10 +- .../patches/password_patch.rb | 2 + .../patches/wiki_page_patch.rb | 2 + lib/redmine_messenger/version.rb | 4 +- test/integration/common_views_test.rb | 8 +- test/integration/routing_test.rb | 2 + test/support/gemfile.rb | 9 -- test/test_helper.rb | 2 +- test/unit/i18n_test.rb | 2 + test/unit/issue_test.rb | 4 +- test/unit/project_test.rb | 8 +- 37 files changed, 238 insertions(+), 142 deletions(-) delete mode 100644 test/support/gemfile.rb diff --git a/.github/workflows/linters.yml b/.github/workflows/linters.yml index 85c00a1..5032b8a 100644 --- a/.github/workflows/linters.yml +++ b/.github/workflows/linters.yml @@ -14,7 +14,8 @@ jobs: - name: Setup Gemfile run: | - cp test/support/gemfile.rb Gemfile + touch .enable_dev + sed -i "3isource 'https://rubygems.org'" Gemfile - name: Setup Ruby uses: ruby/setup-ruby@v1 diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index dee52f1..a2dfbe9 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -12,16 +12,12 @@ jobs: strategy: matrix: - ruby: ['2.6', '2.4'] - redmine: ['4.0-stable', '4.1-stable', '4.2-stable', 'master'] + ruby: ['2.7', '2.6', '2.5'] + redmine: ['4.1-stable', '4.2-stable', 'master'] db: ['postgres', 'mysql'] - include: - - ruby: '2.7' - redmine: 4.2-stable - db: postgres exclude: - - ruby: '2.4' - redmine: master + - ruby: '2.7' + redmine: 4.1-stable fail-fast: false services: diff --git a/.gitignore b/.gitignore index b3bf1af..c053587 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ Gemfile.lock docs/_build docs/_static docs/_templates +.enable_dev diff --git a/.rubocop.yml b/.rubocop.yml index 0d57471..05a5cef 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -6,13 +6,17 @@ Rails: Enabled: true AllCops: - TargetRubyVersion: 2.4 + TargetRubyVersion: 2.5 TargetRailsVersion: 5.2 NewCops: enable Metrics: Enabled: false +Metrics/ParameterLists: + Enabled: true + CountKeywordArgs: false + Layout/LineLength: Max: 140 @@ -37,15 +41,44 @@ Performance/ChainArrayAllocation: Style/AutoResourceCleanup: Enabled: true +Style/ExpandPathArguments: + Enabled: true + Exclude: + - test/**/* + Style/FrozenStringLiteralComment: - Enabled: false + Enabled: true + Exclude: + - '/**/*.rsb' + +Style/OptionHash: + Enabled: true + SuspiciousParamNames: + - options + - api_options + - opts + - args + - params + - parameters + - settings + Exclude: + - lib/redmine_messenger/patches/*.rb + +Style/ReturnNil: + Enabled: true + +Style/UnlessLogicalOperators: + Enabled: true + +Style/MethodCallWithArgsParentheses: + Enabled: true + AllowParenthesesInMultilineCall: true + AllowParenthesesInChaining: true + EnforcedStyle: omit_parentheses Style/Documentation: Enabled: false -Style/ExpandPathArguments: - Enabled: false - Style/HashTransformKeys: Enabled: false diff --git a/CHANGELOG.md b/CHANGELOG.md index 207c260..a6ffb62 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ Changelog ========= +1.0.9 +----- + +- Redmine 4.1 is required. Use git tag 1.0.8, if you use an older version. +- Redmine 4.2 support +- Ruby 2.5 or higher is required + 1.0.8 ----- @@ -9,6 +16,7 @@ Changelog 1.0.7 ----- + - Added feature to send messages directly to users to be notified - thanks to @Ujifman 1.0.6 @@ -29,7 +37,6 @@ Changelog - ruby 2.4.x or newer is required - 1.0.4 ----- @@ -40,7 +47,6 @@ Changelog - Redmine 4 support - 1.0.2 ----- diff --git a/Gemfile b/Gemfile index 8c3b5db..bb03c42 100644 --- a/Gemfile +++ b/Gemfile @@ -1 +1,17 @@ +# frozen_string_literal: true + gem 'slim-rails' + +group :development do + # this is only used for development. + # if you want to use it, do: + # - create .enable_dev file in additionals directory + # - remove rubocop entries from REDMINE/Gemfile + # - remove REDMINE/.rubocop* files + if File.file? File.expand_path './.enable_dev', __dir__ + gem 'rubocop', require: false + gem 'rubocop-performance', require: false + gem 'rubocop-rails', require: false + gem 'slim_lint', require: false + end +end diff --git a/README.md b/README.md index d179b77..04f4914 100644 --- a/README.md +++ b/README.md @@ -73,10 +73,11 @@ Go to Rocket.Chat documentation [Incoming WebHook Scripting](https://rocket.chat Requirements ------------ -* Redmine version >= 4.0.0 -* Ruby version >= 2.4.0 +* Redmine version >= 4.1.0 +* Ruby version >= 2.5.0 If you want to use it with Redmine 3.x, use git tag 1.0.5 +If you want to use it with Redmine 4.0, use git tag 1.0.8 Installation ------------ diff --git a/app/controllers/messenger_settings_controller.rb b/app/controllers/messenger_settings_controller.rb index 70f6f24..5c461e3 100644 --- a/app/controllers/messenger_settings_controller.rb +++ b/app/controllers/messenger_settings_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class MessengerSettingsController < ApplicationController before_action :find_project_by_project_id before_action :authorize @@ -8,10 +10,10 @@ class MessengerSettingsController < ApplicationController flash[:notice] = l :notice_successful_update redirect_to settings_project_path(@project, tab: 'messenger') else - flash[:error] = setting.errors.full_messages.flatten.join("\n") + flash[:error] = setting.errors.full_messages.flatten.join "\n" respond_to do |format| format.html { redirect_back_or_default(settings_project_path(@project, tab: 'messenger')) } - format.api { render_validation_errors(setting) } + format.api { render_validation_errors setting } end end end diff --git a/app/helpers/messenger_projects_helper.rb b/app/helpers/messenger_projects_helper.rb index 4b94c00..9314549 100644 --- a/app/helpers/messenger_projects_helper.rb +++ b/app/helpers/messenger_projects_helper.rb @@ -1,8 +1,10 @@ +# frozen_string_literal: true + module MessengerProjectsHelper def project_settings_tabs tabs = super - if User.current.allowed_to?(:manage_messenger, @project) + if User.current.allowed_to? :manage_messenger, @project tabs << { name: 'messenger', action: :show, partial: 'messenger_settings/show', diff --git a/app/models/messenger.rb b/app/models/messenger.rb index 7928a66..83b8c6a 100644 --- a/app/models/messenger.rb +++ b/app/models/messenger.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'net/http' require 'uri' @@ -16,9 +18,9 @@ class Messenger # @see https://api.slack.com/reference/surfaces/formatting#escaping - text.gsub!('&', '&') - text.gsub!('<', '<') - text.gsub!('>', '>') + text.gsub! '&', '&' + text.gsub! '<', '<' + text.gsub! '>', '>' text end @@ -32,7 +34,7 @@ class Messenger return if url.blank? || channels.blank? params = { text: msg, link_names: 1 } - username = textfield_for_project(options[:project], :messenger_username) + username = textfield_for_project options[:project], :messenger_username params[:username] = username if username.present? params[:attachments] = options[:attachment]&.any? ? [options[:attachment]] : [] icon = textfield_for_project options[:project], :messenger_icon @@ -45,16 +47,16 @@ class Messenger end channels.each do |channel| - uri = URI(url) + uri = URI url params[:channel] = channel http_options = { use_ssl: uri.scheme == 'https' } - http_options[:verify_mode] = OpenSSL::SSL::VERIFY_NONE unless RedmineMessenger.setting?(:messenger_verify_ssl) + http_options[:verify_mode] = OpenSSL::SSL::VERIFY_NONE unless RedmineMessenger.setting? :messenger_verify_ssl begin req = Net::HTTP::Post.new uri req.set_form_data payload: params.to_json - Net::HTTP.start(uri.hostname, uri.port, http_options) do |http| + Net::HTTP.start uri.hostname, uri.port, http_options do |http| response = http.request req - Rails.logger.warn(response.inspect) unless [Net::HTTPSuccess, Net::HTTPRedirection, Net::HTTPOK].include? response + Rails.logger.warn response.inspect unless [Net::HTTPSuccess, Net::HTTPRedirection, Net::HTTPOK].include? response end rescue StandardError => e Rails.logger.warn "cannot connect to #{url}" @@ -68,9 +70,9 @@ class Messenger host = Regexp.last_match 2 port = Regexp.last_match 4 prefix = Regexp.last_match 5 - Rails.application.routes.url_for(obj.event_url(host: host, protocol: Setting.protocol, port: port, script_name: prefix)) + Rails.application.routes.url_for obj.event_url(host: host, protocol: Setting.protocol, port: port, script_name: prefix) else - Rails.application.routes.url_for(obj.event_url(host: Setting.host_name, protocol: Setting.protocol, script_name: '')) + Rails.application.routes.url_for obj.event_url(host: Setting.host_name, protocol: Setting.protocol, script_name: '') end end @@ -103,7 +105,7 @@ class Messenger # project based pm = MessengerSetting.find_by project_id: proj.id - return pm.send(config) if !pm.nil? && pm.send(config).present? + return pm.send config if !pm.nil? && pm.send(config).present? default_textfield proj, config end @@ -121,7 +123,7 @@ class Messenger return [] if proj.blank? # project based - pm = MessengerSetting.find_by(project_id: proj.id) + pm = MessengerSetting.find_by project_id: proj.id if !pm.nil? && pm.messenger_channel.present? return [] if pm.messenger_channel == '-' @@ -135,14 +137,14 @@ class Messenger @setting_found = 0 # project based - pm = MessengerSetting.find_by(project_id: proj.id) + pm = MessengerSetting.find_by project_id: proj.id unless pm.nil? || pm.send(config).zero? @setting_found = 1 return false if pm.send(config) == 1 return true if pm.send(config) == 2 # 0 = use system based settings end - default_project_setting(proj, config) + default_project_setting proj, config end def default_project_setting(proj, config) @@ -173,7 +175,7 @@ class Messenger title = key field_format = CustomField.find(detail.prop_key)&.field_format - value = IssuesController.helpers.format_value(detail.value, detail.custom_field) if detail.value.present? + value = IssuesController.helpers.format_value detail.value, detail.custom_field if detail.value.present? end elsif detail.property == 'attachment' key = 'attachment' @@ -181,7 +183,7 @@ class Messenger value = detail.value.to_s elsif detail.property == 'attr' && detail.prop_key == 'db_relation' - return { short: true } unless setting_for_project(prj, :post_db) + return { short: true } unless setting_for_project prj, :post_db title = I18n.t :field_db_relation if detail.value.present? @@ -190,7 +192,7 @@ class Messenger end elsif detail.property == 'attr' && detail.prop_key == 'password_relation' - return { short: true } unless setting_for_project(prj, :post_password) + return { short: true } unless setting_for_project prj, :post_password title = I18n.t :field_password_relation if detail.value.present? @@ -198,7 +200,7 @@ class Messenger value = entry.present? ? entry.name : detail.value.to_s end else - key = detail.prop_key.to_s.sub('_id', '') + key = detail.prop_key.to_s.sub '_id', '' title = case key when 'parent' I18n.t "field_#{key}_issue" @@ -251,7 +253,7 @@ class Messenger end end - value = object_field_value(Version, detail.value) if detail.property == 'cf' && field_format == 'version' + value = object_field_value Version, detail.value if detail.property == 'cf' && field_format == 'version' value = if value.present? if escape markup_format value @@ -270,7 +272,7 @@ class Messenger def mentions(project, text) names = [] textfield_for_project(project, :default_mentions).split(',').each { |m| names.push m.strip } - names += extract_usernames(text) unless text.nil? + names += extract_usernames text unless text.nil? names.present? ? " To: #{names.uniq.join ', '}" : nil end @@ -282,7 +284,8 @@ class Messenger end def extract_usernames(text) - text = '' if text.nil? + return [] if text.blank? + # messenger usernames may only contain lowercase letters, numbers, # dashes, dots and underscores and must start with a letter or number. text.scan(/@[a-z0-9][a-z0-9_\-.]*/).uniq diff --git a/app/models/messenger_setting.rb b/app/models/messenger_setting.rb index 67bb1bc..0df0b23 100644 --- a/app/models/messenger_setting.rb +++ b/app/models/messenger_setting.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class MessengerSetting < ActiveRecord::Base belongs_to :project diff --git a/app/views/messenger_settings/_messenger_select.html.slim b/app/views/messenger_settings/_messenger_select.html.slim index 5a3099a..eaee537 100644 --- a/app/views/messenger_settings/_messenger_select.html.slim +++ b/app/views/messenger_settings/_messenger_select.html.slim @@ -1,7 +1,7 @@ p = f.select mf, project_messenger_options(@messenger_setting.send(mf)), label: l("label_settings_#{mf}") ' - em.info[style="display: inline;"] - = l(:label_default) + em.info style="display: inline;" + = l :label_default ' : - = project_setting_messenger_default_value(mf) + = project_setting_messenger_default_value mf diff --git a/app/views/messenger_settings/_messenger_text.html.slim b/app/views/messenger_settings/_messenger_text.html.slim index 69c4e1b..dee0e84 100644 --- a/app/views/messenger_settings/_messenger_text.html.slim +++ b/app/views/messenger_settings/_messenger_text.html.slim @@ -1,9 +1,9 @@ p = f.text_field mf, size: size, label: l("label_settings_#{mf}") em.info - = l(:label_messenger_project_text_field_info) + = l :label_messenger_project_text_field_info | ( - = l(:label_default) + = l :label_default ' : - = Messenger.default_textfield(@project, mf) + = Messenger.default_textfield @project, mf | ) diff --git a/app/views/messenger_settings/_show.html.slim b/app/views/messenger_settings/_show.html.slim index 54b4d96..0bbb159 100644 --- a/app/views/messenger_settings/_show.html.slim +++ b/app/views/messenger_settings/_show.html.slim @@ -1,6 +1,6 @@ = error_messages_for 'messenger_setting' -- @messenger_setting = MessengerSetting.find_or_create(@project.id) +- @messenger_setting = MessengerSetting.find_or_create @project.id = labelled_form_for :setting, @messenger_setting, url: project_messenger_setting_path(project_id: @project), @@ -8,20 +8,20 @@ class: 'tabular' do |f| fieldset#messenger_settings.box.tabular - legend = l(:label_messenger_outgoing_webhook) + legend = l :label_messenger_outgoing_webhook - if User.current.admin? .contextual = link_to l(:label_administration), plugin_settings_path(id: 'redmine_messenger'), class: 'icon icon-settings' - .info = t(:messenger_settings_project_intro) + .info = t :messenger_settings_project_intro br p = f.text_field :messenger_url, size: 60, label: l(:label_settings_messenger_url) em.info - = l(:label_messenger_project_text_field_info) + = l :label_messenger_project_text_field_info | ( - = l(:label_messenger_default_not_visible) + = l :label_messenger_default_not_visible | ) = render partial: 'messenger_settings/messenger_text', locals: { f: f, mf: :messenger_icon, size: 60 } = render partial: 'messenger_settings/messenger_text', locals: { f: f, mf: :messenger_channel, size: 30 } @@ -29,8 +29,8 @@ = render partial: 'messenger_settings/messenger_select', locals: { f: f, mf: :messenger_verify_ssl } fieldset#messenger_settings.box.tabular - legend = l(:label_issue_plural) - .info = t(:messenger_issue_intro) + legend = l :label_issue_plural + .info = t :messenger_issue_intro br = render partial: 'messenger_settings/messenger_select', locals: { f: f, mf: :auto_mentions } = render partial: 'messenger_settings/messenger_text', locals: { f: f, mf: :default_mentions, size: 30 } @@ -43,16 +43,16 @@ = render partial: 'messenger_settings/messenger_select', locals: { f: f, mf: :messenger_direct_users_messages } fieldset#messenger_settings.box.tabular - legend = l(:label_wiki) - .info = t(:messenger_wiki_intro) + legend = l :label_wiki + .info = t :messenger_wiki_intro br = render partial: 'messenger_settings/messenger_select', locals: { f: f, mf: :post_wiki } = render partial: 'messenger_settings/messenger_select', locals: { f: f, mf: :post_wiki_updates } - if RedmineMessenger::REDMINE_DB_SUPPORT && User.current.allowed_to?(:view_db_entries, @project) fieldset#messenger_settings.box.tabular - legend = l(:field_db_entries) - .info = t(:messenger_db_intro) + legend = l :field_db_entries + .info = t :messenger_db_intro br = render partial: 'messenger_settings/messenger_select', locals: { f: f, mf: :post_db } = render partial: 'messenger_settings/messenger_select', locals: { f: f, mf: :post_db_updates } @@ -60,8 +60,8 @@ - if RedmineMessenger::REDMINE_CONTACTS_SUPPORT && User.current.allowed_to?(:view_contacts, @project) fieldset#messenger_settings.box.tabular - legend = l(:label_contact_plural) - .info = t(:messenger_contacts_intro) + legend = l :label_contact_plural + .info = t :messenger_contacts_intro br = render partial: 'messenger_settings/messenger_select', locals: { f: f, mf: :post_contact } = render partial: 'messenger_settings/messenger_select', locals: { f: f, mf: :post_contact_updates } @@ -69,8 +69,8 @@ - if Redmine::Plugin.installed?('redmine_passwords') && User.current.allowed_to?(:view_passwords, @project) fieldset#messenger_settings.box.tabular - legend = l(:field_passwords) - .info = t(:messenger_passwords_intro) + legend = l :field_passwords + .info = t :messenger_passwords_intro br = render partial: 'messenger_settings/messenger_select', locals: { f: f, mf: :post_password } = render partial: 'messenger_settings/messenger_select', locals: { f: f, mf: :post_password_updates } diff --git a/app/views/settings/_messenger_settings.html.slim b/app/views/settings/_messenger_settings.html.slim index 8d787ea..01248b4 100644 --- a/app/views/settings/_messenger_settings.html.slim +++ b/app/views/settings/_messenger_settings.html.slim @@ -1,111 +1,111 @@ -.info = t(:messenger_settings_intro) +.info = t :messenger_settings_intro br fieldset#messenger_settings.box.tabular - legend = l(:label_messenger_outgoing_webhook) + legend = l :label_messenger_outgoing_webhook p - = tag.label l(:label_settings_messenger_url) - = text_field_tag('settings[messenger_url]', @settings[:messenger_url], size: 60, placeholder: 'https://webhook.url') - em.info = t(:messenger_url_info_html) + label = l :label_settings_messenger_url + = text_field_tag 'settings[messenger_url]', @settings[:messenger_url], size: 60, placeholder: 'https://webhook.url' + em.info = t :messenger_url_info_html p - = tag.label l(:label_settings_messenger_icon) - = text_field_tag('settings[messenger_icon]', @settings[:messenger_icon], size: 60) + label = l :label_settings_messenger_icon + = text_field_tag 'settings[messenger_icon]', @settings[:messenger_icon], size: 60 p - = tag.label l(:label_settings_messenger_channel) - = text_field_tag('settings[messenger_channel]', @settings[:messenger_channel], size: 30, placeholder: 'redmine') - em.info = t(:messenger_channel_info_html) + label = l :label_settings_messenger_channel + = text_field_tag 'settings[messenger_channel]', @settings[:messenger_channel], size: 30, placeholder: 'redmine' + em.info = t :messenger_channel_info_html p - = tag.label l(:label_settings_messenger_username) - = text_field_tag('settings[messenger_username]', @settings[:messenger_username], size: 30) + label = l :label_settings_messenger_username + = text_field_tag 'settings[messenger_username]', @settings[:messenger_username], size: 30 p - = tag.label l(:label_settings_messenger_verify_ssl) + label = l :label_settings_messenger_verify_ssl = check_box_tag 'settings[messenger_verify_ssl]', 1, @settings[:messenger_verify_ssl].to_i == 1 - em.info = t(:messenger_verify_ssl_info_html) + em.info = t :messenger_verify_ssl_info_html fieldset#messenger_settings.box.tabular - legend = l(:label_issue_plural) - .info = t(:messenger_issue_intro) + legend = l :label_issue_plural + .info = t :messenger_issue_intro br p - = tag.label l(:label_settings_auto_mentions) + label = l :label_settings_auto_mentions = check_box_tag 'settings[auto_mentions]', 1, @settings[:auto_mentions].to_i == 1 p - = tag.label l(:label_settings_default_mentions) - = text_field_tag('settings[default_mentions]', @settings[:default_mentions], size: 30) - em.info = t(:default_mentionsl_info) + label = l :label_settings_default_mentions + = text_field_tag 'settings[default_mentions]', @settings[:default_mentions], size: 30 + em.info = t :default_mentionsl_info p - = tag.label l(:label_settings_display_watchers) + label = l :label_settings_display_watchers = check_box_tag 'settings[display_watchers]', 1, @settings[:display_watchers].to_i == 1 p - = tag.label l(:label_settings_post_updates) + label = l :label_settings_post_updates = check_box_tag 'settings[post_updates]', 1, @settings[:post_updates].to_i == 1 p - = tag.label l(:label_settings_new_include_description) + label = l :label_settings_new_include_description = check_box_tag 'settings[new_include_description]', 1, @settings[:new_include_description].to_i == 1 p - = tag.label l(:label_settings_updated_include_description) + label = l :label_settings_updated_include_description = check_box_tag 'settings[updated_include_description]', 1, @settings[:updated_include_description].to_i == 1 p - = tag.label l(:label_settings_post_private_issues) + label = l :label_settings_post_private_issues = check_box_tag 'settings[post_private_issues]', 1, @settings[:post_private_issues].to_i == 1 p - = tag.label l(:label_settings_post_private_notes) + label = l :label_settings_post_private_notes = check_box_tag 'settings[post_private_notes]', 1, @settings[:post_private_notes].to_i == 1 p - = tag.label l(:label_settings_messenger_direct_users_messages) + label = l :label_settings_messenger_direct_users_messages = check_box_tag 'settings[messenger_direct_users_messages]', 1, @settings[:messenger_direct_users_messages].to_i == 1 - em.info = t(:messenger_direct_users_messages_info_html) + em.info = t :messenger_direct_users_messages_info_html fieldset#messenger_settings.box.tabular - legend = l(:label_wiki) - .info = t(:messenger_wiki_intro) + legend = l :label_wiki + .info = t :messenger_wiki_intro br p - = tag.label l(:label_settings_post_wiki) + label = l :label_settings_post_wiki = check_box_tag 'settings[post_wiki]', 1, @settings[:post_wiki].to_i == 1 p - = tag.label l(:label_settings_post_wiki_updates) + label = l :label_settings_post_wiki_updates = check_box_tag 'settings[post_wiki_updates]', 1, @settings[:post_wiki_updates].to_i == 1 - if RedmineMessenger::REDMINE_DB_SUPPORT fieldset#messenger_settings.box.tabular - legend = l(:field_db_entries) - .info = t(:messenger_db_intro) + legend = l :field_db_entries + .info = t :messenger_db_intro br p - = tag.label l(:label_settings_post_db) + label = l :label_settings_post_db = check_box_tag 'settings[post_db]', 1, @settings[:post_db].to_i == 1 p - = tag.label l(:label_settings_post_db_updates) + label = l :label_settings_post_db_updates = check_box_tag 'settings[post_db_updates]', 1, @settings[:post_db_updates].to_i == 1 p - = tag.label l(:label_settings_post_private_db) + label = l :label_settings_post_private_db = check_box_tag 'settings[post_private_db]', 1, @settings[:post_private_db].to_i == 1 - if RedmineMessenger::REDMINE_CONTACTS_SUPPORT fieldset#messenger_settings.box.tabular - legend = l(:label_contact_plural) - .info = t(:messenger_contacts_intro) + legend = l :label_contact_plural + .info = t :messenger_contacts_intro br p - = tag.label l(:label_settings_post_contact) + label = l :label_settings_post_contact = check_box_tag 'settings[post_contact]', 1, @settings[:post_contact].to_i == 1 p - = tag.label l(:label_settings_post_contact_updates) + label = l :label_settings_post_contact_updates = check_box_tag 'settings[post_contact_updates]', 1, @settings[:post_contact_updates].to_i == 1 p - = tag.label l(:label_settings_post_private_contacts) + label = l :label_settings_post_private_contacts = check_box_tag 'settings[post_private_contacts]', 1, @settings[:post_private_contacts].to_i == 1 -- if Redmine::Plugin.installed?('redmine_passwords') +- if Redmine::Plugin.installed? 'redmine_passwords' fieldset#messenger_settings.box.tabular - legend = l(:field_passwords) - .info = t(:messenger_passwords_intro) + legend = l :field_passwords + .info = t :messenger_passwords_intro br p - = tag.label l(:label_settings_post_password) + label = l :label_settings_post_password = check_box_tag 'settings[post_password]', 1, @settings[:post_password].to_i == 1 p - = tag.label l(:label_settings_post_password_updates) + label = l :label_settings_post_password_updates = check_box_tag 'settings[post_password_updates]', 1, @settings[:post_password_updates].to_i == 1 diff --git a/config/routes.rb b/config/routes.rb index 4d63236..8531414 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + Rails.application.routes.draw do resources :projects, only: [] do resource :messenger_setting, only: %i[show update] diff --git a/db/migrate/001_create_messenger_settings.rb b/db/migrate/001_create_messenger_settings.rb index 392db49..0f0e58b 100644 --- a/db/migrate/001_create_messenger_settings.rb +++ b/db/migrate/001_create_messenger_settings.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreateMessengerSettings < ActiveRecord::Migration[4.2] def change create_table :messenger_settings do |t| diff --git a/db/migrate/002_add_default_mentions.rb b/db/migrate/002_add_default_mentions.rb index 3f5221f..8aa9d15 100644 --- a/db/migrate/002_add_default_mentions.rb +++ b/db/migrate/002_add_default_mentions.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class AddDefaultMentions < ActiveRecord::Migration[4.2] def change add_column :messenger_settings, :default_mentions, :string diff --git a/db/migrate/003_add_private_settings.rb b/db/migrate/003_add_private_settings.rb index f9194c3..b24eeee 100644 --- a/db/migrate/003_add_private_settings.rb +++ b/db/migrate/003_add_private_settings.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class AddPrivateSettings < ActiveRecord::Migration[4.2] def change add_column :messenger_settings, :post_private_contacts, :integer, default: 0, null: false diff --git a/db/migrate/004_add_direct_messages.rb b/db/migrate/004_add_direct_messages.rb index 89fa9b9..868fd7f 100644 --- a/db/migrate/004_add_direct_messages.rb +++ b/db/migrate/004_add_direct_messages.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class AddDirectMessages < ActiveRecord::Migration[4.2] def change add_column :messenger_settings, :messenger_direct_users_messages, :integer, default: 0, null: false diff --git a/init.rb b/init.rb index 7912a17..60579ad 100644 --- a/init.rb +++ b/init.rb @@ -1,4 +1,6 @@ -raise "\n\033[31mredmine_messenger requires ruby 2.4 or newer. Please update your ruby version.\033[0m" if RUBY_VERSION < '2.4' +# frozen_string_literal: true + +raise "\n\033[31mredmine_messenger requires ruby 2.5 or newer. Please update your ruby version.\033[0m" if RUBY_VERSION < '2.4' Redmine::Plugin.register :redmine_messenger do name 'Redmine Messenger' @@ -8,7 +10,7 @@ Redmine::Plugin.register :redmine_messenger do description 'Messenger integration for Slack, Discord, Rocketchat and Mattermost support' version RedmineMessenger::VERSION - requires_redmine version_or_higher: '4.0.0' + requires_redmine version_or_higher: '4.1.0' permission :manage_messenger, projects: :settings, messenger_settings: :update diff --git a/lib/redmine_messenger.rb b/lib/redmine_messenger.rb index 8215970..d4cf2ba 100644 --- a/lib/redmine_messenger.rb +++ b/lib/redmine_messenger.rb @@ -1,3 +1,7 @@ +# frozen_string_literal: true + +require 'redmine_messenger/version' + module RedmineMessenger REDMINE_CONTACTS_SUPPORT = Redmine::Plugin.installed? 'redmine_contacts' REDMINE_DB_SUPPORT = Redmine::Plugin.installed? 'redmine_db' @@ -8,9 +12,9 @@ module RedmineMessenger Issue.include RedmineMessenger::Patches::IssuePatch WikiPage.include RedmineMessenger::Patches::WikiPagePatch ProjectsController.send :helper, MessengerProjectsHelper - Contact.include(RedmineMessenger::Patches::ContactPatch) if RedmineMessenger::REDMINE_CONTACTS_SUPPORT - DbEntry.include(RedmineMessenger::Patches::DbEntryPatch) if RedmineMessenger::REDMINE_DB_SUPPORT - Password.include(RedmineMessenger::Patches::PasswordPatch) if Redmine::Plugin.installed?('redmine_passwords') + Contact.include RedmineMessenger::Patches::ContactPatch if RedmineMessenger::REDMINE_CONTACTS_SUPPORT + DbEntry.include RedmineMessenger::Patches::DbEntryPatch if RedmineMessenger::REDMINE_DB_SUPPORT + Password.include RedmineMessenger::Patches::PasswordPatch if Redmine::Plugin.installed? 'redmine_passwords' # Global helpers ActionView::Base.include RedmineMessenger::Helpers @@ -21,7 +25,7 @@ module RedmineMessenger def settings if Setting[:plugin_redmine_messenger].is_a? Hash - new_settings = ActiveSupport::HashWithIndifferentAccess.new(Setting[:plugin_redmine_messenger]) + new_settings = ActiveSupport::HashWithIndifferentAccess.new Setting[:plugin_redmine_messenger] Setting.plugin_redmine_messenger = new_settings new_settings else diff --git a/lib/redmine_messenger/helpers.rb b/lib/redmine_messenger/helpers.rb index c3a3e54..702df8b 100644 --- a/lib/redmine_messenger/helpers.rb +++ b/lib/redmine_messenger/helpers.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module RedmineMessenger module Helpers def project_messenger_options(active) @@ -7,7 +9,7 @@ module RedmineMessenger end def project_setting_messenger_default_value(value) - if Messenger.default_project_setting(@project, value) + if Messenger.default_project_setting @project, value l :label_messenger_settings_enabled else l :label_messenger_settings_disabled diff --git a/lib/redmine_messenger/hooks.rb b/lib/redmine_messenger/hooks.rb index 686973f..17335f5 100644 --- a/lib/redmine_messenger/hooks.rb +++ b/lib/redmine_messenger/hooks.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module RedmineMessenger class MessengerListener < Redmine::Hook::Listener def model_changeset_scan_commit_for_issue_ids_pre_issue_update(context = {}) @@ -17,9 +19,9 @@ module RedmineMessenger repository = changeset.repository if Setting.host_name.to_s =~ %r{/\A(https?://)?(.+?)(:(\d+))?(/.+)?\z/i} - host = Regexp.last_match(2) - port = Regexp.last_match(4) - prefix = Regexp.last_match(5) + host = Regexp.last_match 2 + port = Regexp.last_match 4 + prefix = Regexp.last_match 5 revision_url = Rails.application.routes.url_for( controller: 'repositories', action: 'revision', diff --git a/lib/redmine_messenger/patches/contact_patch.rb b/lib/redmine_messenger/patches/contact_patch.rb index 6462ffb..a93487b 100644 --- a/lib/redmine_messenger/patches/contact_patch.rb +++ b/lib/redmine_messenger/patches/contact_patch.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module RedmineMessenger module Patches module ContactPatch diff --git a/lib/redmine_messenger/patches/db_entry_patch.rb b/lib/redmine_messenger/patches/db_entry_patch.rb index 372fd64..d6b0315 100644 --- a/lib/redmine_messenger/patches/db_entry_patch.rb +++ b/lib/redmine_messenger/patches/db_entry_patch.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module RedmineMessenger module Patches module DbEntryPatch diff --git a/lib/redmine_messenger/patches/issue_patch.rb b/lib/redmine_messenger/patches/issue_patch.rb index 4142078..b34d2b2 100644 --- a/lib/redmine_messenger/patches/issue_patch.rb +++ b/lib/redmine_messenger/patches/issue_patch.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module RedmineMessenger module Patches module IssuePatch @@ -15,7 +17,7 @@ module RedmineMessenger channels = Messenger.channels_for_project project url = Messenger.url_for_project project - if Messenger.setting_for_project(project, :messenger_direct_users_messages) + if Messenger.setting_for_project project, :messenger_direct_users_messages messenger_to_be_notified.each do |user| channels.append "@#{user.login}" unless user == author end @@ -69,7 +71,7 @@ module RedmineMessenger channels = Messenger.channels_for_project project url = Messenger.url_for_project project - if Messenger.setting_for_project(project, :messenger_direct_users_messages) + if Messenger.setting_for_project project, :messenger_direct_users_messages messenger_to_be_notified.each do |user| channels.append "@#{user.login}" unless user == current_journal.user end @@ -82,12 +84,12 @@ module RedmineMessenger set_language_if_valid Setting.default_language attachment = {} - if Messenger.setting_for_project(project, :updated_include_description) + if Messenger.setting_for_project project, :updated_include_description attachment_text = Messenger.attachment_text_from_journal current_journal attachment[:text] = attachment_text if attachment_text.present? end - fields = current_journal.details.map { |d| Messenger.detail_to_field(d, project) } + fields = current_journal.details.map { |d| Messenger.detail_to_field d, project } if current_journal.notes.present? fields << { title: I18n.t(:label_comment), value: Messenger.markup_format(current_journal.notes), diff --git a/lib/redmine_messenger/patches/password_patch.rb b/lib/redmine_messenger/patches/password_patch.rb index f1d3971..11d40ac 100644 --- a/lib/redmine_messenger/patches/password_patch.rb +++ b/lib/redmine_messenger/patches/password_patch.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module RedmineMessenger module Patches module PasswordPatch diff --git a/lib/redmine_messenger/patches/wiki_page_patch.rb b/lib/redmine_messenger/patches/wiki_page_patch.rb index 1c02791..941d183 100644 --- a/lib/redmine_messenger/patches/wiki_page_patch.rb +++ b/lib/redmine_messenger/patches/wiki_page_patch.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module RedmineMessenger module Patches module WikiPagePatch diff --git a/lib/redmine_messenger/version.rb b/lib/redmine_messenger/version.rb index ef65ad6..e6a5f57 100644 --- a/lib/redmine_messenger/version.rb +++ b/lib/redmine_messenger/version.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module RedmineMessenger - VERSION = '1.0.8-master'.freeze + VERSION = '1.0.9' end diff --git a/test/integration/common_views_test.rb b/test/integration/common_views_test.rb index 782c386..ef7e907 100644 --- a/test/integration/common_views_test.rb +++ b/test/integration/common_views_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require File.expand_path '../../test_helper', __FILE__ class CommonViewsTest < Redmine::IntegrationTest @@ -21,14 +23,14 @@ class CommonViewsTest < Redmine::IntegrationTest end test 'View user' do - log_user('admin', 'admin') + log_user 'admin', 'admin' get '/users/2' assert_response :success end test 'View issue' do - log_user('admin', 'admin') - EnabledModule.create(project_id: 1, name: 'issue_tracking') + log_user 'admin', 'admin' + EnabledModule.create project_id: 1, name: 'issue_tracking' issue = Issue.where(id: 1).first issue.save get '/issues/1' diff --git a/test/integration/routing_test.rb b/test/integration/routing_test.rb index 84c4668..5142f3e 100644 --- a/test/integration/routing_test.rb +++ b/test/integration/routing_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require File.expand_path '../../test_helper', __FILE__ class RoutingTest < Redmine::RoutingTest diff --git a/test/support/gemfile.rb b/test/support/gemfile.rb deleted file mode 100644 index fcb0304..0000000 --- a/test/support/gemfile.rb +++ /dev/null @@ -1,9 +0,0 @@ -source 'https://rubygems.org' - -group :test do - gem 'pandoc-ruby', require: false - gem 'rubocop', require: false - gem 'rubocop-performance', require: false - gem 'rubocop-rails', require: false - gem 'slim_lint', require: false -end diff --git a/test/test_helper.rb b/test/test_helper.rb index 2ec7af2..ae84ca0 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -1,4 +1,4 @@ -$VERBOSE = nil +# frozen_string_literal: true if ENV['JENKINS'] require 'simplecov' diff --git a/test/unit/i18n_test.rb b/test/unit/i18n_test.rb index 1f47a96..6d1b1e7 100644 --- a/test/unit/i18n_test.rb +++ b/test/unit/i18n_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require File.expand_path '../../test_helper', __FILE__ class I18nTest < ActiveSupport::TestCase diff --git a/test/unit/issue_test.rb b/test/unit/issue_test.rb index 39b6504..068c575 100644 --- a/test/unit/issue_test.rb +++ b/test/unit/issue_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require File.expand_path '../../test_helper', __FILE__ class IssueTest < ActiveSupport::TestCase @@ -21,7 +23,7 @@ class IssueTest < ActiveSupport::TestCase end def test_create - issue = Issue.new(project_id: 1, tracker_id: 1, author_id: 3, subject: 'test_create') + issue = Issue.new project_id: 1, tracker_id: 1, author_id: 3, subject: 'test_create' assert_save issue assert_equal issue.tracker.default_status, issue.status assert issue.description.nil? diff --git a/test/unit/project_test.rb b/test/unit/project_test.rb index 6dd200c..324f076 100644 --- a/test/unit/project_test.rb +++ b/test/unit/project_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require File.expand_path '../../test_helper', __FILE__ class ProjectTest < ActiveSupport::TestCase @@ -22,16 +24,16 @@ class ProjectTest < ActiveSupport::TestCase :workflows def setup - User.current = User.find(1) + User.current = User.find 1 end def test_create_project Project.delete_all - Project.create!(name: 'Project Messenger', identifier: 'project-messenger') + Project.create! name: 'Project Messenger', identifier: 'project-messenger' assert_equal 1, Project.count end def test_load_project - Project.find(1) + Project.find 1 end end