avmtrf1-tools 0.5.0 → 0.7.0

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