redmine_remotes 0.15.5 → 0.16.1

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.
Files changed (30) 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/controllers/remote_issue_statuses_controller.rb +14 -1
  5. data/app/models/remote_issue_status.rb +6 -0
  6. data/app/tableless_models/redmine_remotes/issue_fetch/base/local_issue.rb +82 -0
  7. data/app/tableless_models/redmine_remotes/issue_fetch/base/provider_issue.rb +22 -0
  8. data/app/tableless_models/redmine_remotes/issue_fetch/base/remote_issue.rb +23 -0
  9. data/app/tableless_models/redmine_remotes/issue_fetch/base.rb +47 -0
  10. data/app/tableless_models/redmine_remotes/issue_fetch/create/local_issue.rb +25 -0
  11. data/app/tableless_models/redmine_remotes/issue_fetch/create/remote_issue.rb +25 -0
  12. data/app/tableless_models/redmine_remotes/issue_fetch/create.rb +46 -0
  13. data/app/tableless_models/redmine_remotes/issue_fetch/update/local_issue.rb +19 -0
  14. data/app/tableless_models/redmine_remotes/issue_fetch/update/remote_issue.rb +19 -0
  15. data/app/tableless_models/redmine_remotes/issue_fetch/update.rb +20 -0
  16. data/config/locales/en.yml +7 -0
  17. data/config/locales/pt-BR.yml +8 -1
  18. data/lib/redmine_remotes/jobs/fetch_issues.rb +1 -1
  19. data/lib/redmine_remotes/version.rb +1 -1
  20. metadata +12 -12
  21. data/app/models/remote_issue_fetch/base/_local_issue.rb +0 -77
  22. data/app/models/remote_issue_fetch/base/_provider_issue.rb +0 -18
  23. data/app/models/remote_issue_fetch/base/_remote_issue.rb +0 -19
  24. data/app/models/remote_issue_fetch/base.rb +0 -45
  25. data/app/models/remote_issue_fetch/create/_local_issue.rb +0 -21
  26. data/app/models/remote_issue_fetch/create/_remote_issue.rb +0 -21
  27. data/app/models/remote_issue_fetch/create.rb +0 -44
  28. data/app/models/remote_issue_fetch/update/_local_issue.rb +0 -15
  29. data/app/models/remote_issue_fetch/update/_remote_issue.rb +0 -15
  30. 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: 67c1e068d64cc326ac7e91e6671c1119e9eba78e7b4f6e94fa24b668087fc8ae
4
- data.tar.gz: 6fed8dde840f7671c78dd7d407e0246eaf6c87b431dca3d930074597e7ae1842
3
+ metadata.gz: '08af38aa84220415817925bc4d43800241483e63af58ee400db473c0703e6056'
4
+ data.tar.gz: ebc18a12269acbd0a96e483b0292b44969b73f4c40cdb237dde72c82bca70c2b
5
5
  SHA512:
6
- metadata.gz: e3e6bb227b50856865c4c563c74be4994746d11e8b6248a483e6105e1b34f1957398a744c1309f83b090fef58548bb38fc42956cf76a65e9713f25b99521c23a
7
- data.tar.gz: d61bd4b29a09a82277a6299999068724fd1b870f1d074e6ddd33f31830ae15e851fe5f94d064e8e74471ce10a1c955f4930b4d9dece81b0f59f300e011a2457e
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
@@ -8,9 +8,22 @@ class RemoteIssueStatusesController < ApplicationController
8
8
  layout 'nonproject_modules'
9
9
  require_permission PERMISSIONS
10
10
 
11
+ SEARCH_COLUMNS = %i[remote_name local_issue_status local_tracker remote_tracker].freeze
12
+ before_action :localize_options
13
+
11
14
  active_scaffold :remote_issue_status do |conf|
12
- %i[remote_tracker local_tracker local_issue_status].each do |column|
15
+ conf.actions.swap :search, :field_search
16
+ SEARCH_COLUMNS.each do |column|
13
17
  conf.columns[column].form_ui = :select
14
18
  end
19
+ conf.field_search.columns = SEARCH_COLUMNS
20
+ end
21
+
22
+ private
23
+
24
+ def localize_options
25
+ active_scaffold_config.columns[:remote_name].options = {
26
+ options: ::RemoteIssueStatus.remote_name_options
27
+ }
15
28
  end
16
29
  end
@@ -13,4 +13,10 @@ class RemoteIssueStatus < ActiveRecord::Base
13
13
  validates :remote_tracker, presence: true
14
14
  validates :local_tracker, presence: true
15
15
  validates :local_issue_status, presence: true
16
+
17
+ class << self
18
+ def remote_name_options
19
+ all.pluck(:remote_name).map { |v| [v.upcase, v] }
20
+ end
21
+ end
16
22
  end
@@ -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
@@ -1,4 +1,9 @@
1
1
  en:
2
+ activerecord:
3
+ models:
4
+ remote_issue_status:
5
+ one: Remote issue status
6
+ other: Remote issue statuses
2
7
  eac_ruby_utils:
3
8
  listable:
4
9
  remote_tracker:
@@ -13,8 +18,10 @@ en:
13
18
  label: Alternative "description" field
14
19
  field_issue_remote_code: Remote issue's code
15
20
  field_local_issue: Local issue
21
+ field_local_issue_status: Local issue status
16
22
  field_local_tracker: Local tracker
17
23
  field_remote_code: Remote code
24
+ field_remote_name: Local issue status's name
18
25
  field_remote_tracker: Remote tracker
19
26
  label_remote_issues: Remote issues
20
27
  label_remote_trackers: Remote trackers
@@ -1,4 +1,9 @@
1
1
  pt-BR:
2
+ activerecord:
3
+ models:
4
+ remote_issue_status:
5
+ one: Situação de demanda remota
6
+ other: Situações de demandas remotas
2
7
  eac_ruby_utils:
3
8
  listable:
4
9
  remote_tracker:
@@ -13,8 +18,10 @@ pt-BR:
13
18
  label: Campo "descrição" alternativo
14
19
  field_issue_remote_code: Código da demanda remota
15
20
  field_local_issue: Demanda local
16
- field_local_tracker: Tipo de tarefa local
21
+ field_local_issue_status: Situação de demanda local
22
+ field_local_tracker: Tipo de demanda local
17
23
  field_remote_code: Código remoto
24
+ field_remote_name: Nome da situação de demanda remota
18
25
  field_remote_tracker: Tracker remoto
19
26
  label_remote_issues: Demandas remotas
20
27
  label_remote_trackers: Trackers remotos
@@ -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.15.5'
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.15.5
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-07-12 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