redmine_avm 0.3.13 → 0.3.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/controllers/issue_status_assigns_controller.rb +1 -1
- data/app/models/issue_status_assign.rb +2 -2
- data/config/initializers/000_dependencies.rb +1 -1
- data/config/initializers/events_manager.rb +13 -13
- data/config/initializers/redmine_plugins_helper.rb +5 -5
- data/init.rb +4 -4
- data/lib/{avm → redmine_avm}/issue/assign.rb +5 -5
- data/lib/{avm → redmine_avm}/issue/dependencies_section_check.rb +9 -9
- data/lib/{avm → redmine_avm}/issue/motivation_check.rb +5 -5
- data/lib/{avm → redmine_avm}/issue/unblock.rb +8 -7
- data/lib/{avm → redmine_avm}/issue/undefine.rb +7 -6
- data/lib/{avm → redmine_avm}/listeners/issue_auto_assign.rb +4 -3
- data/lib/{avm → redmine_avm}/listeners/issue_auto_unblock/issue_delete.rb +2 -2
- data/lib/{avm → redmine_avm}/listeners/issue_auto_unblock/issue_relation_delete.rb +1 -1
- data/lib/{avm → redmine_avm}/listeners/issue_auto_unblock/issue_update.rb +4 -3
- data/lib/{avm → redmine_avm}/listeners/issue_auto_unblock.rb +4 -4
- data/lib/{avm → redmine_avm}/listeners/issue_auto_undefine/issue_create.rb +2 -2
- data/lib/{avm → redmine_avm}/listeners/issue_auto_undefine/issue_relation_create.rb +2 -2
- data/lib/{avm → redmine_avm}/listeners/issue_auto_undefine/issue_update.rb +5 -4
- data/lib/{avm → redmine_avm}/listeners/issue_auto_undefine.rb +4 -4
- data/lib/{avm → redmine_avm}/listeners/issue_dependencies_section_check.rb +6 -5
- data/lib/{avm → redmine_avm}/listeners/issue_motivation_check.rb +6 -5
- data/lib/redmine_avm/patches/issue_patch.rb +7 -7
- data/lib/redmine_avm/patches/test_case_patch.rb +2 -2
- data/lib/{avm → redmine_avm}/settings.rb +5 -5
- data/lib/redmine_avm/test_config.rb +1 -1
- data/lib/redmine_avm/version.rb +1 -1
- data/lib/tasks/issue.rake +15 -15
- metadata +20 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 81fee7e60ac7887595ac2e6d8932828281c730dcbaae449f4e92f3f1f827b8bb
|
4
|
+
data.tar.gz: 6859ce71abe61b1862925452b58240e76b387c98e152276499d9becbee98fc5a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d9a8f9431d6df677ef68b3977eed55e1a2bcfbb4c2a3f141dee097fe85255bd8047e27c6f10e47cb8c24b3f30101abe267f0eb7e0c909c17348ffb5fbd56302d
|
7
|
+
data.tar.gz: 72c3cf671a6c9ec69bdf6dab1ac7f609e3367a334bc9b57d7560df723730ba05f40b1cdb7be46317e7aed9a2bb1fbe4320612d4213c6738454180d1eee15e572
|
@@ -4,6 +4,6 @@ class IssueStatusAssign < ActiveRecord::Base
|
|
4
4
|
belongs_to :issue_status, dependent: :destroy
|
5
5
|
belongs_to :issue_field, class_name: 'CustomField', dependent: :destroy
|
6
6
|
|
7
|
-
validates :issue_status, presence: true, uniqueness: true
|
8
|
-
validates :issue_field, presence: true
|
7
|
+
validates :issue_status, presence: true, uniqueness: true # rubocop:disable Rails/RedundantPresenceValidationOnBelongsTo, Rails/UniqueValidationWithoutIndex
|
8
|
+
validates :issue_field, presence: true # rubocop:disable Rails/RedundantPresenceValidationOnBelongsTo
|
9
9
|
end
|
@@ -2,5 +2,5 @@
|
|
2
2
|
|
3
3
|
Redmine::Plugin.post_register :redmine_avm do
|
4
4
|
# Source: https://github.com/esquilo-azul/redmine_events_manager
|
5
|
-
requires_redmine_plugin(:redmine_events_manager, version_or_higher: '0.
|
5
|
+
requires_redmine_plugin(:redmine_events_manager, version_or_higher: '0.5')
|
6
6
|
end
|
@@ -1,17 +1,17 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
3
|
+
RedmineEventsManager.add_listener(Issue, :create, 'RedmineAvm::Listeners::IssueAutoUndefine')
|
4
|
+
RedmineEventsManager.add_listener(Issue, :update, 'RedmineAvm::Listeners::IssueAutoUndefine')
|
5
|
+
RedmineEventsManager.add_listener(IssueRelation, :create, 'RedmineAvm::Listeners::IssueAutoUndefine')
|
6
|
+
RedmineEventsManager.add_listener(IssueRelation, :delete, 'RedmineAvm::Listeners::IssueAutoUnblock')
|
7
|
+
RedmineEventsManager.add_listener(Issue, :delete, 'RedmineAvm::Listeners::IssueAutoUnblock')
|
8
|
+
RedmineEventsManager.add_listener(Issue, :update, 'RedmineAvm::Listeners::IssueAutoUnblock')
|
9
|
+
RedmineEventsManager.add_listener(Issue, :create, 'RedmineAvm::Listeners::IssueAutoAssign')
|
10
|
+
RedmineEventsManager.add_listener(Issue, :update, 'RedmineAvm::Listeners::IssueAutoAssign')
|
11
|
+
RedmineEventsManager.add_listener(Issue, :update,
|
12
|
+
'RedmineAvm::Listeners::IssueDependenciesSectionCheck')
|
13
|
+
RedmineEventsManager.add_listener(IssueRelation, :create,
|
14
|
+
'RedmineAvm::Listeners::IssueDependenciesSectionCheck')
|
15
15
|
[[Issue, :create], [Issue, :update], [IssueRelation, :create]].each do |v|
|
16
|
-
|
16
|
+
RedmineEventsManager.add_listener(v.first, v.last, 'RedmineAvm::Listeners::IssueMotivationCheck')
|
17
17
|
end
|
@@ -3,17 +3,17 @@
|
|
3
3
|
default_value = {
|
4
4
|
dependencies_section_title: 'Dependencies',
|
5
5
|
no_dependencies_section_message: "Dependencies section not found.\n" \
|
6
|
-
|
6
|
+
"Customize this message in plugin AVM's configuration.",
|
7
7
|
dependencies_section_missing_dependencies_message:
|
8
|
-
"Missing dependencies found dependencies section: %{ids}.\n" + # rubocop:disable Style/FormatStringToken
|
8
|
+
"Missing dependencies found dependencies section: %{ids}.\n" + # rubocop:disable Style/FormatStringToken, Style/StringConcatenation
|
9
9
|
"Customize this message in plugin AVM's configuration.",
|
10
10
|
motivation_section_title: 'Motivation',
|
11
11
|
unmotivated_message: 'This issue is not motivated.'
|
12
12
|
}
|
13
13
|
|
14
|
-
if
|
15
|
-
default_admin =
|
14
|
+
if RedminePluginsHelper::Available.model?(User)
|
15
|
+
default_admin = User.where(id: 1, admin: true).first
|
16
16
|
default_value[:admin_user_id] = default_admin.id if default_admin
|
17
17
|
end
|
18
18
|
|
19
|
-
|
19
|
+
RedminePluginsHelper::Settings.default(:redmine_avm, default_value)
|
data/init.rb
CHANGED
@@ -4,10 +4,10 @@ require 'redmine'
|
|
4
4
|
|
5
5
|
Redmine::Plugin.register :redmine_avm do
|
6
6
|
name 'Redmine\'s AVM plugin'
|
7
|
-
author
|
8
|
-
description
|
9
|
-
version
|
10
|
-
url
|
7
|
+
author RedmineNonprojectModules::AUTHOR
|
8
|
+
description RedmineAvm::SUMMARY
|
9
|
+
version RedmineNonprojectModules::VERSION
|
10
|
+
url RedmineNonprojectModules::HOMEPAGE
|
11
11
|
|
12
12
|
settings(partial: 'settings/avm')
|
13
13
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module
|
3
|
+
module RedmineAvm
|
4
4
|
module Issue
|
5
5
|
class Assign
|
6
6
|
attr_reader :issue
|
@@ -34,12 +34,12 @@ module Avm
|
|
34
34
|
|
35
35
|
def assign
|
36
36
|
user = issue_status_user
|
37
|
-
Rails.logger.debug
|
37
|
+
Rails.logger.debug { "Assigning #{user} to #{issue}" }
|
38
38
|
user_label = user ? user.to_s : 'NENHUM'
|
39
39
|
@issue.init_journal(
|
40
|
-
|
41
|
-
I18n.
|
42
|
-
|
40
|
+
RedmineAvm::Settings.admin_user,
|
41
|
+
I18n.t(:issue_assign_message, user: user_label, issue_status: issue.status,
|
42
|
+
issue_field: issue_status_assign.issue_field.name)
|
43
43
|
)
|
44
44
|
@issue.assigned_to = user
|
45
45
|
@issue.save!
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module
|
3
|
+
module RedmineAvm
|
4
4
|
module Issue
|
5
5
|
class DependenciesSectionCheck
|
6
6
|
def initialize(issue)
|
@@ -12,13 +12,13 @@ module Avm
|
|
12
12
|
return if @issue.dependencies.empty?
|
13
13
|
|
14
14
|
unless @issue.dependencies_section
|
15
|
-
Rails.logger.info("
|
15
|
+
Rails.logger.info("##{@issue.id}: no section found")
|
16
16
|
undefine_no_dependencies_secion
|
17
17
|
return
|
18
18
|
end
|
19
19
|
return if all_dependencies_in_dependencies_section?
|
20
20
|
|
21
|
-
Rails.logger.info("
|
21
|
+
Rails.logger.info("##{@issue.id}: missing dependencies in dependency section")
|
22
22
|
undefine_no_all_dependencies
|
23
23
|
end
|
24
24
|
|
@@ -31,20 +31,20 @@ module Avm
|
|
31
31
|
|
32
32
|
def undefine_no_dependencies_secion
|
33
33
|
@issue.init_journal(
|
34
|
-
|
35
|
-
|
34
|
+
RedmineAvm::Settings.admin_user,
|
35
|
+
RedmineAvm::Settings.no_dependencies_section_message
|
36
36
|
)
|
37
|
-
@issue.status =
|
37
|
+
@issue.status = RedmineAvm::Settings.issue_status_undefined
|
38
38
|
@issue.save!
|
39
39
|
end
|
40
40
|
|
41
41
|
def undefine_no_all_dependencies
|
42
42
|
@issue.init_journal(
|
43
|
-
|
44
|
-
format(
|
43
|
+
RedmineAvm::Settings.admin_user,
|
44
|
+
format(RedmineAvm::Settings.dependencies_section_missing_dependencies_message,
|
45
45
|
ids: no_dependencies_section_ids_string)
|
46
46
|
)
|
47
|
-
@issue.status =
|
47
|
+
@issue.status = RedmineAvm::Settings.issue_status_undefined
|
48
48
|
@issue.save!
|
49
49
|
end
|
50
50
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module
|
3
|
+
module RedmineAvm
|
4
4
|
module Issue
|
5
5
|
class MotivationCheck
|
6
6
|
def initialize(issue)
|
@@ -10,7 +10,7 @@ module Avm
|
|
10
10
|
def run
|
11
11
|
return if motivated?
|
12
12
|
|
13
|
-
Rails.logger.info("
|
13
|
+
Rails.logger.info("##{@issue.id}: unmotivated")
|
14
14
|
undefine
|
15
15
|
end
|
16
16
|
|
@@ -22,10 +22,10 @@ module Avm
|
|
22
22
|
|
23
23
|
def undefine
|
24
24
|
@issue.init_journal(
|
25
|
-
|
26
|
-
|
25
|
+
RedmineAvm::Settings.admin_user,
|
26
|
+
RedmineAvm::Settings.unmotivated_message
|
27
27
|
)
|
28
|
-
@issue.status =
|
28
|
+
@issue.status = RedmineAvm::Settings.issue_status_undefined
|
29
29
|
@issue.save!
|
30
30
|
end
|
31
31
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module
|
3
|
+
module RedmineAvm
|
4
4
|
module Issue
|
5
5
|
class Unblock
|
6
6
|
def initialize(issue)
|
@@ -12,7 +12,7 @@ module Avm
|
|
12
12
|
if msg
|
13
13
|
Rails.logger.debug(msg)
|
14
14
|
else
|
15
|
-
Rails.logger.debug
|
15
|
+
Rails.logger.debug { "##{@issue.id} has no open dependencies. Unblocking..." }
|
16
16
|
unblock
|
17
17
|
end
|
18
18
|
end
|
@@ -21,11 +21,12 @@ module Avm
|
|
21
21
|
|
22
22
|
def unblock? # rubocop:disable Naming/PredicateMethod
|
23
23
|
return "##{@issue.id} is not blocked" unless status_blocked?
|
24
|
-
|
24
|
+
|
25
|
+
"##{@issue.id} has open dependencies" if open_dependencies?
|
25
26
|
end
|
26
27
|
|
27
28
|
def status_blocked?
|
28
|
-
@issue.status ==
|
29
|
+
@issue.status == RedmineAvm::Settings.issue_status_blocked
|
29
30
|
end
|
30
31
|
|
31
32
|
def open_dependencies?
|
@@ -34,10 +35,10 @@ module Avm
|
|
34
35
|
|
35
36
|
def unblock
|
36
37
|
@issue.init_journal(
|
37
|
-
|
38
|
-
I18n.
|
38
|
+
RedmineAvm::Settings.admin_user,
|
39
|
+
I18n.t(:issue_unblock_message)
|
39
40
|
)
|
40
|
-
@issue.status =
|
41
|
+
@issue.status = RedmineAvm::Settings.issue_status_unblocked
|
41
42
|
@issue.save!
|
42
43
|
end
|
43
44
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module
|
3
|
+
module RedmineAvm
|
4
4
|
module Issue
|
5
5
|
class Undefine
|
6
6
|
def initialize(issue)
|
@@ -12,7 +12,7 @@ module Avm
|
|
12
12
|
if msg
|
13
13
|
Rails.logger.debug(msg)
|
14
14
|
else
|
15
|
-
Rails.logger.debug
|
15
|
+
Rails.logger.debug { "##{@issue.id} has undefined dependencies. Undefining..." }
|
16
16
|
undefine
|
17
17
|
end
|
18
18
|
end
|
@@ -22,20 +22,21 @@ module Avm
|
|
22
22
|
def undefine? # rubocop:disable Naming/PredicateMethod
|
23
23
|
return "##{@issue.id} already undefined" if @issue.undefined?
|
24
24
|
return "##{@issue.id} already closed" if @issue.closed?
|
25
|
-
|
25
|
+
|
26
|
+
"##{@issue.id} has no undefined dependencies" unless @issue.dependencies.any?(
|
26
27
|
&:undefined?
|
27
28
|
)
|
28
29
|
end
|
29
30
|
|
30
31
|
def undefine
|
31
32
|
@issue.init_journal(
|
32
|
-
|
33
|
-
I18n.
|
33
|
+
RedmineAvm::Settings.admin_user,
|
34
|
+
I18n.t(
|
34
35
|
:issue_undefine_message,
|
35
36
|
undefined_dependencies_ids: undefined_dependency_ids_string
|
36
37
|
)
|
37
38
|
)
|
38
|
-
@issue.status =
|
39
|
+
@issue.status = RedmineAvm::Settings.issue_status_undefined
|
39
40
|
@issue.save!
|
40
41
|
end
|
41
42
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module
|
3
|
+
module RedmineAvm
|
4
4
|
module Listeners
|
5
5
|
class IssueAutoAssign
|
6
6
|
attr_reader :event
|
@@ -11,14 +11,15 @@ module Avm
|
|
11
11
|
|
12
12
|
def run
|
13
13
|
issue = issue_to_check
|
14
|
-
|
14
|
+
RedmineAvm::Issue::Assign.new(issue).run if issue
|
15
15
|
end
|
16
16
|
|
17
17
|
private
|
18
18
|
|
19
19
|
def issue_to_check
|
20
20
|
return event.data if event.issue_create?
|
21
|
-
|
21
|
+
|
22
|
+
event.data.issue if event.issue_update?
|
22
23
|
end
|
23
24
|
end
|
24
25
|
end
|
@@ -1,13 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module
|
3
|
+
module RedmineAvm
|
4
4
|
module Listeners
|
5
5
|
class IssueAutoUnblock
|
6
6
|
module IssueDelete
|
7
7
|
def issue_deleted
|
8
8
|
return unless event.entity == ::Issue && event.action == :delete
|
9
9
|
|
10
|
-
::Issue.where(status:
|
10
|
+
::Issue.where(status: RedmineAvm::Settings.issue_status_blocked)
|
11
11
|
end
|
12
12
|
|
13
13
|
private
|
@@ -1,13 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module
|
3
|
+
module RedmineAvm
|
4
4
|
module Listeners
|
5
5
|
class IssueAutoUnblock
|
6
6
|
module IssueUpdate
|
7
7
|
def issue_updated
|
8
8
|
return unless issue_update_event?
|
9
9
|
return [issue] if status_changed_to_blocked?
|
10
|
-
|
10
|
+
|
11
|
+
issue.r_dependencies if status_changed_to_closed?
|
11
12
|
end
|
12
13
|
|
13
14
|
private
|
@@ -25,7 +26,7 @@ module Avm
|
|
25
26
|
end
|
26
27
|
|
27
28
|
def status_changed_to_blocked?
|
28
|
-
new_integer_value('status_id') ==
|
29
|
+
new_integer_value('status_id') == RedmineAvm::Settings.issue_status_blocked.id
|
29
30
|
end
|
30
31
|
|
31
32
|
def new_integer_value(attr)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module
|
3
|
+
module RedmineAvm
|
4
4
|
module Listeners
|
5
5
|
class IssueAutoUnblock
|
6
6
|
include IssueDelete
|
@@ -16,7 +16,7 @@ module Avm
|
|
16
16
|
def run
|
17
17
|
return if check_conditions
|
18
18
|
|
19
|
-
Rails.logger.debug
|
19
|
+
Rails.logger.debug { "Unblock condition not found for #{@event}" }
|
20
20
|
end
|
21
21
|
|
22
22
|
def check_conditions
|
@@ -25,8 +25,8 @@ module Avm
|
|
25
25
|
next unless issues
|
26
26
|
|
27
27
|
issues.each do |issue|
|
28
|
-
Rails.logger.debug
|
29
|
-
|
28
|
+
Rails.logger.debug { "#{m}: #{issue}" }
|
29
|
+
RedmineAvm::Issue::Unblock.new(issue).run
|
30
30
|
end
|
31
31
|
true
|
32
32
|
end
|
@@ -1,12 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module
|
3
|
+
module RedmineAvm
|
4
4
|
module Listeners
|
5
5
|
class IssueAutoUndefine
|
6
6
|
module IssueCreate
|
7
7
|
def issue_created_undefined
|
8
8
|
return unless event.entity == Issue && event.action == :create
|
9
|
-
return unless issue.status ==
|
9
|
+
return unless issue.status == RedmineAvm::Settings.issue_status_undefined
|
10
10
|
return unless issue.parent
|
11
11
|
|
12
12
|
[issue.parent]
|
@@ -1,13 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module
|
3
|
+
module RedmineAvm
|
4
4
|
module Listeners
|
5
5
|
class IssueAutoUndefine
|
6
6
|
module IssueRelationCreate
|
7
7
|
def issue_relation_created_undefined
|
8
8
|
return unless @event.entity == IssueRelation && @event.action == :create
|
9
9
|
return unless relation.relation_type == IssueRelation::TYPE_BLOCKS
|
10
|
-
return unless relation.issue_from.status ==
|
10
|
+
return unless relation.issue_from.status == RedmineAvm::Settings.issue_status_undefined
|
11
11
|
|
12
12
|
[relation.issue_to]
|
13
13
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module
|
3
|
+
module RedmineAvm
|
4
4
|
module Listeners
|
5
5
|
class IssueAutoUndefine
|
6
6
|
module IssueUpdate
|
@@ -8,7 +8,8 @@ module Avm
|
|
8
8
|
return unless issue_update_event?
|
9
9
|
return journal.issue.r_dependencies if status_changed_to_undefined?
|
10
10
|
return [journal.issue] if status_changed_from_undefined?
|
11
|
-
|
11
|
+
|
12
|
+
[journal.issue.parent] if parent_changed_and_undefined?
|
12
13
|
end
|
13
14
|
|
14
15
|
private
|
@@ -22,11 +23,11 @@ module Avm
|
|
22
23
|
end
|
23
24
|
|
24
25
|
def status_changed_to_undefined?
|
25
|
-
new_integer_value('status_id') ==
|
26
|
+
new_integer_value('status_id') == RedmineAvm::Settings.issue_status_undefined.id
|
26
27
|
end
|
27
28
|
|
28
29
|
def status_changed_from_undefined?
|
29
|
-
old_integer_value('status_id') ==
|
30
|
+
old_integer_value('status_id') == RedmineAvm::Settings.issue_status_undefined.id
|
30
31
|
end
|
31
32
|
|
32
33
|
def parent_changed_and_undefined?
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module
|
3
|
+
module RedmineAvm
|
4
4
|
module Listeners
|
5
5
|
class IssueAutoUndefine
|
6
6
|
include IssueCreate
|
@@ -16,7 +16,7 @@ module Avm
|
|
16
16
|
def run
|
17
17
|
return if check_conditions
|
18
18
|
|
19
|
-
Rails.logger.debug
|
19
|
+
Rails.logger.debug { "Undefine condition not found for #{@event}" }
|
20
20
|
end
|
21
21
|
|
22
22
|
def check_conditions
|
@@ -26,8 +26,8 @@ module Avm
|
|
26
26
|
next unless issues
|
27
27
|
|
28
28
|
issues.each do |issue|
|
29
|
-
Rails.logger.debug
|
30
|
-
|
29
|
+
Rails.logger.debug { "#{m}: #{issue}" }
|
30
|
+
RedmineAvm::Issue::Undefine.new(issue).run
|
31
31
|
end
|
32
32
|
true
|
33
33
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module
|
3
|
+
module RedmineAvm
|
4
4
|
module Listeners
|
5
5
|
class IssueDependenciesSectionCheck
|
6
6
|
attr_reader :event
|
@@ -12,17 +12,18 @@ module Avm
|
|
12
12
|
def run
|
13
13
|
issue = issue_to_check
|
14
14
|
return unless issue
|
15
|
-
return if issue.status ==
|
15
|
+
return if issue.status == RedmineAvm::Settings.issue_status_undefined
|
16
16
|
|
17
|
-
|
17
|
+
RedmineAvm::Issue::DependenciesSectionCheck.new(issue).run if issue
|
18
18
|
end
|
19
19
|
|
20
20
|
private
|
21
21
|
|
22
22
|
def issue_to_check
|
23
23
|
return event.data.issue if event.issue_update?
|
24
|
-
|
25
|
-
|
24
|
+
|
25
|
+
event.data.issue_to if event.issue_relation_create? &&
|
26
|
+
event.data.relation_type == IssueRelation::TYPE_BLOCKS
|
26
27
|
end
|
27
28
|
end
|
28
29
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module
|
3
|
+
module RedmineAvm
|
4
4
|
module Listeners
|
5
5
|
class IssueMotivationCheck
|
6
6
|
attr_reader :event
|
@@ -12,17 +12,18 @@ module Avm
|
|
12
12
|
def run
|
13
13
|
issue = issue_to_check
|
14
14
|
return unless issue
|
15
|
-
return if issue.status ==
|
15
|
+
return if issue.status == RedmineAvm::Settings.issue_status_undefined
|
16
16
|
|
17
|
-
|
17
|
+
RedmineAvm::Issue::MotivationCheck.new(issue).run if issue
|
18
18
|
end
|
19
19
|
|
20
20
|
private
|
21
21
|
|
22
22
|
def issue_to_check
|
23
23
|
return event.data.issue if event.issue_update?
|
24
|
-
|
25
|
-
|
24
|
+
|
25
|
+
event.data.issue_to if event.issue_relation_create? &&
|
26
|
+
event.data.relation_type == IssueRelation::TYPE_BLOCKS
|
26
27
|
end
|
27
28
|
end
|
28
29
|
end
|
@@ -10,14 +10,14 @@ module RedmineAvm
|
|
10
10
|
|
11
11
|
module InstanceMethods
|
12
12
|
def undefined?
|
13
|
-
status == ::
|
13
|
+
status == ::RedmineAvm::Settings.issue_status_undefined
|
14
14
|
end
|
15
15
|
|
16
16
|
def description_section(section_title)
|
17
17
|
['h\1\.', '----', '$'].each do |e|
|
18
18
|
m = /h([0-9])\.\s*#{Regexp.escape(section_title)}(.+)#{e}/m
|
19
|
-
|
20
|
-
return m[2].strip + "\r\n" if m
|
19
|
+
.match(description)
|
20
|
+
return m[2].strip + "\r\n" if m # rubocop:disable Style/StringConcatenation
|
21
21
|
end
|
22
22
|
nil
|
23
23
|
end
|
@@ -37,7 +37,7 @@ module RedmineAvm
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def dependencies_section
|
40
|
-
description_section(::
|
40
|
+
description_section(::RedmineAvm::Settings.dependencies_section_title)
|
41
41
|
end
|
42
42
|
|
43
43
|
def dependencies_section_dependencies
|
@@ -62,13 +62,13 @@ module RedmineAvm
|
|
62
62
|
end
|
63
63
|
|
64
64
|
def motivation_section
|
65
|
-
description_section(::
|
65
|
+
description_section(::RedmineAvm::Settings.motivation_section_title)
|
66
66
|
end
|
67
67
|
end
|
68
68
|
end
|
69
69
|
end
|
70
70
|
end
|
71
71
|
|
72
|
-
unless
|
73
|
-
|
72
|
+
unless Issue.included_modules.include? RedmineAvm::Patches::IssuePatch
|
73
|
+
Issue.include RedmineAvm::Patches::IssuePatch
|
74
74
|
end
|
@@ -11,6 +11,6 @@ module RedmineAvm
|
|
11
11
|
end
|
12
12
|
|
13
13
|
if Rails.env.test? &&
|
14
|
-
!(
|
15
|
-
|
14
|
+
!(ActiveSupport::TestCase.included_modules.include? RedmineAvm::Patches::TestCasePatch)
|
15
|
+
ActiveSupport::TestCase.include RedmineAvm::Patches::TestCasePatch # rubocop:disable Rails/ActiveSupportOnLoad
|
16
16
|
end
|
@@ -1,21 +1,21 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module
|
3
|
+
module RedmineAvm
|
4
4
|
class Settings
|
5
5
|
class << self
|
6
|
-
def issue_status_undefined(raise_if_empty = true)
|
6
|
+
def issue_status_undefined(raise_if_empty = true) # rubocop:disable Style/OptionalBooleanParameter
|
7
7
|
issue_status('issue_status_undefined_id', 'indefida', raise_if_empty)
|
8
8
|
end
|
9
9
|
|
10
|
-
def issue_status_blocked(raise_if_empty = true)
|
10
|
+
def issue_status_blocked(raise_if_empty = true) # rubocop:disable Style/OptionalBooleanParameter
|
11
11
|
issue_status('issue_status_blocked_id', 'bloqueada', raise_if_empty)
|
12
12
|
end
|
13
13
|
|
14
|
-
def issue_status_unblocked(raise_if_empty = true)
|
14
|
+
def issue_status_unblocked(raise_if_empty = true) # rubocop:disable Style/OptionalBooleanParameter
|
15
15
|
issue_status('issue_status_unblocked_id', 'desbloqueada', raise_if_empty)
|
16
16
|
end
|
17
17
|
|
18
|
-
def admin_user(raise_if_empty = true)
|
18
|
+
def admin_user(raise_if_empty = true) # rubocop:disable Style/OptionalBooleanParameter
|
19
19
|
if Setting.plugin_redmine_avm['admin_user_id'].present?
|
20
20
|
User.find(Setting.plugin_redmine_avm['admin_user_id'])
|
21
21
|
elsif raise_if_empty
|
@@ -9,7 +9,7 @@ module RedmineAvm
|
|
9
9
|
s['issue_status_unblocked_id'] = 2
|
10
10
|
s['admin_user_id'] = 1
|
11
11
|
::Setting.plugin_redmine_avm = s
|
12
|
-
::ListenerOption.listener_enable('
|
12
|
+
::ListenerOption.listener_enable('RedmineAvm::Listeners::IssueMotivationCheck', false)
|
13
13
|
end
|
14
14
|
end
|
15
15
|
end
|
data/lib/redmine_avm/version.rb
CHANGED
data/lib/tasks/issue.rake
CHANGED
@@ -1,53 +1,53 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
namespace :avm do
|
4
|
-
namespace :issue do
|
3
|
+
namespace :avm do # rubocop:disable Metrics/BlockLength
|
4
|
+
namespace :issue do # rubocop:disable Metrics/BlockLength
|
5
5
|
desc 'Verifica auto-indefinição de uma tarefa'
|
6
6
|
task :undefine, [:issue_id] => :environment do |_t, args|
|
7
|
-
|
7
|
+
RedmineAvm::Issue::Undefine.new(Issue.find(args.issue_id)).run
|
8
8
|
end
|
9
9
|
|
10
10
|
desc 'Verifica auto-indefinição de todas as tarefas indefinidas'
|
11
11
|
task undefine_all: :environment do |_t, _args|
|
12
|
-
Issue.where.not(status:
|
13
|
-
|
12
|
+
Issue.where.not(status: RedmineAvm::Settings.issue_status_undefined).each do |i| # rubocop:disable Rails/FindEach
|
13
|
+
RedmineAvm::Issue::Undefine.new(i).run
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
17
|
desc 'Verifica auto-desbloqueio de uma tarefa'
|
18
18
|
task unblock: :environment do |_t, _args|
|
19
|
-
Issue.where(status:
|
20
|
-
|
19
|
+
Issue.where(status: RedmineAvm::Settings.issue_status_blocked).each do |i| # rubocop:disable Rails/FindEach
|
20
|
+
RedmineAvm::Issue::Unblock.new(i).run
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
24
|
desc 'Verifica auto-desbloqueio de todas as tarefas'
|
25
25
|
task unblock_all: :environment do |_t, _args|
|
26
|
-
Issue.where(status:
|
27
|
-
|
26
|
+
Issue.where(status: RedmineAvm::Settings.issue_status_blocked).each do |i| # rubocop:disable Rails/FindEach
|
27
|
+
RedmineAvm::Issue::Unblock.new(i).run
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
31
|
desc 'Verifica auto-atribuição de todas as tarefas'
|
32
32
|
task assign_all: :environment do |_t, _args|
|
33
|
-
Issue.all.each do |i|
|
34
|
-
|
33
|
+
Issue.all.each do |i| # rubocop:disable Rails/FindEach
|
34
|
+
RedmineAvm::Issue::Assign.new(i).run
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
38
|
desc 'Verifica a seção de dependências de todas as tarefas'
|
39
39
|
task dependencies_section_check_all: :environment do |_t, _args|
|
40
40
|
Issue.where(closed_on: nil)
|
41
|
-
|
42
|
-
|
41
|
+
.where.not(status: RedmineAvm::Settings.issue_status_undefined).each do |i| # rubocop:disable Rails/FindEach
|
42
|
+
RedmineAvm::Issue::DependenciesSectionCheck.new(i).run
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
46
|
desc 'Verifica a ausência de motivação em todas as tarefas'
|
47
47
|
task motivation_check_all: :environment do |_t, _args|
|
48
48
|
Issue.where(closed_on: nil)
|
49
|
-
|
50
|
-
|
49
|
+
.where.not(status: RedmineAvm::Settings.issue_status_undefined).each do |i| # rubocop:disable Rails/FindEach
|
50
|
+
RedmineAvm::Issue::MotivationCheck.new(i).run
|
51
51
|
end
|
52
52
|
end
|
53
53
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redmine_avm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.16
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eduardo Henrique Bogoni
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-09-
|
11
|
+
date: 2025-09-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: eac_rails_gem_support
|
@@ -44,26 +44,26 @@ files:
|
|
44
44
|
- db/migrate/20160516164053_create_issue_status_assigns.rb
|
45
45
|
- db/migrate/20180711164719_rename_plugin_avm_to_redmine_avm.rb
|
46
46
|
- init.rb
|
47
|
-
- lib/avm/issue/assign.rb
|
48
|
-
- lib/avm/issue/dependencies_section_check.rb
|
49
|
-
- lib/avm/issue/motivation_check.rb
|
50
|
-
- lib/avm/issue/unblock.rb
|
51
|
-
- lib/avm/issue/undefine.rb
|
52
|
-
- lib/avm/listeners/issue_auto_assign.rb
|
53
|
-
- lib/avm/listeners/issue_auto_unblock.rb
|
54
|
-
- lib/avm/listeners/issue_auto_unblock/issue_delete.rb
|
55
|
-
- lib/avm/listeners/issue_auto_unblock/issue_relation_delete.rb
|
56
|
-
- lib/avm/listeners/issue_auto_unblock/issue_update.rb
|
57
|
-
- lib/avm/listeners/issue_auto_undefine.rb
|
58
|
-
- lib/avm/listeners/issue_auto_undefine/issue_create.rb
|
59
|
-
- lib/avm/listeners/issue_auto_undefine/issue_relation_create.rb
|
60
|
-
- lib/avm/listeners/issue_auto_undefine/issue_update.rb
|
61
|
-
- lib/avm/listeners/issue_dependencies_section_check.rb
|
62
|
-
- lib/avm/listeners/issue_motivation_check.rb
|
63
|
-
- lib/avm/settings.rb
|
64
47
|
- lib/redmine_avm.rb
|
48
|
+
- lib/redmine_avm/issue/assign.rb
|
49
|
+
- lib/redmine_avm/issue/dependencies_section_check.rb
|
50
|
+
- lib/redmine_avm/issue/motivation_check.rb
|
51
|
+
- lib/redmine_avm/issue/unblock.rb
|
52
|
+
- lib/redmine_avm/issue/undefine.rb
|
53
|
+
- lib/redmine_avm/listeners/issue_auto_assign.rb
|
54
|
+
- lib/redmine_avm/listeners/issue_auto_unblock.rb
|
55
|
+
- lib/redmine_avm/listeners/issue_auto_unblock/issue_delete.rb
|
56
|
+
- lib/redmine_avm/listeners/issue_auto_unblock/issue_relation_delete.rb
|
57
|
+
- lib/redmine_avm/listeners/issue_auto_unblock/issue_update.rb
|
58
|
+
- lib/redmine_avm/listeners/issue_auto_undefine.rb
|
59
|
+
- lib/redmine_avm/listeners/issue_auto_undefine/issue_create.rb
|
60
|
+
- lib/redmine_avm/listeners/issue_auto_undefine/issue_relation_create.rb
|
61
|
+
- lib/redmine_avm/listeners/issue_auto_undefine/issue_update.rb
|
62
|
+
- lib/redmine_avm/listeners/issue_dependencies_section_check.rb
|
63
|
+
- lib/redmine_avm/listeners/issue_motivation_check.rb
|
65
64
|
- lib/redmine_avm/patches/issue_patch.rb
|
66
65
|
- lib/redmine_avm/patches/test_case_patch.rb
|
66
|
+
- lib/redmine_avm/settings.rb
|
67
67
|
- lib/redmine_avm/test_config.rb
|
68
68
|
- lib/redmine_avm/version.rb
|
69
69
|
- lib/tasks/issue.rake
|
@@ -79,7 +79,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
79
79
|
requirements:
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
82
|
+
version: '2.7'
|
83
83
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
84
84
|
requirements:
|
85
85
|
- - ">="
|