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.
Files changed (26) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/project_remote_issues_controller.rb +1 -1
  3. data/app/models/redmine_remotes/tableless/remote_issue_fetch/base.rb +42 -0
  4. data/app/models/redmine_remotes/tableless/remote_issue_fetch/base/_local_issue.rb +47 -0
  5. data/app/models/redmine_remotes/tableless/remote_issue_fetch/base/_provider_issue.rb +22 -0
  6. data/app/models/redmine_remotes/tableless/remote_issue_fetch/create.rb +56 -0
  7. data/app/models/redmine_remotes/tableless/remote_issue_fetch/create/_local_issue.rb +31 -0
  8. data/app/models/redmine_remotes/tableless/remote_issue_fetch/create/_remote_issue.rb +32 -0
  9. data/app/models/redmine_remotes/tableless/remote_issue_fetch/update.rb +30 -0
  10. data/app/models/redmine_remotes/tableless/remote_issue_fetch/update/_local_issue.rb +26 -0
  11. data/app/models/redmine_remotes/tableless/remote_issue_fetch/update/_provider_issue.rb +20 -0
  12. data/app/models/redmine_remotes/tableless/remote_issue_fetch/update/_remote_issue.rb +19 -0
  13. data/app/models/remote_issue.rb +1 -0
  14. data/app/models/remote_tracker.rb +1 -2
  15. data/app/models/remote_tracker/jira.rb +13 -0
  16. data/lib/redmine_remotes/jira/entities/issue.rb +4 -2
  17. data/lib/redmine_remotes/rest_provider/instance.rb +5 -30
  18. data/lib/redmine_remotes/version.rb +1 -1
  19. data/lib/tasks/redmine_remotes.rake +1 -1
  20. metadata +32 -7
  21. data/app/models/redmine_remotes/tableless/add_remote_issue.rb +0 -65
  22. data/app/models/redmine_remotes/tableless/add_remote_issue/_local_issue.rb +0 -57
  23. data/app/models/redmine_remotes/tableless/add_remote_issue/_provider_issue.rb +0 -19
  24. data/app/models/redmine_remotes/tableless/add_remote_issue/_remote_issue.rb +0 -27
  25. data/app/models/remote_tracker/_jira.rb +0 -11
  26. 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: 343286f5fb54a04c33b59308664f1fb19d5960ab77f19c80aa9c2a8b3da94e85
4
- data.tar.gz: 78a45e88394bac180ff0de242d6f17e880e484d392a53fcac3a4838bb80f974f
3
+ metadata.gz: 42af9429138fa8a7103fc657a191d650230968969c88bef3e04d1e2b36e368e4
4
+ data.tar.gz: d3576ad7482261ab795fdf99f8cc6509e39fc0dd8bb8cf1668f06b66475e198d
5
5
  SHA512:
6
- metadata.gz: 379381cf398f91adca7b21799ec5241a2eec84c8fce062669cc807ffe0ffd9a9d3d16b2116f5c1df645d6889fa16a3d5c09fee8cd7ddb5fd282a413456a5bf2d
7
- data.tar.gz: 334e5e633e085a2324b974801ca79a64c9ce7778fcc7a5f31f9387e8a3923136e39d6060305ff3974001ef625a14db8e7b6f8f0f44d51792f8f5d2841075a8b1
6
+ metadata.gz: 82a1a63732ae40837ab40697d0d7bf2fa0355bc458dc8bd38867f4846dcfabc23a6e8fff562d6c48d4aac3b14609c8f1b803c2eb1487e4b5bf016011f15350b5
7
+ data.tar.gz: e48108913a5d3296db90d7c6a9dcfb5c89539e12c84736ef69abb62b0484b3f6f5d5ee8ee800e4a39cef5c1ef52c4705198dc41bbabac3700d196edc47865e21
@@ -25,7 +25,7 @@ class ProjectRemoteIssuesController < ApplicationController
25
25
  private
26
26
 
27
27
  def model_class
28
- ::RedmineRemotes::Tableless::AddRemoteIssue
28
+ ::RedmineRemotes::Tableless::RemoteIssueFetch::Create
29
29
  end
30
30
 
31
31
  def context_params
@@ -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
@@ -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 < ::RedmineRemotes::RestProvider::Entity
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('reporter').fetch('key')
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(curl_perform(service_url_suffix).body_or_raise)
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(service_url_suffix)
42
- c = ::Curl::Easy.new(build_service_url(service_url_suffix))
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
@@ -3,7 +3,7 @@
3
3
  module RedmineRemotes
4
4
  SLUG = 'redmine_remotes'
5
5
  NAME = 'Redmine Remotes'
6
- VERSION = '0.5.1'
6
+ VERSION = '0.6.0'
7
7
  AUTHOR = 'Eduardo Henrique Bogoni'
8
8
  SUMMARY = 'Integração do Redmine com trackers diversos.'
9
9
  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::AddRemoteIssue.new(
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.5.1
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/add_remote_issue.rb
113
- - app/models/redmine_remotes/tableless/add_remote_issue/_local_issue.rb
114
- - app/models/redmine_remotes/tableless/add_remote_issue/_provider_issue.rb
115
- - app/models/redmine_remotes/tableless/add_remote_issue/_remote_issue.rb
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/_jira.rb
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