redmine_remotes 0.14.0 → 0.15.2
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/project_remote_issues_controller/create.rb +1 -1
- data/app/controllers/project_remote_issues_controller/update.rb +1 -1
- data/app/models/remote_issue_fetch/base/_local_issue.rb +77 -0
- data/app/models/remote_issue_fetch/base/_provider_issue.rb +18 -0
- data/app/models/remote_issue_fetch/base/_remote_issue.rb +19 -0
- data/app/models/remote_issue_fetch/base.rb +45 -0
- data/app/models/remote_issue_fetch/create/_local_issue.rb +21 -0
- data/app/models/remote_issue_fetch/create/_remote_issue.rb +21 -0
- data/app/models/remote_issue_fetch/create.rb +44 -0
- data/app/models/remote_issue_fetch/update/_local_issue.rb +15 -0
- data/app/models/remote_issue_fetch/update/_remote_issue.rb +15 -0
- data/app/models/remote_issue_fetch/update.rb +18 -0
- data/app/models/remote_tracker/find_issue_local_status.rb +1 -1
- data/app/models/remote_tracker.rb +1 -1
- data/app/models/remote_tracker_fetch/provider.rb +13 -0
- data/app/models/remote_tracker_fetch/remote_issues.rb +27 -0
- data/app/models/remote_tracker_fetch/remote_tracker.rb +16 -0
- data/app/models/remote_tracker_fetch.rb +47 -0
- data/app/models/remote_user/find_local_user.rb +3 -3
- data/config/initializers/000_dependencies.rb +1 -1
- data/config/routes.rb +6 -5
- data/db/migrate/20190531171641_create_remote_trackers.rb +1 -1
- data/db/migrate/20190910182842_create_remote_users.rb +1 -1
- data/db/migrate/20190910203552_create_remote_issue_statuses.rb +1 -1
- data/db/migrate/20190912000000_create_remote_issues.rb +1 -1
- data/lib/redmine_remotes/esosti/entities/issue.rb +32 -1
- data/lib/redmine_remotes/jobs/fetch_issues.rb +1 -1
- data/lib/redmine_remotes/jobs/fetch_trackers.rb +1 -1
- data/lib/redmine_remotes/version.rb +1 -1
- data/lib/tasks/redmine_remotes.rake +4 -11
- metadata +59 -27
- data/app/models/redmine_remotes/tableless/remote_issue_fetch/base/_local_issue.rb +0 -73
- data/app/models/redmine_remotes/tableless/remote_issue_fetch/base/_provider_issue.rb +0 -22
- data/app/models/redmine_remotes/tableless/remote_issue_fetch/base/_remote_issue.rb +0 -23
- data/app/models/redmine_remotes/tableless/remote_issue_fetch/base.rb +0 -49
- data/app/models/redmine_remotes/tableless/remote_issue_fetch/create/_local_issue.rb +0 -25
- data/app/models/redmine_remotes/tableless/remote_issue_fetch/create/_remote_issue.rb +0 -25
- data/app/models/redmine_remotes/tableless/remote_issue_fetch/create.rb +0 -48
- data/app/models/redmine_remotes/tableless/remote_issue_fetch/update/_local_issue.rb +0 -19
- data/app/models/redmine_remotes/tableless/remote_issue_fetch/update/_remote_issue.rb +0 -19
- data/app/models/redmine_remotes/tableless/remote_issue_fetch/update.rb +0 -22
- data/app/models/redmine_remotes/tableless/remote_tracker_fetch/provider.rb +0 -17
- data/app/models/redmine_remotes/tableless/remote_tracker_fetch/remote_issues.rb +0 -31
- data/app/models/redmine_remotes/tableless/remote_tracker_fetch/remote_tracker.rb +0 -20
- data/app/models/redmine_remotes/tableless/remote_tracker_fetch.rb +0 -51
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b73c970478b213277563054f35129ddcc1242da52dfff81eee4d672f9dc04f82
|
|
4
|
+
data.tar.gz: '028153033c5e5dbed1dca11f1205a3679f9c1ccafc9ba98c1d9cd456e01db3d6'
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: cca0145c05035eb1ead69f75fefdd33b13fad6e3c5834f260e6165b35b70d0be614401a3b167d31428fcbf6b318e4a9a06d76d23d21fb14f0a6a3ec3740aaac4
|
|
7
|
+
data.tar.gz: faf153f23e23b209910f6d852ef1e9ae034833444d89059061c6e3452c3a5370156eb95a66ee49cc5d5c98e1ea94df06721890428653ac101789d2eab4fa6b46
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RemoteIssueFetch
|
|
4
|
+
class Base < ::EacRailsUtils::Models::Tableless
|
|
5
|
+
private
|
|
6
|
+
|
|
7
|
+
DESCRIPTION_SECTION_SEPARATOR = "\n\n"
|
|
8
|
+
|
|
9
|
+
def save_local_issue
|
|
10
|
+
save_local_issue_except_create_on && save_local_issue_created_on
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def save_local_issue_created_on
|
|
14
|
+
local_issue_provider_attributes[:created_on].if_present do |created_on|
|
|
15
|
+
if created_on.present? && local_issue.created_on != created_on
|
|
16
|
+
local_issue.update_column( # rubocop:disable Rails/SkipsModelValidations
|
|
17
|
+
:created_on, created_on
|
|
18
|
+
)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
true
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def save_local_issue_except_create_on
|
|
26
|
+
local_issue_provider_attributes.except(:created_on)
|
|
27
|
+
.each { |attr, value| local_issue.send("#{attr}=", value) }
|
|
28
|
+
return true if local_issue.save
|
|
29
|
+
|
|
30
|
+
fetch_record_errors(local_issue, default_column: default_error_column)
|
|
31
|
+
false
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def local_issue_provider_attributes
|
|
35
|
+
{
|
|
36
|
+
subject: local_issue_subject, author: local_issue_author, status: local_issue_status,
|
|
37
|
+
description: local_issue_description,
|
|
38
|
+
created_on: provider_issue.created_on
|
|
39
|
+
}
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def local_issue_subject
|
|
43
|
+
"[#{provider_issue.code}] #{provider_issue.subject}".truncate(100)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def local_issue_author_uncached
|
|
47
|
+
return nil if provider_issue.blank?
|
|
48
|
+
|
|
49
|
+
::RemoteUser.find_local_user(
|
|
50
|
+
provider_issue.author_login,
|
|
51
|
+
remote_tracker,
|
|
52
|
+
true
|
|
53
|
+
)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def local_issue_status
|
|
57
|
+
remote_tracker.try(:find_local_issue_status, local_tracker, provider_issue.status_name, true)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def local_issue_description
|
|
61
|
+
[local_issue_extra_description(:before), provider_issue.description,
|
|
62
|
+
local_issue_extra_description(:after), local_issue_import_footer]
|
|
63
|
+
.reject(&:blank?).map(&:strip).join("\n\n----\n\n") + "\n"
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def local_issue_extra_description(position)
|
|
67
|
+
extra = provider_issue.try("extra_description_#{position}").if_present('')
|
|
68
|
+
extra = extra.map { |k, v| "* *#{k}:* #{v}" } if extra.is_a?(::Hash)
|
|
69
|
+
extra = extra.map { |v| "#{v}\n" }.join if extra.is_a?(::Enumerable)
|
|
70
|
+
extra.to_s
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def local_issue_import_footer
|
|
74
|
+
"_Demanda remota importada de #{provider_issue.human_view_url}._"
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RemoteIssueFetch
|
|
4
|
+
class Base < ::EacRailsUtils::Models::Tableless
|
|
5
|
+
private
|
|
6
|
+
|
|
7
|
+
def provider_issue_uncached
|
|
8
|
+
return nil if [remote_tracker, issue_remote_code].any?(&:blank?)
|
|
9
|
+
|
|
10
|
+
remote_tracker.find_remote_issue(issue_remote_code)
|
|
11
|
+
rescue ::Avmtrf1::RestProvider::Response => e
|
|
12
|
+
errors.add(default_error_column,
|
|
13
|
+
"Requisição a \"#{e.url}\" retornou com status #{e.status}")
|
|
14
|
+
::Rails.logger.warn(e.body)
|
|
15
|
+
nil
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RemoteIssueFetch
|
|
4
|
+
class Base < ::EacRailsUtils::Models::Tableless
|
|
5
|
+
private
|
|
6
|
+
|
|
7
|
+
def fetched_at_uncached
|
|
8
|
+
::Time.zone.now
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def save_remote_issue
|
|
12
|
+
remote_issue.fetched_at = fetched_at
|
|
13
|
+
return true if remote_issue.save
|
|
14
|
+
|
|
15
|
+
fetch_record_errors(remote_issue, default_column: default_error_column)
|
|
16
|
+
false
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'eac_rails_utils/models/fetch_errors'
|
|
4
|
+
require 'eac_ruby_utils/core_ext'
|
|
5
|
+
|
|
6
|
+
module RemoteIssueFetch
|
|
7
|
+
class Base < ::EacRailsUtils::Models::Tableless
|
|
8
|
+
enable_simple_cache
|
|
9
|
+
require_sub __FILE__
|
|
10
|
+
include ::EacRailsUtils::Models::FetchErrors
|
|
11
|
+
|
|
12
|
+
validates :fetched_at, presence: true
|
|
13
|
+
validates :local_tracker, presence: true
|
|
14
|
+
validates :remote_tracker, presence: true
|
|
15
|
+
validates :issue_remote_code, presence: true
|
|
16
|
+
|
|
17
|
+
validate :author_present
|
|
18
|
+
validate :provider_issue_present
|
|
19
|
+
|
|
20
|
+
def author_present
|
|
21
|
+
return if provider_issue.blank?
|
|
22
|
+
return if local_issue_author.present?
|
|
23
|
+
|
|
24
|
+
errors.add(:remote_code,
|
|
25
|
+
"Usuário local não encontrado para \"#{provider_issue.author_login}\"")
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def provider_issue_present
|
|
29
|
+
return if issue_remote_code.blank?
|
|
30
|
+
return if provider_issue.present?
|
|
31
|
+
|
|
32
|
+
errors.add(:remote_code,
|
|
33
|
+
"Demanda remota não encontrada com o código \"#{issue_remote_code}\"")
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def save
|
|
37
|
+
::Issue.transaction do
|
|
38
|
+
return false unless valid?
|
|
39
|
+
return false unless save_local_issue
|
|
40
|
+
return false unless save_remote_issue
|
|
41
|
+
end
|
|
42
|
+
true
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RemoteIssueFetch
|
|
4
|
+
class Create < ::RemoteIssueFetch::Base
|
|
5
|
+
private
|
|
6
|
+
|
|
7
|
+
def local_issue_provider_attributes
|
|
8
|
+
super.merge(
|
|
9
|
+
project: project, tracker: local_tracker, priority: local_issue_priority
|
|
10
|
+
)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def local_issue_uncached
|
|
14
|
+
remote_issue_by_remote_code.if_present(&:local_issue) || ::Issue.new
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def local_issue_priority
|
|
18
|
+
::IssuePriority.default
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RemoteIssueFetch
|
|
4
|
+
class Create < ::RemoteIssueFetch::Base
|
|
5
|
+
private
|
|
6
|
+
|
|
7
|
+
def remote_issue_uncached
|
|
8
|
+
remote_issue_by_remote_code.if_blank do
|
|
9
|
+
::RemoteIssue.new(remote_tracker: remote_tracker, remote_code: issue_remote_code,
|
|
10
|
+
local_issue: local_issue)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def remote_issue_by_remote_code_uncached
|
|
15
|
+
::RemoteIssue.find_by(
|
|
16
|
+
remote_tracker: remote_tracker,
|
|
17
|
+
remote_code: ::RemoteIssue.remote_code_sanitize(issue_remote_code)
|
|
18
|
+
)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RemoteIssueFetch
|
|
4
|
+
class Create < ::RemoteIssueFetch::Base
|
|
5
|
+
require_sub __FILE__
|
|
6
|
+
|
|
7
|
+
attribute :issue_remote_code, ::String
|
|
8
|
+
attribute :local_tracker_id, ::Integer
|
|
9
|
+
attribute :project_id, ::Integer
|
|
10
|
+
attribute :remote_tracker_id, ::Integer
|
|
11
|
+
|
|
12
|
+
belongs_to :local_tracker, class_name: 'Tracker'
|
|
13
|
+
belongs_to :project, class_name: 'Project'
|
|
14
|
+
belongs_to :remote_tracker, class_name: 'RemoteTracker'
|
|
15
|
+
|
|
16
|
+
validates :project, presence: true
|
|
17
|
+
|
|
18
|
+
validate :tracker_in_project
|
|
19
|
+
|
|
20
|
+
def default_error_column
|
|
21
|
+
:issue_remote_code
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def save
|
|
25
|
+
remote_issue_by_remote_code.present? ? update : super
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def tracker_in_project
|
|
29
|
+
return unless local_tracker.present? && project.present?
|
|
30
|
+
return if project.trackers.include?(local_tracker)
|
|
31
|
+
|
|
32
|
+
errors.add(:local_tracker, 'is not a tracker of project')
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def update
|
|
36
|
+
update_record = ::RemoteIssueFetch::Update
|
|
37
|
+
.new(remote_issue: remote_issue_by_remote_code)
|
|
38
|
+
return true if update_record.save
|
|
39
|
+
|
|
40
|
+
fetch_record_errors(update_record, default_column: default_error_column)
|
|
41
|
+
false
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
|
4
|
+
|
|
5
|
+
module RemoteIssueFetch
|
|
6
|
+
class Update < ::RemoteIssueFetch::Base
|
|
7
|
+
require_sub __FILE__
|
|
8
|
+
|
|
9
|
+
attribute :remote_issue_id, ::Integer
|
|
10
|
+
belongs_to :remote_issue
|
|
11
|
+
|
|
12
|
+
validates :remote_issue, presence: true
|
|
13
|
+
|
|
14
|
+
def default_error_column
|
|
15
|
+
:remote_issue_id
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -22,7 +22,7 @@ class RemoteTracker < ActiveRecord::Base
|
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
def result_by_remote_issue_status
|
|
25
|
-
::RemoteIssueStatus.
|
|
25
|
+
::RemoteIssueStatus.find_by(remote_issue_status_find_attributes).try(:local_issue_status)
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
def result_by_local_issue_status
|
|
@@ -43,6 +43,6 @@ class RemoteTracker < ActiveRecord::Base
|
|
|
43
43
|
end
|
|
44
44
|
|
|
45
45
|
def setting_value(name)
|
|
46
|
-
::RemoteTrackerSetting.
|
|
46
|
+
::RemoteTrackerSetting.find_by(remote_tracker: self, name: name).if_present(&:value)
|
|
47
47
|
end
|
|
48
48
|
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
|
4
|
+
|
|
5
|
+
class RemoteTrackerFetch < ::EacRailsUtils::Models::Tableless
|
|
6
|
+
module Provider
|
|
7
|
+
private
|
|
8
|
+
|
|
9
|
+
def provider_issues_codes
|
|
10
|
+
remote_tracker.remote_instance.fetch_issues_changed(start_time, end_time)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
|
4
|
+
|
|
5
|
+
class RemoteTrackerFetch < ::EacRailsUtils::Models::Tableless
|
|
6
|
+
module RemoteIssues
|
|
7
|
+
private
|
|
8
|
+
|
|
9
|
+
def save_remote_issues
|
|
10
|
+
remote_issues.all? { |remote_issue| save_remote_issue(remote_issue) }
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def save_remote_issue(remote_issue)
|
|
14
|
+
return true if remote_issue.update(outdated_at: end_time)
|
|
15
|
+
|
|
16
|
+
fetch_record_errors(remote_issue, default_column: default_error_column)
|
|
17
|
+
false
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def remote_issues_uncached
|
|
21
|
+
provider_issues_codes.map do |code|
|
|
22
|
+
::RemoteIssue.find_by(remote_tracker: remote_tracker,
|
|
23
|
+
remote_code: ::RemoteIssue.remote_code_sanitize(code))
|
|
24
|
+
end.reject(&:blank?)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
|
4
|
+
|
|
5
|
+
class RemoteTrackerFetch < ::EacRailsUtils::Models::Tableless
|
|
6
|
+
module RemoteTracker
|
|
7
|
+
private
|
|
8
|
+
|
|
9
|
+
def save_remote_tracker
|
|
10
|
+
return true if remote_tracker.update(fetched_at: end_time)
|
|
11
|
+
|
|
12
|
+
fetch_record_errors(remote_tracker, default_column: default_error_column)
|
|
13
|
+
false
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
|
4
|
+
|
|
5
|
+
class RemoteTrackerFetch < ::EacRailsUtils::Models::Tableless
|
|
6
|
+
require_sub __FILE__, include_modules: true, require_dependency: true
|
|
7
|
+
enable_simple_cache
|
|
8
|
+
include ::EacRailsUtils::Models::FetchErrors
|
|
9
|
+
|
|
10
|
+
attribute :remote_tracker_id, ::Integer
|
|
11
|
+
belongs_to :remote_tracker, class_name: 'RemoteTracker'
|
|
12
|
+
|
|
13
|
+
validates :remote_tracker, presence: true
|
|
14
|
+
validates :start_time, presence: true
|
|
15
|
+
validates :end_time, presence: true
|
|
16
|
+
validate :remote_tracker_fetchable_validation
|
|
17
|
+
|
|
18
|
+
def save
|
|
19
|
+
::Issue.transaction do
|
|
20
|
+
return false unless valid?
|
|
21
|
+
return false unless save_remote_issues
|
|
22
|
+
return false unless save_remote_tracker
|
|
23
|
+
end
|
|
24
|
+
true
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def default_error_column
|
|
28
|
+
:remote_tracker_id
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
private
|
|
32
|
+
|
|
33
|
+
def end_time_uncached
|
|
34
|
+
::Time.zone.now
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def start_time_uncached
|
|
38
|
+
remote_tracker.try(:fetched_at) || end_time
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def remote_tracker_fetchable_validation
|
|
42
|
+
return if remote_tracker.blank?
|
|
43
|
+
return if remote_tracker.fetchable?
|
|
44
|
+
|
|
45
|
+
errors.add(:remote_tracker, "Remote tracker \"#{remote_tracker}\" is not fetchable")
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -25,7 +25,7 @@ class RemoteUser < ActiveRecord::Base
|
|
|
25
25
|
|
|
26
26
|
def result_by_local_user_mail_address
|
|
27
27
|
condition = ::EmailAddress.arel_table[:address].matches("#{remote_login}@%")
|
|
28
|
-
::EmailAddress.
|
|
28
|
+
::EmailAddress.find_by(condition).try(:user)
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
def result_by_register_not_found
|
|
@@ -47,10 +47,10 @@ class RemoteUser < ActiveRecord::Base
|
|
|
47
47
|
end
|
|
48
48
|
|
|
49
49
|
def remote_tracker_result(remote_tracker)
|
|
50
|
-
::RemoteUser.
|
|
50
|
+
::RemoteUser.find_by(
|
|
51
51
|
remote_tracker: remote_tracker,
|
|
52
52
|
remote_login: remote_login
|
|
53
|
-
).
|
|
53
|
+
).try(:local_user)
|
|
54
54
|
end
|
|
55
55
|
|
|
56
56
|
def remote_trackers_to_search
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
|
|
3
3
|
Redmine::Plugin.post_register ::RedmineRemotes::SLUG.to_sym do
|
|
4
4
|
# Source: https://github.com/esquilo-azul/redmine_nonproject_modules
|
|
5
|
-
requires_redmine_plugin(:redmine_nonproject_modules, version_or_higher: '0.
|
|
5
|
+
requires_redmine_plugin(:redmine_nonproject_modules, version_or_higher: '0.3.9')
|
|
6
6
|
end
|
data/config/routes.rb
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
RedmineApp::Application.routes.draw do
|
|
4
|
+
concern :active_scaffold, ActiveScaffold::Routing::Basic.new(association: true)
|
|
4
5
|
get '/projects/:id/remotes', to: 'project_remote_issues#index'
|
|
5
6
|
get '/projects/:id/tracker/:tracker_id/new_issue', to: 'project_remote_issues#new',
|
|
6
7
|
as: 'new_project_remote_issue'
|
|
@@ -9,9 +10,9 @@ RedmineApp::Application.routes.draw do
|
|
|
9
10
|
put '/projects/:id/remote_issue/:remote_issue_id/update', to: 'project_remote_issues#update',
|
|
10
11
|
as: 'update_project_remote_issue'
|
|
11
12
|
resources(:project_remote_issues, only: [:index])
|
|
12
|
-
resources(:remote_trackers
|
|
13
|
-
resources(:remote_tracker_settings
|
|
14
|
-
resources(:remote_issues
|
|
15
|
-
resources(:remote_issue_statuses
|
|
16
|
-
resources(:remote_users
|
|
13
|
+
resources(:remote_trackers, concerns: :active_scaffold)
|
|
14
|
+
resources(:remote_tracker_settings, concerns: :active_scaffold)
|
|
15
|
+
resources(:remote_issues, concerns: :active_scaffold)
|
|
16
|
+
resources(:remote_issue_statuses, concerns: :active_scaffold)
|
|
17
|
+
resources(:remote_users, concerns: :active_scaffold)
|
|
17
18
|
end
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
class CreateRemoteUsers < ActiveRecord::Migration
|
|
4
4
|
def change
|
|
5
|
-
create_table :remote_users do |t|
|
|
5
|
+
create_table :remote_users do |t| # rubocop:disable Rails/CreateTableWithTimestamps
|
|
6
6
|
t.references :remote_tracker, index: true
|
|
7
7
|
t.string :remote_login
|
|
8
8
|
t.references :local_user, index: true
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
class CreateRemoteIssueStatuses < ActiveRecord::Migration
|
|
4
4
|
def change
|
|
5
|
-
create_table :remote_issue_statuses do |t|
|
|
5
|
+
create_table :remote_issue_statuses do |t| # rubocop:disable Rails/CreateTableWithTimestamps
|
|
6
6
|
t.references :remote_tracker, index: true
|
|
7
7
|
t.references :local_tracker, index: true
|
|
8
8
|
t.string :remote_name
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
class CreateRemoteIssues < ActiveRecord::Migration
|
|
4
4
|
def change
|
|
5
|
-
create_table :remote_issues do |t|
|
|
5
|
+
create_table :remote_issues do |t| # rubocop:disable Rails/CreateTableWithTimestamps
|
|
6
6
|
t.references :remote_tracker, index: true
|
|
7
7
|
t.references :local_issue, index: true, nullable: true
|
|
8
8
|
t.string :remote_code
|
|
@@ -6,12 +6,19 @@ module RedmineRemotes
|
|
|
6
6
|
module Esosti
|
|
7
7
|
module Entities
|
|
8
8
|
class Issue < ::Avmtrf1::Esosti::Entities::Issue
|
|
9
|
+
EXTRA_DESCRIPTION_BEFORE = { reported_by: 'Relatado por', affected_person: 'Pessoa afetada',
|
|
10
|
+
type_description: 'Tipo de solicitação' }.freeze
|
|
11
|
+
|
|
9
12
|
def human_view_url
|
|
10
13
|
instance.issue_human_view_url(uid)
|
|
11
14
|
end
|
|
12
15
|
|
|
13
16
|
def author_login
|
|
14
|
-
attributes.fetch('CREATEDBY')
|
|
17
|
+
mail_local_part(attributes.fetch('CREATEDBY'))
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def affected_person
|
|
21
|
+
mail_local_part(attributes.fetch('AFFECTEDPERSON'))
|
|
15
22
|
end
|
|
16
23
|
|
|
17
24
|
def attributes
|
|
@@ -32,21 +39,45 @@ module RedmineRemotes
|
|
|
32
39
|
)
|
|
33
40
|
end
|
|
34
41
|
|
|
42
|
+
def extra_description_before
|
|
43
|
+
{
|
|
44
|
+
'Relatado por' => "user:#{reported_by}",
|
|
45
|
+
'Pessoa afetada' => "user:#{affected_person}",
|
|
46
|
+
'Tipo de solicitação' => type_description
|
|
47
|
+
}
|
|
48
|
+
end
|
|
49
|
+
|
|
35
50
|
def related_mbos
|
|
36
51
|
data.first.fetch('RelatedMbos')
|
|
37
52
|
end
|
|
38
53
|
|
|
54
|
+
def reported_by
|
|
55
|
+
mail_local_part(attributes.fetch('REPORTEDBY'))
|
|
56
|
+
end
|
|
57
|
+
|
|
39
58
|
def status_name
|
|
40
59
|
attributes.fetch('STATUS')
|
|
41
60
|
end
|
|
42
61
|
|
|
43
62
|
def subject
|
|
63
|
+
description.gsub(/\s+/, ' ')
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def type_description
|
|
44
67
|
attributes.fetch('DESCRIPTION')
|
|
45
68
|
end
|
|
46
69
|
|
|
47
70
|
def uid
|
|
48
71
|
attributes.fetch('TICKETUID').fetch('content')
|
|
49
72
|
end
|
|
73
|
+
|
|
74
|
+
private
|
|
75
|
+
|
|
76
|
+
def mail_local_part(mail_address)
|
|
77
|
+
mail_address.if_present do |v|
|
|
78
|
+
/\A([^@]+)@/.if_match(v, false) { |m| m[1].downcase }.if_present(mail_address)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
50
81
|
end
|
|
51
82
|
end
|
|
52
83
|
end
|
|
@@ -19,7 +19,7 @@ module RedmineRemotes
|
|
|
19
19
|
def fetch_issue(remote_issue)
|
|
20
20
|
::Rails.logger.info 'Fetching remote issue ' \
|
|
21
21
|
"\"#{remote_issue}|\##{remote_issue.local_issue.id}\""
|
|
22
|
-
record = ::
|
|
22
|
+
record = ::RemoteIssueFetch::Update.new(
|
|
23
23
|
remote_issue: remote_issue
|
|
24
24
|
)
|
|
25
25
|
return if record.save
|
|
@@ -14,7 +14,7 @@ module RedmineRemotes
|
|
|
14
14
|
|
|
15
15
|
def fetch_tracker(remote_tracker)
|
|
16
16
|
::Rails.logger.info "Fetch remote tracker \"#{remote_tracker}\"..."
|
|
17
|
-
record = ::
|
|
17
|
+
record = ::RemoteTrackerFetch.new(
|
|
18
18
|
remote_tracker: remote_tracker
|
|
19
19
|
)
|
|
20
20
|
return if record.save
|