avmtrf1-tools 0.29.0 → 0.30.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 +4 -4
- data/lib/avmtrf1/esosti/instance/changed.rb +8 -5
- data/lib/avmtrf1/redmine/instance.rb +2 -1
- data/lib/avmtrf1/rest_provider/instance.rb +13 -55
- data/lib/avmtrf1/rest_provider/instance/issues.rb +30 -0
- data/lib/avmtrf1/rest_provider/request.rb +44 -0
- data/lib/avmtrf1/rest_provider/response.rb +77 -0
- data/lib/avmtrf1/tools/runner/esosti/changed.rb +6 -1
- data/lib/avmtrf1/tools/runner/esosti/fetch.rb +6 -1
- data/lib/avmtrf1/tools/runner/esosti/request.rb +88 -0
- data/lib/avmtrf1/tools/version.rb +1 -1
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b61967bd7fdee216edfc174a67a238cb5f09fd625ae19c5bc029f0e13fc319ce
|
4
|
+
data.tar.gz: 4ecf717af9a51d39bda3ef107a5536ad97a27c4839cae2ff4255f89bccffa47e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f4dcd615dec9efc8824e9307a8673a409ef411e27c41e0b52b4df8f2bf613a66425fda3c13fe7550dc5347088d83b6e097360fb033e78ee100d84ed779715aa2
|
7
|
+
data.tar.gz: 788d8843f20252d25d86e79e327f16e71f2aa9a9de370e754b65a99eb7043dbbbc2a40ba02bfc244f0287af4bd96daf579ea7849dfcc61e61966122419f9f368
|
@@ -1,19 +1,22 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'avmtrf1/esosti/raw_data_sanitizer'
|
4
|
+
require 'eac_ruby_utils/core_ext'
|
4
5
|
|
5
6
|
module Avmtrf1
|
6
7
|
module Esosti
|
7
8
|
class Instance < ::Avmtrf1::RestProvider::Instance
|
8
9
|
module Changed
|
9
10
|
def changed(since)
|
10
|
-
|
11
|
+
changed_request(since).response.body_data_or_raise
|
11
12
|
end
|
12
13
|
|
13
|
-
def
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
def changed_request(since)
|
15
|
+
request_json(changed_url_suffix(since)) do |data|
|
16
|
+
::Avmtrf1::Esosti::RawDataSanitizer.sanitize(
|
17
|
+
data.fetch('TICKETMboSet').fetch('TICKET')
|
18
|
+
).map { |ticket| ticket.fetch('Attributes').fetch('TICKETID').downcase }
|
19
|
+
end
|
17
20
|
end
|
18
21
|
|
19
22
|
def changed_url_suffix(since)
|
@@ -31,7 +31,8 @@ module Avmtrf1
|
|
31
31
|
private
|
32
32
|
|
33
33
|
def issue_statuses
|
34
|
-
|
34
|
+
request_json('/issue_statuses').response.body_data_or_raise.fetch('issue_statuses')
|
35
|
+
.map do |data|
|
35
36
|
::Avmtrf1::Redmine::Entities::IssueStatus.new(self, data)
|
36
37
|
end
|
37
38
|
end
|
@@ -1,9 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'avmtrf1/rest_provider/request'
|
3
4
|
require 'curb'
|
4
|
-
require '
|
5
|
-
require 'avmtrf1/jira/entities/issue'
|
6
|
-
require 'eac_ruby_utils/console/speaker'
|
5
|
+
require 'eac_ruby_utils/core_ext'
|
7
6
|
|
8
7
|
module Avmtrf1
|
9
8
|
module RestProvider
|
@@ -12,60 +11,19 @@ module Avmtrf1
|
|
12
11
|
# * self.build_service_url(service_url_suffix)
|
13
12
|
# * self.issue_get_url_suffix(provider_issue_id)
|
14
13
|
class Instance
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
def find_issue(global_issue_id)
|
26
|
-
parsed = self.class.parse_issue_id(global_issue_id)
|
27
|
-
parsed.present? ? issue(parsed.provider_issue_id) : nil
|
28
|
-
end
|
29
|
-
|
30
|
-
def issue(provider_issue_id)
|
31
|
-
data = request(issue_get_url_suffix(provider_issue_id))
|
32
|
-
data = issue_class.parse_data(data) if issue_class.respond_to?(:parse_data)
|
33
|
-
data.present? ? issue_class.new(self, data) : nil
|
34
|
-
end
|
35
|
-
|
36
|
-
def request(service_url_suffix)
|
37
|
-
url = build_service_url(service_url_suffix)
|
38
|
-
infov 'URL', url
|
39
|
-
c = ::Curl::Easy.new(url)
|
40
|
-
c.http_auth_types = :basic
|
41
|
-
c.username = username
|
42
|
-
c.password = password
|
43
|
-
c.headers['Accept'] = 'application/json'
|
44
|
-
curl_perform(c)
|
45
|
-
end
|
46
|
-
|
47
|
-
def issue_class
|
48
|
-
"#{self.class.name.deconstantize}::Entities::Issue".constantize
|
49
|
-
end
|
50
|
-
|
51
|
-
private
|
52
|
-
|
53
|
-
def curl_perform(curl)
|
54
|
-
raise 'Curl failed' unless curl.perform
|
55
|
-
|
56
|
-
infov 'Return status', curl.status
|
57
|
-
return JSON.parse(curl.body_str) if curl.status.to_i == 200
|
58
|
-
|
59
|
-
raise curl_raise_message(curl)
|
14
|
+
require_sub __FILE__, include_modules: true
|
15
|
+
common_constructor :root_url, :username, :password
|
16
|
+
|
17
|
+
def request(service_url_suffix, headers = {}, &body_data_proc)
|
18
|
+
r = Avmtrf1::RestProvider::Request.new(build_service_url(service_url_suffix),
|
19
|
+
body_data_proc)
|
20
|
+
headers.each { |name, value| r.header(name, value) }
|
21
|
+
r.autenticate(username, password)
|
22
|
+
r
|
60
23
|
end
|
61
24
|
|
62
|
-
def
|
63
|
-
|
64
|
-
"#{curl.url} returned #{curl.status.to_i}:
|
65
|
-
#{'=' * 10}
|
66
|
-
#{curl.body_str}
|
67
|
-
#{'=' * 10}"
|
68
|
-
MESSAGE
|
25
|
+
def request_json(service_url_suffix, headers = {}, &body_data_proc)
|
26
|
+
request(service_url_suffix, headers.merge('Accept' => 'application/json'), &body_data_proc)
|
69
27
|
end
|
70
28
|
end
|
71
29
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Avmtrf1
|
4
|
+
module RestProvider
|
5
|
+
class Instance
|
6
|
+
module Issues
|
7
|
+
def find_issue(global_issue_id)
|
8
|
+
parsed = self.class.parse_issue_id(global_issue_id)
|
9
|
+
parsed.present? ? issue(parsed.provider_issue_id) : nil
|
10
|
+
end
|
11
|
+
|
12
|
+
def issue(provider_issue_id)
|
13
|
+
issue_request(provider_issue_id).response.body_data_or_raise
|
14
|
+
end
|
15
|
+
|
16
|
+
# @return [Avmtrf1::RestProvider::Request]
|
17
|
+
def issue_request(provider_issue_id)
|
18
|
+
request_json(issue_get_url_suffix(provider_issue_id)) do |data|
|
19
|
+
data = issue_class.parse_data(data) if issue_class.respond_to?(:parse_data)
|
20
|
+
data.present? ? issue_class.new(self, data) : nil
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def issue_class
|
25
|
+
"#{self.class.name.deconstantize}::Entities::Issue".constantize
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'avmtrf1/rest_provider/response'
|
4
|
+
require 'eac_ruby_utils/core_ext'
|
5
|
+
require 'ostruct'
|
6
|
+
|
7
|
+
module Avmtrf1
|
8
|
+
module RestProvider
|
9
|
+
class Request
|
10
|
+
common_constructor :url, :body_data_proc, default: [nil]
|
11
|
+
|
12
|
+
def autenticate(username, password)
|
13
|
+
self.auth = ::OpenStruct.new(username: username, password: password)
|
14
|
+
end
|
15
|
+
|
16
|
+
def header(name, value)
|
17
|
+
headers[name.to_s] = value
|
18
|
+
end
|
19
|
+
|
20
|
+
def response
|
21
|
+
::Avmtrf1::RestProvider::Response.new(build_curl, body_data_proc)
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
attr_accessor :auth
|
27
|
+
|
28
|
+
def build_curl
|
29
|
+
r = ::Curl::Easy.new(url)
|
30
|
+
auth.if_present do |a|
|
31
|
+
r.http_auth_types = :basic
|
32
|
+
r.username = a.username
|
33
|
+
r.password = a.password
|
34
|
+
end
|
35
|
+
r.headers.merge!(headers)
|
36
|
+
r
|
37
|
+
end
|
38
|
+
|
39
|
+
def headers
|
40
|
+
@headers ||= {}
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_support/core_ext/hash/conversions'
|
4
|
+
require 'eac_ruby_utils/core_ext'
|
5
|
+
require 'json'
|
6
|
+
|
7
|
+
module Avmtrf1
|
8
|
+
module RestProvider
|
9
|
+
class Response < ::StandardError
|
10
|
+
common_constructor :curl, :body_data_proc
|
11
|
+
|
12
|
+
def body_data
|
13
|
+
r = performed_curl.headers['Accept'].if_present(body_str) do |v|
|
14
|
+
send("body_data_from_#{v.parameterize.underscore}")
|
15
|
+
end
|
16
|
+
r = body_data_proc.call(r) if body_data_proc.present?
|
17
|
+
r
|
18
|
+
end
|
19
|
+
|
20
|
+
def body_data_or_raise
|
21
|
+
raise_unless_200
|
22
|
+
|
23
|
+
body_data
|
24
|
+
end
|
25
|
+
|
26
|
+
def body_str
|
27
|
+
performed_curl.body_str
|
28
|
+
end
|
29
|
+
|
30
|
+
def body_str_or_raise
|
31
|
+
raise_unless_200
|
32
|
+
|
33
|
+
body_str
|
34
|
+
end
|
35
|
+
|
36
|
+
def raise_unless_200
|
37
|
+
return nil if status == 200
|
38
|
+
|
39
|
+
raise self
|
40
|
+
end
|
41
|
+
|
42
|
+
def status
|
43
|
+
performed_curl.status.to_i
|
44
|
+
end
|
45
|
+
|
46
|
+
def url
|
47
|
+
curl.url
|
48
|
+
end
|
49
|
+
|
50
|
+
def to_s
|
51
|
+
"URL: #{url}\nStatus: #{status}\nBody:\n\n#{body_str}"
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
def body_data_from_application_json
|
57
|
+
::JSON.parse(body_str)
|
58
|
+
end
|
59
|
+
|
60
|
+
def body_data_from_application_xml
|
61
|
+
Hash.from_xml(body_str)
|
62
|
+
end
|
63
|
+
|
64
|
+
def perform
|
65
|
+
@perform ||= begin
|
66
|
+
curl.perform || raise("CURL perform failed for #{url}")
|
67
|
+
true
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def performed_curl
|
72
|
+
perform
|
73
|
+
curl
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -27,6 +27,7 @@ module Avmtrf1
|
|
27
27
|
|
28
28
|
def run
|
29
29
|
infov 'Time', time
|
30
|
+
infov 'URL', request.url
|
30
31
|
out data.to_yaml
|
31
32
|
end
|
32
33
|
|
@@ -34,7 +35,11 @@ module Avmtrf1
|
|
34
35
|
|
35
36
|
def data_uncached
|
36
37
|
infom 'Recuperando informações...'
|
37
|
-
|
38
|
+
request.response.body_data_or_raise
|
39
|
+
end
|
40
|
+
|
41
|
+
def request_uncached
|
42
|
+
context(:esosti_instance).changed_request(time)
|
38
43
|
end
|
39
44
|
|
40
45
|
def time
|
@@ -26,15 +26,20 @@ module Avmtrf1
|
|
26
26
|
DOCOPT
|
27
27
|
|
28
28
|
def run
|
29
|
+
infov 'URL', request.url
|
29
30
|
fatal_error("Issue não encontrado: #{solicitacao_id}") unless issue
|
30
31
|
out issue.data.to_yaml
|
31
32
|
end
|
32
33
|
|
33
34
|
private
|
34
35
|
|
36
|
+
def request_uncached
|
37
|
+
context(:esosti_instance).issue_request(solicitacao_id)
|
38
|
+
end
|
39
|
+
|
35
40
|
def issue_uncached
|
36
41
|
infom "Recuperando informações de #{solicitacao_id}..."
|
37
|
-
|
42
|
+
request.response.body_data_or_raise
|
38
43
|
end
|
39
44
|
|
40
45
|
def solicitacao_id
|
@@ -0,0 +1,88 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/console/docopt_runner'
|
4
|
+
require 'eac_ruby_utils/core_ext'
|
5
|
+
require 'avmtrf1/default_esosti'
|
6
|
+
require 'avmtrf1/ini'
|
7
|
+
require 'avmtrf1/red/profile'
|
8
|
+
|
9
|
+
module Avmtrf1
|
10
|
+
module Tools
|
11
|
+
class Runner < ::EacRubyUtils::Console::DocoptRunner
|
12
|
+
class Esosti < ::EacRubyUtils::Console::DocoptRunner
|
13
|
+
class Request < ::EacRubyUtils::Console::DocoptRunner
|
14
|
+
enable_console_speaker
|
15
|
+
enable_simple_cache
|
16
|
+
|
17
|
+
DOC = <<~DOCOPT
|
18
|
+
Requisições genéricas para e-Sosti (Control Desk).
|
19
|
+
|
20
|
+
Usage:
|
21
|
+
__PROGRAM__ [options] <url-suffix>
|
22
|
+
__PROGRAM__ -h | --help
|
23
|
+
|
24
|
+
Options:
|
25
|
+
-h --help Mostra esta ajuda.
|
26
|
+
-d --default Opções --json e --yaml.
|
27
|
+
-j --json Solicita resposta em JSON.
|
28
|
+
-x --xml Solicita resposta em XML.
|
29
|
+
-y --yaml Imprime saída em YAML.
|
30
|
+
DOCOPT
|
31
|
+
|
32
|
+
def run
|
33
|
+
start_banner
|
34
|
+
output_data
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def json?
|
40
|
+
options.fetch('--json') || options.fetch('--default')
|
41
|
+
end
|
42
|
+
|
43
|
+
def start_banner
|
44
|
+
infov 'URL', request.url
|
45
|
+
infom 'Recuperando informações...'
|
46
|
+
infov 'Response status', response.status
|
47
|
+
end
|
48
|
+
|
49
|
+
def output_data
|
50
|
+
if yaml?
|
51
|
+
out ::YAML.dump(response.body_data)
|
52
|
+
else
|
53
|
+
out response.body_str
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def request_uncached
|
58
|
+
context(:esosti_instance).request(url_suffix, request_headers)
|
59
|
+
end
|
60
|
+
|
61
|
+
def request_headers
|
62
|
+
r = {}
|
63
|
+
%w[json xml].each do |format|
|
64
|
+
r['Accept'] = "application/#{format}" if send("#{format}?")
|
65
|
+
end
|
66
|
+
r
|
67
|
+
end
|
68
|
+
|
69
|
+
def response_uncached
|
70
|
+
request.response
|
71
|
+
end
|
72
|
+
|
73
|
+
def url_suffix
|
74
|
+
options.fetch('<url-suffix>')
|
75
|
+
end
|
76
|
+
|
77
|
+
def xml?
|
78
|
+
options.fetch('--xml')
|
79
|
+
end
|
80
|
+
|
81
|
+
def yaml?
|
82
|
+
options.fetch('--yaml') || options.fetch('--default')
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
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.
|
4
|
+
version: 0.30.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: 2020-
|
11
|
+
date: 2020-06-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aranha-parsers
|
@@ -299,6 +299,9 @@ files:
|
|
299
299
|
- lib/avmtrf1/rest_provider.rb
|
300
300
|
- lib/avmtrf1/rest_provider/entity.rb
|
301
301
|
- lib/avmtrf1/rest_provider/instance.rb
|
302
|
+
- lib/avmtrf1/rest_provider/instance/issues.rb
|
303
|
+
- lib/avmtrf1/rest_provider/request.rb
|
304
|
+
- lib/avmtrf1/rest_provider/response.rb
|
302
305
|
- lib/avmtrf1/result.rb
|
303
306
|
- lib/avmtrf1/ruby.rb
|
304
307
|
- lib/avmtrf1/ruby/gems.rb
|
@@ -312,6 +315,7 @@ files:
|
|
312
315
|
- lib/avmtrf1/tools/runner/esosti.rb
|
313
316
|
- lib/avmtrf1/tools/runner/esosti/changed.rb
|
314
317
|
- lib/avmtrf1/tools/runner/esosti/fetch.rb
|
318
|
+
- lib/avmtrf1/tools/runner/esosti/request.rb
|
315
319
|
- lib/avmtrf1/tools/runner/forponto.rb
|
316
320
|
- lib/avmtrf1/tools/runner/forponto/espelho.rb
|
317
321
|
- lib/avmtrf1/tools/runner/forponto/marcacoes.rb
|