redmine_remotes 0.5.1 → 0.6.0
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.rb +1 -1
- data/app/models/redmine_remotes/tableless/remote_issue_fetch/base.rb +42 -0
- data/app/models/redmine_remotes/tableless/remote_issue_fetch/base/_local_issue.rb +47 -0
- data/app/models/redmine_remotes/tableless/remote_issue_fetch/base/_provider_issue.rb +22 -0
- data/app/models/redmine_remotes/tableless/remote_issue_fetch/create.rb +56 -0
- data/app/models/redmine_remotes/tableless/remote_issue_fetch/create/_local_issue.rb +31 -0
- data/app/models/redmine_remotes/tableless/remote_issue_fetch/create/_remote_issue.rb +32 -0
- data/app/models/redmine_remotes/tableless/remote_issue_fetch/update.rb +30 -0
- data/app/models/redmine_remotes/tableless/remote_issue_fetch/update/_local_issue.rb +26 -0
- data/app/models/redmine_remotes/tableless/remote_issue_fetch/update/_provider_issue.rb +20 -0
- data/app/models/redmine_remotes/tableless/remote_issue_fetch/update/_remote_issue.rb +19 -0
- data/app/models/remote_issue.rb +1 -0
- data/app/models/remote_tracker.rb +1 -2
- data/app/models/remote_tracker/jira.rb +13 -0
- data/lib/redmine_remotes/jira/entities/issue.rb +4 -2
- data/lib/redmine_remotes/rest_provider/instance.rb +5 -30
- data/lib/redmine_remotes/version.rb +1 -1
- data/lib/tasks/redmine_remotes.rake +1 -1
- metadata +32 -7
- data/app/models/redmine_remotes/tableless/add_remote_issue.rb +0 -65
- data/app/models/redmine_remotes/tableless/add_remote_issue/_local_issue.rb +0 -57
- data/app/models/redmine_remotes/tableless/add_remote_issue/_provider_issue.rb +0 -19
- data/app/models/redmine_remotes/tableless/add_remote_issue/_remote_issue.rb +0 -27
- data/app/models/remote_tracker/_jira.rb +0 -11
- data/lib/redmine_remotes/rest_provider/entity.rb +0 -18
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 42af9429138fa8a7103fc657a191d650230968969c88bef3e04d1e2b36e368e4
|
|
4
|
+
data.tar.gz: d3576ad7482261ab795fdf99f8cc6509e39fc0dd8bb8cf1668f06b66475e198d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 82a1a63732ae40837ab40697d0d7bf2fa0355bc458dc8bd38867f4846dcfabc23a6e8fff562d6c48d4aac3b14609c8f1b803c2eb1487e4b5bf016011f15350b5
|
|
7
|
+
data.tar.gz: e48108913a5d3296db90d7c6a9dcfb5c89539e12c84736ef69abb62b0484b3f6f5d5ee8ee800e4a39cef5c1ef52c4705198dc41bbabac3700d196edc47865e21
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'eac/model'
|
|
4
|
+
require 'eac_ruby_utils/core_ext'
|
|
5
|
+
|
|
6
|
+
module RedmineRemotes
|
|
7
|
+
module Tableless
|
|
8
|
+
module RemoteIssueFetch
|
|
9
|
+
class Base < ::EacRailsUtils::TablelessModel
|
|
10
|
+
enable_simple_cache
|
|
11
|
+
require_sub __FILE__
|
|
12
|
+
include ::Eac::Model
|
|
13
|
+
|
|
14
|
+
validate :author_present
|
|
15
|
+
validate :provider_issue_present
|
|
16
|
+
|
|
17
|
+
def tracker_in_project
|
|
18
|
+
return unless local_tracker.present? && project.present?
|
|
19
|
+
return if project.trackers.include?(local_tracker)
|
|
20
|
+
|
|
21
|
+
errors.add(:local_tracker, 'is not a tracker of project')
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def author_present
|
|
25
|
+
return if provider_issue.blank?
|
|
26
|
+
return if local_issue_author.present?
|
|
27
|
+
|
|
28
|
+
errors.add(:remote_code,
|
|
29
|
+
"Usuário local não encontrado para \"#{provider_issue.author_login}\"")
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def provider_issue_present
|
|
33
|
+
return if issue_remote_code.blank?
|
|
34
|
+
return if provider_issue.present?
|
|
35
|
+
|
|
36
|
+
errors.add(:remote_code,
|
|
37
|
+
"Demanda remota não encontrada com o código \"#{issue_remote_code}\"")
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RedmineRemotes
|
|
4
|
+
module Tableless
|
|
5
|
+
module RemoteIssueFetch
|
|
6
|
+
class Base < ::EacRailsUtils::TablelessModel
|
|
7
|
+
private
|
|
8
|
+
|
|
9
|
+
def local_issue_provider_attributes
|
|
10
|
+
{
|
|
11
|
+
subject: local_issue_subject, author: local_issue_author, status: local_issue_status,
|
|
12
|
+
created_on: provider_issue.created_on, updated_on: provider_issue.updated_on
|
|
13
|
+
}
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def local_issue_subject
|
|
17
|
+
"[#{provider_issue.code}] #{provider_issue.subject}"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def local_issue_author_uncached
|
|
21
|
+
return nil if provider_issue.blank?
|
|
22
|
+
|
|
23
|
+
::RemoteUser.find_local_user(
|
|
24
|
+
provider_issue.author_login,
|
|
25
|
+
remote_tracker
|
|
26
|
+
)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def local_issue_status
|
|
30
|
+
local_issue_status_from_remote_tracker || local_issue_status_from_local_tracker
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def local_issue_status_from_remote_tracker
|
|
34
|
+
::RemoteIssueStatus.find_local_issue_status(
|
|
35
|
+
provider_issue.status_name,
|
|
36
|
+
remote_tracker,
|
|
37
|
+
local_tracker
|
|
38
|
+
)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def local_issue_status_from_local_tracker
|
|
42
|
+
local_tracker.default_status
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RedmineRemotes
|
|
4
|
+
module Tableless
|
|
5
|
+
module RemoteIssueFetch
|
|
6
|
+
class Base < ::EacRailsUtils::TablelessModel
|
|
7
|
+
private
|
|
8
|
+
|
|
9
|
+
def provider_issue_uncached
|
|
10
|
+
return nil if [remote_tracker, issue_remote_code].any?(&:blank?)
|
|
11
|
+
|
|
12
|
+
remote_tracker.find_remote_issue(issue_remote_code)
|
|
13
|
+
rescue ::RedmineRemotes::RestProvider::HttpResponse => e
|
|
14
|
+
errors.add(default_error_column,
|
|
15
|
+
"Requisição a \"#{e.url}\" retornou com status #{e.status}")
|
|
16
|
+
::Rails.logger.warn(e.body)
|
|
17
|
+
nil
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RedmineRemotes
|
|
4
|
+
module Tableless
|
|
5
|
+
module RemoteIssueFetch
|
|
6
|
+
class Create < ::RedmineRemotes::Tableless::RemoteIssueFetch::Base
|
|
7
|
+
require_sub __FILE__
|
|
8
|
+
|
|
9
|
+
attribute :issue_remote_code, ::String
|
|
10
|
+
attribute :local_tracker_id, ::Integer
|
|
11
|
+
attribute :project_id, ::Integer
|
|
12
|
+
attribute :remote_tracker_id, ::Integer
|
|
13
|
+
|
|
14
|
+
belongs_to :local_tracker, class_name: 'Tracker'
|
|
15
|
+
belongs_to :project, class_name: 'Project'
|
|
16
|
+
belongs_to :remote_tracker, class_name: 'RemoteTracker'
|
|
17
|
+
|
|
18
|
+
validates :local_tracker, presence: true
|
|
19
|
+
validates :remote_tracker, presence: true
|
|
20
|
+
validates :project, presence: true
|
|
21
|
+
validates :issue_remote_code, presence: true
|
|
22
|
+
|
|
23
|
+
validate :tracker_in_project
|
|
24
|
+
|
|
25
|
+
def create
|
|
26
|
+
::Issue.transaction do
|
|
27
|
+
return false unless valid?
|
|
28
|
+
return false unless create_local_issue
|
|
29
|
+
return false unless create_remote_issue
|
|
30
|
+
end
|
|
31
|
+
true
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def default_error_column
|
|
35
|
+
:issue_remote_code
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def save
|
|
39
|
+
remote_issue_by_remote_code.present? ? update : create
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def tracker_in_project
|
|
43
|
+
return unless local_tracker.present? && project.present?
|
|
44
|
+
return if project.trackers.include?(local_tracker)
|
|
45
|
+
|
|
46
|
+
errors.add(:local_tracker, 'is not a tracker of project')
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def update
|
|
50
|
+
::RedmineRemotes::Tableless::RemoteIssueFetch::Update
|
|
51
|
+
.new(remote_issue: remote_issue_by_remote_code).save
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RedmineRemotes
|
|
4
|
+
module Tableless
|
|
5
|
+
module RemoteIssueFetch
|
|
6
|
+
class Create < ::RedmineRemotes::Tableless::RemoteIssueFetch::Base
|
|
7
|
+
private
|
|
8
|
+
|
|
9
|
+
def create_local_issue
|
|
10
|
+
return true if local_issue.save
|
|
11
|
+
|
|
12
|
+
fetch_record_errors(local_issue, default_column: :issue_remote_code)
|
|
13
|
+
false
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def local_issue_uncached
|
|
17
|
+
remote_issue_by_remote_code.if_present { |v| return v.local_issue }
|
|
18
|
+
::Issue.new(
|
|
19
|
+
local_issue_provider_attributes.merge(
|
|
20
|
+
project: project, tracker: local_tracker, priority: local_issue_priority
|
|
21
|
+
)
|
|
22
|
+
)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def local_issue_priority
|
|
26
|
+
::IssuePriority.default
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RedmineRemotes
|
|
4
|
+
module Tableless
|
|
5
|
+
module RemoteIssueFetch
|
|
6
|
+
class Create < ::RedmineRemotes::Tableless::RemoteIssueFetch::Base
|
|
7
|
+
private
|
|
8
|
+
|
|
9
|
+
def create_remote_issue
|
|
10
|
+
return true if remote_issue.save
|
|
11
|
+
|
|
12
|
+
fetch_record_errors(remote_issue, default_column: default_error_column)
|
|
13
|
+
false
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def remote_issue_uncached
|
|
17
|
+
remote_issue_by_remote_code.if_blank do
|
|
18
|
+
::RemoteIssue.new(remote_tracker: remote_tracker, remote_code: issue_remote_code,
|
|
19
|
+
local_issue: local_issue)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def remote_issue_by_remote_code_uncached
|
|
24
|
+
::RemoteIssue.where(
|
|
25
|
+
remote_tracker: remote_tracker,
|
|
26
|
+
remote_code: ::RemoteIssue.remote_code_sanitize(issue_remote_code)
|
|
27
|
+
).first
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
|
4
|
+
require 'eac/model'
|
|
5
|
+
|
|
6
|
+
module RedmineRemotes
|
|
7
|
+
module Tableless
|
|
8
|
+
module RemoteIssueFetch
|
|
9
|
+
class Update < ::RedmineRemotes::Tableless::RemoteIssueFetch::Base
|
|
10
|
+
require_sub __FILE__
|
|
11
|
+
|
|
12
|
+
attribute :remote_issue_id, ::Integer
|
|
13
|
+
belongs_to :remote_issue
|
|
14
|
+
|
|
15
|
+
validates :remote_issue, presence: true
|
|
16
|
+
|
|
17
|
+
def default_error_column
|
|
18
|
+
:remote_issue_id
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def save
|
|
22
|
+
return false unless valid?
|
|
23
|
+
return false unless update_local_issue_with_remote_data
|
|
24
|
+
|
|
25
|
+
true
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RedmineRemotes
|
|
4
|
+
module Tableless
|
|
5
|
+
module RemoteIssueFetch
|
|
6
|
+
class Update < ::RedmineRemotes::Tableless::RemoteIssueFetch::Base
|
|
7
|
+
private
|
|
8
|
+
|
|
9
|
+
def local_issue
|
|
10
|
+
remote_issue.local_issue
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def local_tracker
|
|
14
|
+
local_issue.tracker
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def update_local_issue_with_remote_data
|
|
18
|
+
return true if local_issue.update(local_issue_provider_attributes)
|
|
19
|
+
|
|
20
|
+
fetch_record_errors(local_issue, default_column: :issue_remote_code)
|
|
21
|
+
false
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RedmineRemotes
|
|
4
|
+
module Tableless
|
|
5
|
+
module RemoteIssueFetch
|
|
6
|
+
class Update < ::RedmineRemotes::Tableless::RemoteIssueFetch::Base
|
|
7
|
+
private
|
|
8
|
+
|
|
9
|
+
def provider_issue_uncached
|
|
10
|
+
remote_issue.remote_tracker.find_remote_issue(remote_issue.remote_code)
|
|
11
|
+
rescue ::RedmineRemotes::RestProvider::HttpResponse => e
|
|
12
|
+
errors.add(:remote_issue_id,
|
|
13
|
+
"Requisição a \"#{e.url}\" retornou com status #{e.status}")
|
|
14
|
+
puts "====> #{e.body}"
|
|
15
|
+
nil
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RedmineRemotes
|
|
4
|
+
module Tableless
|
|
5
|
+
module RemoteIssueFetch
|
|
6
|
+
class Update < ::RedmineRemotes::Tableless::RemoteIssueFetch::Base
|
|
7
|
+
private
|
|
8
|
+
|
|
9
|
+
def issue_remote_code
|
|
10
|
+
remote_issue.remote_code
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def remote_tracker
|
|
14
|
+
remote_issue.remote_tracker
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
data/app/models/remote_issue.rb
CHANGED
|
@@ -8,6 +8,7 @@ class RemoteIssue < ActiveRecord::Base
|
|
|
8
8
|
belongs_to :remote_tracker, class_name: 'RemoteTracker', inverse_of: :issues
|
|
9
9
|
belongs_to :local_issue, class_name: 'Issue', inverse_of: :remote_issue
|
|
10
10
|
|
|
11
|
+
validates :local_issue, presence: true, uniqueness: true
|
|
11
12
|
validates :remote_tracker, presence: true
|
|
12
13
|
validates :remote_code, presence: true, uniqueness: { scope: [:remote_tracker] }
|
|
13
14
|
|
|
@@ -4,9 +4,8 @@ require 'eac_ruby_utils/listable'
|
|
|
4
4
|
require 'validate_url'
|
|
5
5
|
|
|
6
6
|
class RemoteTracker < ActiveRecord::Base
|
|
7
|
-
require_relative 'remote_tracker/_jira'
|
|
8
|
-
|
|
9
7
|
include ::EacRubyUtils::Listable
|
|
8
|
+
include ::RemoteTracker::Jira
|
|
10
9
|
|
|
11
10
|
has_many :issues, class_name: 'RemoteIssue', inverse_of: :remote_tracker,
|
|
12
11
|
dependent: :restrict_with_error
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class RemoteTracker < ActiveRecord::Base
|
|
4
|
+
module Jira
|
|
5
|
+
def jira_find_remote_issue(issue_id)
|
|
6
|
+
jira_create_instance.find_issue(issue_id)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def jira_create_instance
|
|
10
|
+
::RedmineRemotes::Jira::Instance.new(root_url, username, password)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require 'avmtrf1/rest_provider/entity'
|
|
4
|
+
|
|
3
5
|
module RedmineRemotes
|
|
4
6
|
module Jira
|
|
5
7
|
module Entities
|
|
6
|
-
class Issue < ::
|
|
8
|
+
class Issue < ::Avmtrf1::RestProvider::Entity
|
|
7
9
|
def code
|
|
8
10
|
data.fetch('key')
|
|
9
11
|
end
|
|
@@ -29,7 +31,7 @@ module RedmineRemotes
|
|
|
29
31
|
end
|
|
30
32
|
|
|
31
33
|
def author_login
|
|
32
|
-
fields.fetch
|
|
34
|
+
fields.try(:fetch, 'reporter').try(:fetch, 'key')
|
|
33
35
|
end
|
|
34
36
|
end
|
|
35
37
|
end
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require 'avmtrf1/rest_provider/instance'
|
|
3
4
|
require 'curb'
|
|
4
5
|
require 'json'
|
|
5
6
|
|
|
@@ -9,42 +10,16 @@ module RedmineRemotes
|
|
|
9
10
|
# * parse_issue_id(global_issue_id)
|
|
10
11
|
# * self.build_service_url(service_url_suffix)
|
|
11
12
|
# * self.issue_get_url_suffix(provider_issue_id)
|
|
12
|
-
class Instance
|
|
13
|
-
attr_reader :root_url, :username, :password
|
|
14
|
-
|
|
15
|
-
def initialize(root_url, username, password)
|
|
16
|
-
@root_url = root_url
|
|
17
|
-
@username = username
|
|
18
|
-
@password = password
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def find_issue(global_issue_id)
|
|
22
|
-
parsed = self.class.parse_issue_id(global_issue_id)
|
|
23
|
-
parsed.present? ? issue(parsed.provider_issue_id) : nil
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def issue(provider_issue_id)
|
|
27
|
-
issue_class.new(self, request(issue_get_url_suffix(provider_issue_id)))
|
|
28
|
-
end
|
|
29
|
-
|
|
13
|
+
class Instance < ::Avmtrf1::RestProvider::Instance
|
|
30
14
|
def request(service_url_suffix)
|
|
31
|
-
JSON.parse(
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def issue_class
|
|
35
|
-
"#{self.class.name.deconstantize}::Entities::Issue".constantize
|
|
15
|
+
JSON.parse(super(service_url_suffix).body_or_raise)
|
|
36
16
|
end
|
|
37
17
|
|
|
38
18
|
private
|
|
39
19
|
|
|
40
20
|
# @return [RedmineRemotes::RestProvider::HttpResponse]
|
|
41
|
-
def curl_perform(
|
|
42
|
-
|
|
43
|
-
c.http_auth_types = :basic
|
|
44
|
-
c.username = username
|
|
45
|
-
c.password = password
|
|
46
|
-
c.headers['Accept'] = 'application/json'
|
|
47
|
-
return ::RedmineRemotes::RestProvider::HttpResponse.new_from_curl_easy(c) if c.perform
|
|
21
|
+
def curl_perform(curl)
|
|
22
|
+
return ::RedmineRemotes::RestProvider::HttpResponse.new_from_curl_easy(curl) if curl.perform
|
|
48
23
|
|
|
49
24
|
raise 'Curl failed'
|
|
50
25
|
end
|
|
@@ -28,7 +28,7 @@ namespace :redmine_remotes do
|
|
|
28
28
|
end
|
|
29
29
|
::Rails.logger.info("Local tracker: #{local_tracker}")
|
|
30
30
|
|
|
31
|
-
add = ::RedmineRemotes::Tableless::
|
|
31
|
+
add = ::RedmineRemotes::Tableless::RemoteIssueFetch::Create.new(
|
|
32
32
|
remote_tracker: remote_tracker, project: project, local_tracker: local_tracker,
|
|
33
33
|
issue_remote_code: args.issue_remote_code
|
|
34
34
|
)
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: redmine_remotes
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.6.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Eduardo Henrique Bogoni
|
|
@@ -24,6 +24,26 @@ dependencies:
|
|
|
24
24
|
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
26
|
version: '0.4'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: avmtrf1-tools
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '0.27'
|
|
34
|
+
- - ">="
|
|
35
|
+
- !ruby/object:Gem::Version
|
|
36
|
+
version: 0.27.1
|
|
37
|
+
type: :runtime
|
|
38
|
+
prerelease: false
|
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
40
|
+
requirements:
|
|
41
|
+
- - "~>"
|
|
42
|
+
- !ruby/object:Gem::Version
|
|
43
|
+
version: '0.27'
|
|
44
|
+
- - ">="
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: 0.27.1
|
|
27
47
|
- !ruby/object:Gem::Dependency
|
|
28
48
|
name: curb
|
|
29
49
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -109,14 +129,20 @@ files:
|
|
|
109
129
|
- app/controllers/remote_issues_controller.rb
|
|
110
130
|
- app/controllers/remote_trackers_controller.rb
|
|
111
131
|
- app/controllers/remote_users_controller.rb
|
|
112
|
-
- app/models/redmine_remotes/tableless/
|
|
113
|
-
- app/models/redmine_remotes/tableless/
|
|
114
|
-
- app/models/redmine_remotes/tableless/
|
|
115
|
-
- app/models/redmine_remotes/tableless/
|
|
132
|
+
- app/models/redmine_remotes/tableless/remote_issue_fetch/base.rb
|
|
133
|
+
- app/models/redmine_remotes/tableless/remote_issue_fetch/base/_local_issue.rb
|
|
134
|
+
- app/models/redmine_remotes/tableless/remote_issue_fetch/base/_provider_issue.rb
|
|
135
|
+
- app/models/redmine_remotes/tableless/remote_issue_fetch/create.rb
|
|
136
|
+
- app/models/redmine_remotes/tableless/remote_issue_fetch/create/_local_issue.rb
|
|
137
|
+
- app/models/redmine_remotes/tableless/remote_issue_fetch/create/_remote_issue.rb
|
|
138
|
+
- app/models/redmine_remotes/tableless/remote_issue_fetch/update.rb
|
|
139
|
+
- app/models/redmine_remotes/tableless/remote_issue_fetch/update/_local_issue.rb
|
|
140
|
+
- app/models/redmine_remotes/tableless/remote_issue_fetch/update/_provider_issue.rb
|
|
141
|
+
- app/models/redmine_remotes/tableless/remote_issue_fetch/update/_remote_issue.rb
|
|
116
142
|
- app/models/remote_issue.rb
|
|
117
143
|
- app/models/remote_issue_status.rb
|
|
118
144
|
- app/models/remote_tracker.rb
|
|
119
|
-
- app/models/remote_tracker/
|
|
145
|
+
- app/models/remote_tracker/jira.rb
|
|
120
146
|
- app/models/remote_user.rb
|
|
121
147
|
- app/views/project_remote_issues/_trackers.html.erb
|
|
122
148
|
- app/views/project_remote_issues/index.html.erb
|
|
@@ -141,7 +167,6 @@ files:
|
|
|
141
167
|
- lib/redmine_remotes/patches/issue_status.rb
|
|
142
168
|
- lib/redmine_remotes/patches/tracker.rb
|
|
143
169
|
- lib/redmine_remotes/patches/user.rb
|
|
144
|
-
- lib/redmine_remotes/rest_provider/entity.rb
|
|
145
170
|
- lib/redmine_remotes/rest_provider/http_response.rb
|
|
146
171
|
- lib/redmine_remotes/rest_provider/instance.rb
|
|
147
172
|
- lib/redmine_remotes/sanitizer.rb
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'eac_ruby_utils/require_sub'
|
|
4
|
-
require 'eac_ruby_utils/simple_cache'
|
|
5
|
-
require 'eac/model'
|
|
6
|
-
|
|
7
|
-
module RedmineRemotes
|
|
8
|
-
module Tableless
|
|
9
|
-
class AddRemoteIssue < ::EacRailsUtils::TablelessModel
|
|
10
|
-
include ::EacRubyUtils::SimpleCache
|
|
11
|
-
include ::Eac::Model
|
|
12
|
-
::EacRubyUtils.require_sub(__FILE__)
|
|
13
|
-
|
|
14
|
-
attribute :issue_remote_code, ::String
|
|
15
|
-
attribute :local_tracker_id, ::Integer
|
|
16
|
-
attribute :project_id, ::Integer
|
|
17
|
-
attribute :remote_tracker_id, ::Integer
|
|
18
|
-
|
|
19
|
-
belongs_to :local_tracker, class_name: 'Tracker'
|
|
20
|
-
belongs_to :project, class_name: 'Project'
|
|
21
|
-
belongs_to :remote_tracker, class_name: 'RemoteTracker'
|
|
22
|
-
|
|
23
|
-
validates :local_tracker, presence: true
|
|
24
|
-
validates :remote_tracker, presence: true
|
|
25
|
-
validates :project, presence: true
|
|
26
|
-
validates :issue_remote_code, presence: true
|
|
27
|
-
|
|
28
|
-
validate :tracker_in_project
|
|
29
|
-
validate :author_present
|
|
30
|
-
validate :provider_issue_present
|
|
31
|
-
|
|
32
|
-
def save
|
|
33
|
-
return false unless valid?
|
|
34
|
-
return false unless create_remote_issue
|
|
35
|
-
return false unless create_local_issue
|
|
36
|
-
return false unless update_remote_issue_with_issue
|
|
37
|
-
|
|
38
|
-
true
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def tracker_in_project
|
|
42
|
-
return unless local_tracker.present? && project.present?
|
|
43
|
-
return if project.trackers.include?(local_tracker)
|
|
44
|
-
|
|
45
|
-
errors.add(:local_tracker, 'is not a tracker of project')
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def author_present
|
|
49
|
-
return if provider_issue.blank?
|
|
50
|
-
return if local_issue_author.present?
|
|
51
|
-
|
|
52
|
-
errors.add(:remote_code,
|
|
53
|
-
"Usuário local não encontrado para \"#{provider_issue.author_login}\"")
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
def provider_issue_present
|
|
57
|
-
return if issue_remote_code.blank?
|
|
58
|
-
return if provider_issue.present?
|
|
59
|
-
|
|
60
|
-
errors.add(:remote_code,
|
|
61
|
-
"Demanda remota não encontrada com o código \"#{issue_remote_code}\"")
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
end
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module RedmineRemotes
|
|
4
|
-
module Tableless
|
|
5
|
-
class AddRemoteIssue < ::EacRailsUtils::TablelessModel
|
|
6
|
-
private
|
|
7
|
-
|
|
8
|
-
def create_local_issue
|
|
9
|
-
return true if local_issue.save
|
|
10
|
-
|
|
11
|
-
fetch_record_errors(local_issue, default_column: :issue_remote_code)
|
|
12
|
-
false
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def local_issue_uncached
|
|
16
|
-
::Issue.new(
|
|
17
|
-
subject: local_issue_subject, project: project, tracker: local_tracker,
|
|
18
|
-
priority: local_issue_priority, author: local_issue_author, status: local_issue_status,
|
|
19
|
-
created_on: provider_issue.created_on, updated_on: provider_issue.updated_on
|
|
20
|
-
)
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def local_issue_priority
|
|
24
|
-
::IssuePriority.default
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def local_issue_subject
|
|
28
|
-
"[#{provider_issue.code}] #{provider_issue.subject}"
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def local_issue_author_uncached
|
|
32
|
-
return nil if provider_issue.blank?
|
|
33
|
-
|
|
34
|
-
::RemoteUser.find_local_user(
|
|
35
|
-
provider_issue.author_login,
|
|
36
|
-
remote_tracker
|
|
37
|
-
)
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def local_issue_status
|
|
41
|
-
local_issue_status_from_remote_tracker || local_issue_status_from_local_tracker
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def local_issue_status_from_remote_tracker
|
|
45
|
-
::RemoteIssueStatus.find_local_issue_status(
|
|
46
|
-
provider_issue.status_name,
|
|
47
|
-
remote_tracker,
|
|
48
|
-
local_tracker
|
|
49
|
-
)
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
def local_issue_status_from_local_tracker
|
|
53
|
-
local_tracker.default_status
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
end
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module RedmineRemotes
|
|
4
|
-
module Tableless
|
|
5
|
-
class AddRemoteIssue < ::EacRailsUtils::TablelessModel
|
|
6
|
-
private
|
|
7
|
-
|
|
8
|
-
def provider_issue_uncached
|
|
9
|
-
return nil unless remote_tracker.present? && issue_remote_code.present?
|
|
10
|
-
|
|
11
|
-
remote_tracker.find_remote_issue(issue_remote_code)
|
|
12
|
-
rescue ::RedmineRemotes::RestProvider::HttpResponse => e
|
|
13
|
-
errors.add(:issue_remote_code, "Requisição a \"#{e.url}\" retornou com status #{e.status}")
|
|
14
|
-
puts "====> #{e.body}"
|
|
15
|
-
nil
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module RedmineRemotes
|
|
4
|
-
module Tableless
|
|
5
|
-
class AddRemoteIssue < ::EacRailsUtils::TablelessModel
|
|
6
|
-
private
|
|
7
|
-
|
|
8
|
-
def create_remote_issue
|
|
9
|
-
return true if remote_issue.save
|
|
10
|
-
|
|
11
|
-
fetch_record_errors(remote_issue, default_column: :issue_remote_code)
|
|
12
|
-
false
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def update_remote_issue_with_issue
|
|
16
|
-
return true if remote_issue.update(local_issue: local_issue)
|
|
17
|
-
|
|
18
|
-
fetch_record_errors(remote_issue, default_column: :issue_remote_code)
|
|
19
|
-
false
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def remote_issue_uncached
|
|
23
|
-
::RemoteIssue.new(remote_tracker: remote_tracker, remote_code: issue_remote_code)
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
end
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
class RemoteTracker < ActiveRecord::Base
|
|
4
|
-
def jira_find_remote_issue(issue_id)
|
|
5
|
-
jira_create_instance.find_issue(issue_id)
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
def jira_create_instance
|
|
9
|
-
::RedmineRemotes::Jira::Instance.new(root_url, username, password)
|
|
10
|
-
end
|
|
11
|
-
end
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'eac_ruby_utils/simple_cache'
|
|
4
|
-
|
|
5
|
-
module RedmineRemotes
|
|
6
|
-
module RestProvider
|
|
7
|
-
class Entity
|
|
8
|
-
include ::EacRubyUtils::SimpleCache
|
|
9
|
-
|
|
10
|
-
attr_reader :instance, :data
|
|
11
|
-
|
|
12
|
-
def initialize(instance, data)
|
|
13
|
-
@instance = instance
|
|
14
|
-
@data = data
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|