redmine_remotes 0.5.1 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|