avmtrf1-tools 0.5.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2d8d6c82baf32fce3a7b2cd8e524019d91de52e3d7df1396e8e7e5017177310d
4
- data.tar.gz: 2816f7f03a19c4b87c076beda3ef0ba9330799a9e0ce2a2589a2ea773457594a
3
+ metadata.gz: '087a54a4caf473fa94935484dad0a43c184c15789ba50177e8c0613a581cf78f'
4
+ data.tar.gz: 9694989db13cf4858b41dc451b27c028ab9bee39439926775f956693fb248a10
5
5
  SHA512:
6
- metadata.gz: 54b6265302b285dfb26724fad9ba7243e2838437ad95dc59e27290df16deb7b04db47414c110d704ff58892026d674d272108bf4e4524852369097f2eddfd08c
7
- data.tar.gz: 7a041075a270a408e89bce071c2af63b3c374ba759d16be55b8529b5da080631ea7ddfa48bc51993cbb5fa24da38aebb9c67c634977821d450d60f3ebf9fceb7
6
+ metadata.gz: 8d3911fda72f48d6bea4b636983907c843ee1bf20572fc5125981559ba2dce197cbabb76e3ea5cecdfbe10400656daf6adb334ec0cd80007637ce00017d0f177
7
+ data.tar.gz: cd1b31974108d9cae30b962b4fd6d078703900e7e40c6f1c50550a36673d82e3925c9557c7162bcf3f264a4a4fdd682157d208572de300be0490be478c20c326
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avmtrf1/esosti/session'
4
+ require 'avmtrf1/ad_user'
5
+
6
+ module Avmtrf1
7
+ class << self
8
+ def default_esosti
9
+ @default_esosti ||= ::Avmtrf1::Esosti::Session.new(
10
+ 'https://esosti.trf1.jus.br',
11
+ ::Avmtrf1.ad_user.username,
12
+ ::Avmtrf1.ad_user.password,
13
+ ::Avmtrf1.ad_user.domain.upcase
14
+ )
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avmtrf1/ad_user'
4
+ require 'avmtrf1/redmine/instance'
5
+
6
+ module Avmtrf1
7
+ class << self
8
+ def default_redmine
9
+ @default_redmine ||= ::Avmtrf1::Redmine::Instance.new(
10
+ 'http://redmine.trf1.gov.br',
11
+ ::Avmtrf1.ad_user.username,
12
+ ::Avmtrf1.ad_user.password
13
+ )
14
+ end
15
+ end
16
+ end
@@ -50,9 +50,9 @@ module Avmtrf1
50
50
  return nil if issue.present?
51
51
 
52
52
  if tag_ref.present?
53
- ::Avmtrf1::Result.ok('demanda não encontrada e Git fechado')
53
+ ::Avmtrf1::Result.neutral('demanda não encontrada e Git fechado')
54
54
  else
55
- ::Avmtrf1::Result.error('demanda não encontrada e Git aberto')
55
+ ::Avmtrf1::Result.neutral('demanda não encontrada e Git aberto')
56
56
  end
57
57
  end
58
58
 
@@ -71,13 +71,13 @@ module Avmtrf1
71
71
  def issue_open_git_open_check
72
72
  return nil unless !issue.closed? && !git_closed?
73
73
 
74
- ::Avmtrf1::Result.ok('demanda aberta e Git aberto')
74
+ ::Avmtrf1::Result.success('demanda aberta e Git aberto')
75
75
  end
76
76
 
77
77
  def issue_closed_git_closed_check
78
78
  return nil unless issue.closed? && git_closed?
79
79
 
80
- ::Avmtrf1::Result.ok('demanda fechada e Git fechado')
80
+ ::Avmtrf1::Result.success('demanda fechada e Git fechado')
81
81
  end
82
82
 
83
83
  def git_closed?
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'avmtrf1/default_jira'
4
+ require 'avmtrf1/default_redmine'
4
5
 
5
6
  module AvmTrf1
6
7
  class IssueFactory
@@ -14,7 +15,7 @@ module AvmTrf1
14
15
  end
15
16
 
16
17
  def factories
17
- [::Avmtrf1.default_jira]
18
+ [::Avmtrf1.default_jira, ::Avmtrf1.default_redmine]
18
19
  end
19
20
  end
20
21
  end
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'avmtrf1/jira/entities/base'
3
+ require 'avmtrf1/rest_provider/entity'
4
4
 
5
5
  module Avmtrf1
6
6
  module Jira
7
7
  module Entities
8
- class Issue < ::Avmtrf1::Jira::Entities::Base
8
+ class Issue < ::Avmtrf1::RestProvider::Entity
9
9
  CATEGORY_CLOSED_STATUSES = %w[Pendências Concluído].freeze
10
10
  CATEGORY_OPEN_STATUSES = ['Em andamento'].freeze
11
11
 
@@ -3,7 +3,6 @@
3
3
  module Avmtrf1
4
4
  module Jira
5
5
  module Entities
6
- require 'avmtrf1/jira/entities/base'
7
6
  require 'avmtrf1/jira/entities/issue'
8
7
  end
9
8
  end
@@ -1,56 +1,28 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'curb'
4
- require 'json'
3
+ require 'avmtrf1/rest_provider/instance'
5
4
 
6
5
  module Avmtrf1
7
6
  module Jira
8
- class Instance
7
+ class Instance < ::Avmtrf1::RestProvider::Instance
9
8
  ISSUE_ID_PATTERN = /\A([a-z][a-z0-9]+)\-(\d+)\z/i.freeze
10
9
 
11
10
  class << self
12
- def parse_issue_id(issue_id)
13
- m = ISSUE_ID_PATTERN.match(issue_id)
11
+ def parse_issue_id(global_issue_id)
12
+ m = ISSUE_ID_PATTERN.match(global_issue_id)
14
13
  return nil unless m
15
14
 
16
- ::OpenStruct.new(project_id: m[1], project_issue_id: m[2])
15
+ ::OpenStruct.new(provider_issue_id: m[0], project_id: m[1], project_issue_id: m[2])
17
16
  end
18
17
  end
19
18
 
20
- attr_reader :root_url, :username
21
-
22
- def initialize(root_url, username, password)
23
- @root_url = root_url
24
- @username = username
25
- @password = password
26
- end
27
-
28
- def find_issue(issue_id)
29
- parsed = self.class.parse_issue_id(issue_id)
30
- parsed.present? ? issue(issue_id) : nil
31
- end
32
-
33
- def issue(issue_id)
34
- ::Avmtrf1::Jira::Entities::Issue.new(self, request("/issue/#{issue_id}"))
35
- end
36
-
37
- def request(service_url_suffix)
38
- c = ::Curl::Easy.new(build_service_url(service_url_suffix))
39
- c.http_auth_types = :basic
40
- c.username = username
41
- c.password = password
42
- raise 'Curl failed' unless c.perform
43
-
44
- JSON.parse(c.body_str)
45
- end
46
-
47
- private
48
-
49
- attr_reader :password
50
-
51
19
  def build_service_url(service_url_suffix)
52
20
  "#{root_url}/rest/api/latest#{service_url_suffix}"
53
21
  end
22
+
23
+ def issue_get_url_suffix(provider_issue_id)
24
+ "/issue/#{provider_issue_id}"
25
+ end
54
26
  end
55
27
  end
56
28
  end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avmtrf1/rest_provider/entity'
4
+
5
+ module Avmtrf1
6
+ module Redmine
7
+ module Entities
8
+ class Issue < ::Avmtrf1::RestProvider::Entity
9
+ def closed?
10
+ status.closed?
11
+ end
12
+
13
+ def data
14
+ super.fetch('issue')
15
+ end
16
+
17
+ def status
18
+ @status ||= instance.issue_status(status_id)
19
+ end
20
+
21
+ def status_name
22
+ data.fetch('status').fetch('name')
23
+ end
24
+
25
+ def status_id
26
+ data.fetch('status').fetch('id')
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avmtrf1/rest_provider/entity'
4
+
5
+ module Avmtrf1
6
+ module Redmine
7
+ module Entities
8
+ class IssueStatus < ::Avmtrf1::RestProvider::Entity
9
+ def id
10
+ data.fetch('id')
11
+ end
12
+
13
+ def name
14
+ data.fetch('name')
15
+ end
16
+
17
+ def closed?
18
+ data.fetch('is_closed')
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avmtrf1
4
+ module Redmine
5
+ module Entities
6
+ require 'avmtrf1/redmine/entities/issue'
7
+ require 'avmtrf1/redmine/entities/issue_status'
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avmtrf1/redmine/entities/issue'
4
+ require 'avmtrf1/redmine/entities/issue_status'
5
+ require 'avmtrf1/rest_provider/instance'
6
+
7
+ module Avmtrf1
8
+ module Redmine
9
+ class Instance < ::Avmtrf1::RestProvider::Instance
10
+ ISSUE_ID_PATTERN = /\Aredmine_(\d+)\z/i.freeze
11
+
12
+ class << self
13
+ def parse_issue_id(issue_id)
14
+ m = ISSUE_ID_PATTERN.match(issue_id)
15
+ m ? ::OpenStruct.new(provider_issue_id: m[1]) : nil
16
+ end
17
+ end
18
+
19
+ def build_service_url(service_url_suffix)
20
+ "#{root_url}#{service_url_suffix}.json"
21
+ end
22
+
23
+ def issue_get_url_suffix(provider_issue_id)
24
+ "/issues/#{provider_issue_id}"
25
+ end
26
+
27
+ def issue_status(issue_status_id)
28
+ issue_statuses.find { |issue_status| issue_status.id == issue_status_id }
29
+ end
30
+
31
+ private
32
+
33
+ def issue_statuses
34
+ request('/issue_statuses').fetch('issue_statuses').map do |data|
35
+ ::Avmtrf1::Redmine::Entities::IssueStatus.new(self, data)
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avmtrf1
4
+ module Redmine
5
+ require 'avmtrf1/redmine/entities'
6
+ end
7
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/simple_cache'
4
+
5
+ module Avmtrf1
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
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'curb'
4
+ require 'json'
5
+ require 'avmtrf1/jira/entities/issue'
6
+
7
+ module Avmtrf1
8
+ module RestProvider
9
+ # Abstract methods
10
+ # * parse_issue_id(global_issue_id)
11
+ # * self.build_service_url(service_url_suffix)
12
+ # * self.issue_get_url_suffix(provider_issue_id)
13
+ class Instance
14
+ attr_reader :root_url, :username, :password
15
+
16
+ def initialize(root_url, username, password)
17
+ @root_url = root_url
18
+ @username = username
19
+ @password = password
20
+ end
21
+
22
+ def find_issue(global_issue_id)
23
+ parsed = self.class.parse_issue_id(global_issue_id)
24
+ parsed.present? ? issue(parsed.provider_issue_id) : nil
25
+ end
26
+
27
+ def issue(provider_issue_id)
28
+ issue_class.new(self, request(issue_get_url_suffix(provider_issue_id)))
29
+ end
30
+
31
+ def request(service_url_suffix)
32
+ c = ::Curl::Easy.new(build_service_url(service_url_suffix))
33
+ c.http_auth_types = :basic
34
+ c.username = username
35
+ c.password = password
36
+ raise 'Curl failed' unless c.perform
37
+
38
+ JSON.parse(c.body_str)
39
+ end
40
+
41
+ def issue_class
42
+ "#{self.class.name.deconstantize}::Entities::Issue".constantize
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avmtrf1
4
+ module RestProvider
5
+ require 'avmtrf1/rest_provider/instance'
6
+ end
7
+ end
@@ -1,32 +1,44 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'colorize'
4
+ require 'eac_ruby_utils/listable'
4
5
 
5
6
  module Avmtrf1
6
7
  class Result
7
- class << self
8
- def ok(output)
9
- new(true, output)
10
- end
11
-
12
- def error(output)
13
- new(false, output)
14
- end
8
+ include ::EacRubyUtils::Listable
9
+
10
+ lists.add_string :type, :success, :error, :neutral
11
+
12
+ lists.type.values.each do |type|
13
+ class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
14
+ def self.#{type}(output)
15
+ new(TYPE_#{type.upcase}, output)
16
+ end
17
+ RUBY_EVAL
15
18
  end
16
19
 
17
- attr_reader :output
20
+ TYPE_SUCCESS_COLOR = 'green'
21
+ TYPE_ERROR_COLOR = 'red'
22
+ TYPE_NEUTRAL_COLOR = 'white'
18
23
 
19
- def initialize(is_ok, output)
20
- @ok = is_ok
24
+ attr_reader :type, :output
25
+
26
+ def initialize(type, output)
27
+ validate_type(type)
28
+ @type = type
21
29
  @output = output
22
30
  end
23
31
 
24
- def ok?
25
- @ok ? true : false
32
+ def label
33
+ output.send(self.class.const_get("type_#{type}_color".upcase))
26
34
  end
27
35
 
28
- def label
29
- ok? ? output.green : output.red
36
+ private
37
+
38
+ def validate_type(type)
39
+ return if self.class.lists.type.values.include?(type)
40
+
41
+ raise "Tipo desconhecido: \"#{type}\" (Válido: #{self.class.lists.type.values.join(', ')})"
30
42
  end
31
43
  end
32
44
  end
@@ -23,7 +23,6 @@ module Avmtrf1
23
23
 
24
24
  Options:
25
25
  -h --help Mostra esta ajuda.
26
- -H --headless Não mostra a interface gráfica do navegador web.
27
26
  DOCOPT
28
27
 
29
28
  def run
@@ -38,7 +37,7 @@ module Avmtrf1
38
37
  end
39
38
 
40
39
  def session_uncached
41
- ::Avmtrf1::CheckPoint::Session.by_default_ad_user(headless: options.fetch('--headless'))
40
+ ::Avmtrf1::CheckPoint::Session.by_default_ad_user
42
41
  end
43
42
  end
44
43
  end
@@ -48,12 +48,7 @@ module Avmtrf1
48
48
  end
49
49
 
50
50
  def session_uncached
51
- ::Avmtrf1::Esosti::Session.new(
52
- 'https://esosti.trf1.jus.br',
53
- ENV.fetch('ESOSTI_USER'),
54
- ENV.fetch('ESOSTI_PASSWORD'),
55
- ENV.fetch('ESOSTI_UF')
56
- )
51
+ ::Avmtrf1.default_esosti
57
52
  end
58
53
  end
59
54
  end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'aranha/selenium/driver_factory/base'
3
4
  require 'eac_ruby_utils/console/docopt_runner'
4
5
  require 'avmtrf1/tools/runner/check_point'
5
6
  require 'avmtrf1/tools/runner/esosti'
@@ -18,8 +19,14 @@ module Avmtrf1
18
19
  __PROGRAM__ -h | --help
19
20
 
20
21
  Options:
21
- -h --help Show this screen.
22
+ -h --help Show this screen.
23
+ -H --headless Quando usando Selenium não mostra a interface gráfica do navegador web.
22
24
  DOCOPT
25
+
26
+ def run
27
+ ::Aranha::Selenium::DriverFactory::Base.default_headless = options.fetch('--headless')
28
+ run_with_subcommand
29
+ end
23
30
  end
24
31
  end
25
32
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Avmtrf1
4
4
  module Tools
5
- VERSION = '0.5.0'
5
+ VERSION = '0.7.0'
6
6
  end
7
7
  end
data/lib/avmtrf1.rb CHANGED
@@ -4,7 +4,9 @@ module Avmtrf1
4
4
  require 'avmtrf1/active_directory'
5
5
  require 'avmtrf1/ad_user'
6
6
  require 'avmtrf1/configs'
7
+ require 'avmtrf1/default_esosti'
7
8
  require 'avmtrf1/default_jira'
9
+ require 'avmtrf1/default_redmine'
8
10
  require 'avmtrf1/git'
9
11
  require 'avmtrf1/ini'
10
12
  require 'avmtrf1/issues'
@@ -12,6 +14,8 @@ module Avmtrf1
12
14
  require 'avmtrf1/oracle'
13
15
  require 'avmtrf1/patches'
14
16
  require 'avmtrf1/red'
17
+ require 'avmtrf1/redmine'
18
+ require 'avmtrf1/rest_provider'
15
19
  require 'avmtrf1/result'
16
20
  require 'avmtrf1/tools'
17
21
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: avmtrf1-tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eduardo H. Bogoni
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-08-13 00:00:00.000000000 Z
11
+ date: 2019-08-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aranha
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.9.0
19
+ version: 0.10.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.9.0
26
+ version: 0.10.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: curb
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -173,7 +173,9 @@ files:
173
173
  - lib/avmtrf1/check_point/session.rb
174
174
  - lib/avmtrf1/check_point/session/login.rb
175
175
  - lib/avmtrf1/configs.rb
176
+ - lib/avmtrf1/default_esosti.rb
176
177
  - lib/avmtrf1/default_jira.rb
178
+ - lib/avmtrf1/default_redmine.rb
177
179
  - lib/avmtrf1/esosti/parsers/solicitacao/main.rb
178
180
  - lib/avmtrf1/esosti/session.rb
179
181
  - lib/avmtrf1/esosti/session/action_base.rb
@@ -191,7 +193,6 @@ files:
191
193
  - lib/avmtrf1/issues/factory.rb
192
194
  - lib/avmtrf1/jira.rb
193
195
  - lib/avmtrf1/jira/entities.rb
194
- - lib/avmtrf1/jira/entities/base.rb
195
196
  - lib/avmtrf1/jira/entities/issue.rb
196
197
  - lib/avmtrf1/jira/instance.rb
197
198
  - lib/avmtrf1/oracle.rb
@@ -207,6 +208,14 @@ files:
207
208
  - lib/avmtrf1/red/profile.rb
208
209
  - lib/avmtrf1/red/profile/put_file.xml.erb
209
210
  - lib/avmtrf1/red/server.rb
211
+ - lib/avmtrf1/redmine.rb
212
+ - lib/avmtrf1/redmine/entities.rb
213
+ - lib/avmtrf1/redmine/entities/issue.rb
214
+ - lib/avmtrf1/redmine/entities/issue_status.rb
215
+ - lib/avmtrf1/redmine/instance.rb
216
+ - lib/avmtrf1/rest_provider.rb
217
+ - lib/avmtrf1/rest_provider/entity.rb
218
+ - lib/avmtrf1/rest_provider/instance.rb
210
219
  - lib/avmtrf1/result.rb
211
220
  - lib/avmtrf1/tools.rb
212
221
  - lib/avmtrf1/tools/runner.rb
@@ -1,20 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/simple_cache'
4
-
5
- module Avmtrf1
6
- module Jira
7
- module Entities
8
- class Base
9
- include ::EacRubyUtils::SimpleCache
10
-
11
- attr_reader :instance, :data
12
-
13
- def initialize(instance, data)
14
- @instance = instance
15
- @data = data
16
- end
17
- end
18
- end
19
- end
20
- end