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:
3
.github/workflows/linters.yml
vendored
3
.github/workflows/linters.yml
vendored
@@ -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
|
||||
|
||||
12
.github/workflows/tests.yml
vendored
12
.github/workflows/tests.yml
vendored
@@ -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
1
.gitignore
vendored
@@ -7,3 +7,4 @@ Gemfile.lock
|
||||
docs/_build
|
||||
docs/_static
|
||||
docs/_templates
|
||||
.enable_dev
|
||||
|
||||
43
.rubocop.yml
43
.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
|
||||
|
||||
|
||||
10
CHANGELOG.md
10
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
|
||||
-----
|
||||
|
||||
|
||||
16
Gemfile
16
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
|
||||
|
||||
@@ -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
|
||||
------------
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class MessengerSetting < ActiveRecord::Base
|
||||
belongs_to :project
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
| )
|
||||
|
||||
@@ -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 }
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
Rails.application.routes.draw do
|
||||
resources :projects, only: [] do
|
||||
resource :messenger_setting, only: %i[show update]
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class CreateMessengerSettings < ActiveRecord::Migration[4.2]
|
||||
def change
|
||||
create_table :messenger_settings do |t|
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class AddDefaultMentions < ActiveRecord::Migration[4.2]
|
||||
def change
|
||||
add_column :messenger_settings, :default_mentions, :string
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
6
init.rb
6
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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module RedmineMessenger
|
||||
module Patches
|
||||
module ContactPatch
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module RedmineMessenger
|
||||
module Patches
|
||||
module DbEntryPatch
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module RedmineMessenger
|
||||
module Patches
|
||||
module PasswordPatch
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module RedmineMessenger
|
||||
module Patches
|
||||
module WikiPagePatch
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module RedmineMessenger
|
||||
VERSION = '1.0.8-master'.freeze
|
||||
VERSION = '1.0.9'
|
||||
end
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require File.expand_path '../../test_helper', __FILE__
|
||||
|
||||
class RoutingTest < Redmine::RoutingTest
|
||||
|
||||
@@ -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
|
||||
@@ -1,4 +1,4 @@
|
||||
$VERBOSE = nil
|
||||
# frozen_string_literal: true
|
||||
|
||||
if ENV['JENKINS']
|
||||
require 'simplecov'
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require File.expand_path '../../test_helper', __FILE__
|
||||
|
||||
class I18nTest < ActiveSupport::TestCase
|
||||
|
||||
@@ -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?
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user