frozen_string_literal, Coding standards fixed and ruby 2.7 warnings - redmine 4.1 and ruby 2.5 is required

This commit is contained in:
Alexander Meindl
2021-04-18 15:58:57 +02:00
parent 67a8faa284
commit dadaa32a57
37 changed files with 238 additions and 142 deletions

View File

@@ -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

View File

@@ -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:

1
.gitignore vendored
View File

@@ -7,3 +7,4 @@ Gemfile.lock
docs/_build
docs/_static
docs/_templates
.enable_dev

View File

@@ -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

View File

@@ -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
-----

16
Gemfile
View File

@@ -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

View File

@@ -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
------------

View File

@@ -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

View File

@@ -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',

View File

@@ -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!('&', '&amp;')
text.gsub!('<', '&lt;')
text.gsub!('>', '&gt;')
text.gsub! '&', '&amp;'
text.gsub! '<', '&lt;'
text.gsub! '>', '&gt;'
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

View File

@@ -1,3 +1,5 @@
# frozen_string_literal: true
class MessengerSetting < ActiveRecord::Base
belongs_to :project

View File

@@ -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

View File

@@ -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
| )

View File

@@ -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 }

View File

@@ -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

View File

@@ -1,3 +1,5 @@
# frozen_string_literal: true
Rails.application.routes.draw do
resources :projects, only: [] do
resource :messenger_setting, only: %i[show update]

View File

@@ -1,3 +1,5 @@
# frozen_string_literal: true
class CreateMessengerSettings < ActiveRecord::Migration[4.2]
def change
create_table :messenger_settings do |t|

View File

@@ -1,3 +1,5 @@
# frozen_string_literal: true
class AddDefaultMentions < ActiveRecord::Migration[4.2]
def change
add_column :messenger_settings, :default_mentions, :string

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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',

View File

@@ -1,3 +1,5 @@
# frozen_string_literal: true
module RedmineMessenger
module Patches
module ContactPatch

View File

@@ -1,3 +1,5 @@
# frozen_string_literal: true
module RedmineMessenger
module Patches
module DbEntryPatch

View File

@@ -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),

View File

@@ -1,3 +1,5 @@
# frozen_string_literal: true
module RedmineMessenger
module Patches
module PasswordPatch

View File

@@ -1,3 +1,5 @@
# frozen_string_literal: true
module RedmineMessenger
module Patches
module WikiPagePatch

View File

@@ -1,3 +1,5 @@
# frozen_string_literal: true
module RedmineMessenger
VERSION = '1.0.8-master'.freeze
VERSION = '1.0.9'
end

View File

@@ -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'

View File

@@ -1,3 +1,5 @@
# frozen_string_literal: true
require File.expand_path '../../test_helper', __FILE__
class RoutingTest < Redmine::RoutingTest

View File

@@ -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

View File

@@ -1,4 +1,4 @@
$VERBOSE = nil
# frozen_string_literal: true
if ENV['JENKINS']
require 'simplecov'

View File

@@ -1,3 +1,5 @@
# frozen_string_literal: true
require File.expand_path '../../test_helper', __FILE__
class I18nTest < ActiveSupport::TestCase

View File

@@ -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?

View File

@@ -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