redmine_remotes 0.16.0 → 0.16.1

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/create.rb +1 -1
  3. data/app/controllers/project_remote_issues_controller/update.rb +1 -1
  4. data/app/tableless_models/redmine_remotes/issue_fetch/base/local_issue.rb +82 -0
  5. data/app/tableless_models/redmine_remotes/issue_fetch/base/provider_issue.rb +22 -0
  6. data/app/tableless_models/redmine_remotes/issue_fetch/base/remote_issue.rb +23 -0
  7. data/app/tableless_models/redmine_remotes/issue_fetch/base.rb +47 -0
  8. data/app/tableless_models/redmine_remotes/issue_fetch/create/local_issue.rb +25 -0
  9. data/app/tableless_models/redmine_remotes/issue_fetch/create/remote_issue.rb +25 -0
  10. data/app/tableless_models/redmine_remotes/issue_fetch/create.rb +46 -0
  11. data/app/tableless_models/redmine_remotes/issue_fetch/update/local_issue.rb +19 -0
  12. data/app/tableless_models/redmine_remotes/issue_fetch/update/remote_issue.rb +19 -0
  13. data/app/tableless_models/redmine_remotes/issue_fetch/update.rb +20 -0
  14. data/lib/redmine_remotes/jobs/fetch_issues.rb +1 -1
  15. data/lib/redmine_remotes/version.rb +1 -1
  16. metadata +12 -12
  17. data/app/models/remote_issue_fetch/base/_local_issue.rb +0 -77
  18. data/app/models/remote_issue_fetch/base/_provider_issue.rb +0 -18
  19. data/app/models/remote_issue_fetch/base/_remote_issue.rb +0 -19
  20. data/app/models/remote_issue_fetch/base.rb +0 -45
  21. data/app/models/remote_issue_fetch/create/_local_issue.rb +0 -21
  22. data/app/models/remote_issue_fetch/create/_remote_issue.rb +0 -21
  23. data/app/models/remote_issue_fetch/create.rb +0 -44
  24. data/app/models/remote_issue_fetch/update/_local_issue.rb +0 -15
  25. data/app/models/remote_issue_fetch/update/_remote_issue.rb +0 -15
  26. data/app/models/remote_issue_fetch/update.rb +0 -18
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f974e7b689f90b6250957c0a0356f22fa78fbd9e84705a18abbd5667df745da0
4
- data.tar.gz: eb073a99fd7ee11795b341d132f943e820f78103928baa66983ccbebef2531a2
3
+ metadata.gz: '08af38aa84220415817925bc4d43800241483e63af58ee400db473c0703e6056'
4
+ data.tar.gz: ebc18a12269acbd0a96e483b0292b44969b73f4c40cdb237dde72c82bca70c2b
5
5
  SHA512:
6
- metadata.gz: 74953344c1a68f1ce612e808341767fbdc0a4e359f145d55273cd29c7b5160da9b2fc149dc4bb1b536a1ea96d0a2ef95a0e690f4c6f0f20019a143414ee01f7c
7
- data.tar.gz: cd80adf88f456deedeb3a440626877fa7e5c50bc9d84b8a9311531459e5ad731e9e69422b7b169c306e1630eca4f97a90a126233725dbce9446738b4d751d5b1
6
+ metadata.gz: e1df465e2f09a973aaef13ee09c62ff6fbed22159d13b84b2b97fceaed35633364fb2a07f9fa7cce77f824503fa6a7d5d95e5a1a82bd213c5188a76096c74826
7
+ data.tar.gz: 390421bd835ad593c9bf28dafe09a8ffd80ed64eb27f9a6f4f5b2a3dda05ec932284c4bdddce9b5538f37499ad9b505f68fa8afcde176dd81e6f535b24f4e211
@@ -30,7 +30,7 @@ class ProjectRemoteIssuesController < ApplicationController
30
30
  end
31
31
 
32
32
  def create_model_class
33
- ::RemoteIssueFetch::Create
33
+ ::RedmineRemotes::IssueFetch::Create
34
34
  end
35
35
 
36
36
  def create_params
@@ -14,7 +14,7 @@ class ProjectRemoteIssuesController < ApplicationController
14
14
  private
15
15
 
16
16
  def update_model_class
17
- ::RemoteIssueFetch::Update
17
+ ::RedmineRemotes::IssueFetch::Update
18
18
  end
19
19
 
20
20
  def update_params
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RedmineRemotes
4
+ module IssueFetch
5
+ class Base < ::EacRailsUtils::Models::Tableless
6
+ module LocalIssue
7
+ private
8
+
9
+ DESCRIPTION_SECTION_SEPARATOR = "\n\n"
10
+
11
+ def save_local_issue
12
+ save_local_issue_except_create_on && save_local_issue_created_on
13
+ end
14
+
15
+ def save_local_issue_created_on
16
+ local_issue_provider_attributes[:created_on].if_present do |created_on|
17
+ if created_on.present? && local_issue.created_on != created_on
18
+ local_issue.update_column( # rubocop:disable Rails/SkipsModelValidations
19
+ :created_on, created_on
20
+ )
21
+ end
22
+ end
23
+
24
+ true
25
+ end
26
+
27
+ def save_local_issue_except_create_on
28
+ local_issue_provider_attributes.except(:created_on)
29
+ .each { |attr, value| local_issue.send("#{attr}=", value) }
30
+ return true if local_issue.save
31
+
32
+ fetch_record_errors(local_issue, default_column: default_error_column)
33
+ false
34
+ end
35
+
36
+ def local_issue_provider_attributes
37
+ {
38
+ subject: local_issue_subject, author: local_issue_author, status: local_issue_status,
39
+ description: local_issue_description,
40
+ created_on: provider_issue.created_on
41
+ }
42
+ end
43
+
44
+ def local_issue_subject
45
+ "[#{provider_issue.code}] #{provider_issue.subject}".truncate(100)
46
+ end
47
+
48
+ def local_issue_author_uncached
49
+ return nil if provider_issue.blank?
50
+
51
+ ::RemoteUser.find_local_user(
52
+ provider_issue.author_login,
53
+ remote_tracker,
54
+ true
55
+ )
56
+ end
57
+
58
+ def local_issue_status
59
+ remote_tracker.try(:find_local_issue_status, local_tracker, provider_issue.status_name,
60
+ true)
61
+ end
62
+
63
+ def local_issue_description
64
+ [local_issue_extra_description(:before), provider_issue.description,
65
+ local_issue_extra_description(:after), local_issue_import_footer]
66
+ .reject(&:blank?).map(&:strip).join("\n\n----\n\n") + "\n"
67
+ end
68
+
69
+ def local_issue_extra_description(position)
70
+ extra = provider_issue.try("extra_description_#{position}").if_present('')
71
+ extra = extra.map { |k, v| "* *#{k}:* #{v}" } if extra.is_a?(::Hash)
72
+ extra = extra.map { |v| "#{v}\n" }.join if extra.is_a?(::Enumerable)
73
+ extra.to_s
74
+ end
75
+
76
+ def local_issue_import_footer
77
+ "_Demanda remota importada de #{provider_issue.human_view_url}._"
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RedmineRemotes
4
+ module IssueFetch
5
+ class Base < ::EacRailsUtils::Models::Tableless
6
+ module ProviderIssue
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 ::Avmtrf1::RestProvider::Response => e
14
+ errors.add(default_error_column,
15
+ "Requisição a \"#{e.url}\" retornou com status #{e.status}")
16
+ ::Rails.logger.warn(e.body_str)
17
+ nil
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RedmineRemotes
4
+ module IssueFetch
5
+ class Base < ::EacRailsUtils::Models::Tableless
6
+ module RemoteIssue
7
+ private
8
+
9
+ def fetched_at_uncached
10
+ ::Time.zone.now
11
+ end
12
+
13
+ def save_remote_issue
14
+ remote_issue.fetched_at = fetched_at
15
+ return true if remote_issue.save
16
+
17
+ fetch_record_errors(remote_issue, default_column: default_error_column)
18
+ false
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_rails_utils/models/fetch_errors'
4
+ require 'eac_ruby_utils/core_ext'
5
+
6
+ module RedmineRemotes
7
+ module IssueFetch
8
+ class Base < ::EacRailsUtils::Models::Tableless
9
+ enable_simple_cache
10
+ require_sub __FILE__, include_modules: true
11
+ include ::EacRailsUtils::Models::FetchErrors
12
+
13
+ validates :fetched_at, presence: true
14
+ validates :local_tracker, presence: true
15
+ validates :remote_tracker, presence: true
16
+ validates :issue_remote_code, presence: true
17
+
18
+ validate :author_present
19
+ validate :provider_issue_present
20
+
21
+ def author_present
22
+ return if provider_issue.blank?
23
+ return if local_issue_author.present?
24
+
25
+ errors.add(:remote_code,
26
+ "Usuário local não encontrado para \"#{provider_issue.author_login}\"")
27
+ end
28
+
29
+ def provider_issue_present
30
+ return if issue_remote_code.blank?
31
+ return if provider_issue.present?
32
+
33
+ errors.add(:remote_code,
34
+ "Demanda remota não encontrada com o código \"#{issue_remote_code}\"")
35
+ end
36
+
37
+ def save
38
+ ::Issue.transaction do
39
+ return false unless valid?
40
+ return false unless save_local_issue
41
+ return false unless save_remote_issue
42
+ end
43
+ true
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RedmineRemotes
4
+ module IssueFetch
5
+ class Create < ::RedmineRemotes::IssueFetch::Base
6
+ module LocalIssue
7
+ private
8
+
9
+ def local_issue_provider_attributes
10
+ super.merge(
11
+ project: project, tracker: local_tracker, priority: local_issue_priority
12
+ )
13
+ end
14
+
15
+ def local_issue_uncached
16
+ remote_issue_by_remote_code.if_present(&:local_issue) || ::Issue.new
17
+ end
18
+
19
+ def local_issue_priority
20
+ ::IssuePriority.default
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RedmineRemotes
4
+ module IssueFetch
5
+ class Create < ::RedmineRemotes::IssueFetch::Base
6
+ module RemoteIssue
7
+ private
8
+
9
+ def remote_issue_uncached
10
+ remote_issue_by_remote_code.if_blank do
11
+ ::RemoteIssue.new(remote_tracker: remote_tracker, remote_code: issue_remote_code,
12
+ local_issue: local_issue)
13
+ end
14
+ end
15
+
16
+ def remote_issue_by_remote_code_uncached
17
+ ::RemoteIssue.find_by(
18
+ remote_tracker: remote_tracker,
19
+ remote_code: ::RemoteIssue.remote_code_sanitize(issue_remote_code)
20
+ )
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RedmineRemotes
4
+ module IssueFetch
5
+ class Create < ::RedmineRemotes::IssueFetch::Base
6
+ require_sub __FILE__, include_modules: true
7
+
8
+ attribute :issue_remote_code, ::String
9
+ attribute :local_tracker_id, ::Integer
10
+ attribute :project_id, ::Integer
11
+ attribute :remote_tracker_id, ::Integer
12
+
13
+ belongs_to :local_tracker, class_name: 'Tracker'
14
+ belongs_to :project, class_name: 'Project'
15
+ belongs_to :remote_tracker, class_name: 'RemoteTracker'
16
+
17
+ validates :project, presence: true
18
+
19
+ validate :tracker_in_project
20
+
21
+ def default_error_column
22
+ :issue_remote_code
23
+ end
24
+
25
+ def save
26
+ remote_issue_by_remote_code.present? ? update : super
27
+ end
28
+
29
+ def tracker_in_project
30
+ return unless local_tracker.present? && project.present?
31
+ return if project.trackers.include?(local_tracker)
32
+
33
+ errors.add(:local_tracker, 'is not a tracker of project')
34
+ end
35
+
36
+ def update
37
+ update_record = ::RedmineRemotes::IssueFetch::Update
38
+ .new(remote_issue: remote_issue_by_remote_code)
39
+ return true if update_record.save
40
+
41
+ fetch_record_errors(update_record, default_column: default_error_column)
42
+ false
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RedmineRemotes
4
+ module IssueFetch
5
+ class Update < ::RedmineRemotes::IssueFetch::Base
6
+ module LocalIssue
7
+ private
8
+
9
+ def local_issue
10
+ remote_issue.local_issue
11
+ end
12
+
13
+ def local_tracker
14
+ local_issue.if_present(&:tracker)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RedmineRemotes
4
+ module IssueFetch
5
+ class Update < ::RedmineRemotes::IssueFetch::Base
6
+ module RemoteIssue
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
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module RedmineRemotes
6
+ module IssueFetch
7
+ class Update < ::RedmineRemotes::IssueFetch::Base
8
+ require_sub __FILE__, include_modules: true
9
+
10
+ attribute :remote_issue_id, ::Integer
11
+ belongs_to :remote_issue
12
+
13
+ validates :remote_issue, presence: true
14
+
15
+ def default_error_column
16
+ :remote_issue_id
17
+ end
18
+ end
19
+ end
20
+ 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 = ::RemoteIssueFetch::Update.new(
22
+ record = ::RedmineRemotes::IssueFetch::Update.new(
23
23
  remote_issue: remote_issue
24
24
  )
25
25
  return if record.save
@@ -3,7 +3,7 @@
3
3
  module RedmineRemotes
4
4
  SLUG = 'redmine_remotes'
5
5
  NAME = 'Redmine Remotes'
6
- VERSION = '0.16.0'
6
+ VERSION = '0.16.1'
7
7
  AUTHOR = 'Eduardo Henrique Bogoni'
8
8
  SUMMARY = 'Integração do Redmine com trackers diversos.'
9
9
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redmine_remotes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.16.0
4
+ version: 0.16.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eduardo Henrique Bogoni
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-09-13 00:00:00.000000000 Z
11
+ date: 2023-03-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aranha-parsers
@@ -154,16 +154,6 @@ files:
154
154
  - app/controllers/remote_trackers_controller.rb
155
155
  - app/controllers/remote_users_controller.rb
156
156
  - app/models/remote_issue.rb
157
- - app/models/remote_issue_fetch/base.rb
158
- - app/models/remote_issue_fetch/base/_local_issue.rb
159
- - app/models/remote_issue_fetch/base/_provider_issue.rb
160
- - app/models/remote_issue_fetch/base/_remote_issue.rb
161
- - app/models/remote_issue_fetch/create.rb
162
- - app/models/remote_issue_fetch/create/_local_issue.rb
163
- - app/models/remote_issue_fetch/create/_remote_issue.rb
164
- - app/models/remote_issue_fetch/update.rb
165
- - app/models/remote_issue_fetch/update/_local_issue.rb
166
- - app/models/remote_issue_fetch/update/_remote_issue.rb
167
157
  - app/models/remote_issue_status.rb
168
158
  - app/models/remote_tracker.rb
169
159
  - app/models/remote_tracker/find_issue_local_status.rb
@@ -175,6 +165,16 @@ files:
175
165
  - app/models/remote_tracker_setting.rb
176
166
  - app/models/remote_user.rb
177
167
  - app/models/remote_user/find_local_user.rb
168
+ - app/tableless_models/redmine_remotes/issue_fetch/base.rb
169
+ - app/tableless_models/redmine_remotes/issue_fetch/base/local_issue.rb
170
+ - app/tableless_models/redmine_remotes/issue_fetch/base/provider_issue.rb
171
+ - app/tableless_models/redmine_remotes/issue_fetch/base/remote_issue.rb
172
+ - app/tableless_models/redmine_remotes/issue_fetch/create.rb
173
+ - app/tableless_models/redmine_remotes/issue_fetch/create/local_issue.rb
174
+ - app/tableless_models/redmine_remotes/issue_fetch/create/remote_issue.rb
175
+ - app/tableless_models/redmine_remotes/issue_fetch/update.rb
176
+ - app/tableless_models/redmine_remotes/issue_fetch/update/local_issue.rb
177
+ - app/tableless_models/redmine_remotes/issue_fetch/update/remote_issue.rb
178
178
  - app/views/project_remote_issues/_issues.html.erb
179
179
  - app/views/project_remote_issues/_trackers.html.erb
180
180
  - app/views/project_remote_issues/index.html.erb
@@ -1,77 +0,0 @@
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
@@ -1,18 +0,0 @@
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
@@ -1,19 +0,0 @@
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
@@ -1,45 +0,0 @@
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
@@ -1,21 +0,0 @@
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
@@ -1,21 +0,0 @@
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
@@ -1,44 +0,0 @@
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
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RemoteIssueFetch
4
- class Update < ::RemoteIssueFetch::Base
5
- private
6
-
7
- def local_issue
8
- remote_issue.local_issue
9
- end
10
-
11
- def local_tracker
12
- local_issue.if_present(&:tracker)
13
- end
14
- end
15
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RemoteIssueFetch
4
- class Update < ::RemoteIssueFetch::Base
5
- private
6
-
7
- def issue_remote_code
8
- remote_issue.remote_code
9
- end
10
-
11
- def remote_tracker
12
- remote_issue.remote_tracker
13
- end
14
- end
15
- end
@@ -1,18 +0,0 @@
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