avmtrf1-tools 0.26.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/Gemfile +4 -0
- data/lib/avmtrf1/default_esosti.rb +6 -2
- data/lib/avmtrf1/esosti/entities/issue.rb +5 -31
- data/lib/avmtrf1/esosti/instance.rb +4 -0
- data/lib/avmtrf1/esosti/instance/changed.rb +33 -0
- data/lib/avmtrf1/esosti/raw_data_sanitizer.rb +47 -0
- data/lib/avmtrf1/oracle/connection/base.rb +1 -0
- data/lib/avmtrf1/oracle/oci8.rb +8 -4
- data/lib/avmtrf1/redmine/instance.rb +2 -1
- data/lib/avmtrf1/rest_provider/instance.rb +13 -53
- 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/ruby.rb +9 -0
- data/lib/avmtrf1/ruby/gems.rb +11 -0
- data/lib/avmtrf1/ruby/gems/dependency.rb +20 -0
- data/lib/avmtrf1/ruby/gems/not_found_error.rb +17 -0
- data/lib/avmtrf1/tools/runner.rb +12 -0
- data/lib/avmtrf1/tools/runner/esosti.rb +12 -19
- data/lib/avmtrf1/tools/runner/esosti/changed.rb +52 -0
- data/lib/avmtrf1/tools/runner/esosti/fetch.rb +52 -0
- data/lib/avmtrf1/tools/runner/esosti/request.rb +88 -0
- data/lib/avmtrf1/tools/version.rb +1 -1
- metadata +37 -48
- data/lib/avmtrf1/esosti/parsers/solicitacao/main.rb +0 -22
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
|
data/Gemfile
CHANGED
@@ -6,8 +6,12 @@ require 'avmtrf1/ad_user'
|
|
6
6
|
module Avmtrf1
|
7
7
|
class << self
|
8
8
|
def default_esosti
|
9
|
-
@default_esosti ||=
|
10
|
-
|
9
|
+
@default_esosti ||= trf1_esosti('https://esosti.trf1.jus.br')
|
10
|
+
end
|
11
|
+
|
12
|
+
def trf1_esosti(url)
|
13
|
+
::Avmtrf1::Esosti::Instance.new(
|
14
|
+
url,
|
11
15
|
"#{::Avmtrf1.ad_user.username}@#{::Avmtrf1.ad_user.domain.downcase}.gov.br",
|
12
16
|
::Avmtrf1.ad_user.password
|
13
17
|
)
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'avmtrf1/esosti/raw_data_sanitizer'
|
3
4
|
require 'avmtrf1/rest_provider/entity'
|
4
5
|
|
5
6
|
module Avmtrf1
|
@@ -7,42 +8,15 @@ module Avmtrf1
|
|
7
8
|
module Entities
|
8
9
|
class Issue < ::Avmtrf1::RestProvider::Entity
|
9
10
|
class << self
|
10
|
-
def
|
11
|
-
|
12
|
-
|
13
|
-
end
|
14
|
-
|
15
|
-
def sanitize_data(data)
|
16
|
-
if data.is_a?(Array)
|
17
|
-
sanitize_array_data(data)
|
18
|
-
elsif data.is_a?(Hash)
|
19
|
-
sanitize_hash_data(data)
|
20
|
-
else
|
21
|
-
data
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
private
|
26
|
-
|
27
|
-
def sanitize_array_data(data)
|
28
|
-
data.map { |v| sanitize_data(v) }
|
29
|
-
end
|
30
|
-
|
31
|
-
def sanitize_hash_data(data)
|
32
|
-
if content_hash?(data)
|
33
|
-
sanitize_data(data.fetch('content'))
|
34
|
-
else
|
35
|
-
data.transform_values { |v| sanitize_data(v) }
|
11
|
+
def parse_data(data)
|
12
|
+
data.fetch('QueryMS_RMTICKETResponse')['MS_RMTICKETSet'].if_present(nil) do |v|
|
13
|
+
::Avmtrf1::Esosti::RawDataSanitizer.sanitize(v.fetch('TICKET'))
|
36
14
|
end
|
37
15
|
end
|
38
|
-
|
39
|
-
def content_hash?(data)
|
40
|
-
data.is_a?(Hash) && data.count == 1 && data.key?('content')
|
41
|
-
end
|
42
16
|
end
|
43
17
|
|
44
18
|
def initialize(instance, data)
|
45
|
-
super instance,
|
19
|
+
super instance, data
|
46
20
|
end
|
47
21
|
end
|
48
22
|
end
|
@@ -1,11 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
3
4
|
require 'avmtrf1/esosti/entities/issue'
|
4
5
|
require 'avmtrf1/rest_provider/instance'
|
5
6
|
|
6
7
|
module Avmtrf1
|
7
8
|
module Esosti
|
8
9
|
class Instance < ::Avmtrf1::RestProvider::Instance
|
10
|
+
require_sub __FILE__
|
11
|
+
include ::Avmtrf1::Esosti::Instance::Changed
|
12
|
+
|
9
13
|
def build_service_url(service_url_suffix)
|
10
14
|
"#{root_url}/maxrest/rest#{service_url_suffix}"
|
11
15
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'avmtrf1/esosti/raw_data_sanitizer'
|
4
|
+
require 'eac_ruby_utils/core_ext'
|
5
|
+
|
6
|
+
module Avmtrf1
|
7
|
+
module Esosti
|
8
|
+
class Instance < ::Avmtrf1::RestProvider::Instance
|
9
|
+
module Changed
|
10
|
+
def changed(since)
|
11
|
+
changed_request(since).response.body_data_or_raise
|
12
|
+
end
|
13
|
+
|
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
|
20
|
+
end
|
21
|
+
|
22
|
+
def changed_url_suffix(since)
|
23
|
+
'/mbo/ticket?_includecols=ticketid&changedate=~gt~' +
|
24
|
+
::CGI.escape(formatted_time(since))
|
25
|
+
end
|
26
|
+
|
27
|
+
def formatted_time(time)
|
28
|
+
time.strftime('%FT%T%:z')
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
4
|
+
|
5
|
+
module Avmtrf1
|
6
|
+
module Esosti
|
7
|
+
class RawDataSanitizer
|
8
|
+
class << self
|
9
|
+
def sanitize(raw_data)
|
10
|
+
new(raw_data).sanitized
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
CONTENT_KEY = 'content'
|
15
|
+
|
16
|
+
common_constructor :raw_data
|
17
|
+
|
18
|
+
def sanitized
|
19
|
+
if raw_data.is_a?(Array)
|
20
|
+
array_sanitized
|
21
|
+
elsif raw_data.is_a?(Hash)
|
22
|
+
hash_sanitized
|
23
|
+
else
|
24
|
+
raw_data
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def array_sanitized
|
31
|
+
raw_data.map { |v| self.class.sanitize(v) }
|
32
|
+
end
|
33
|
+
|
34
|
+
def hash_sanitized
|
35
|
+
if content_hash?
|
36
|
+
self.class.sanitize(raw_data.fetch(CONTENT_KEY))
|
37
|
+
else
|
38
|
+
raw_data.transform_values { |v| self.class.sanitize(v) }
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def content_hash?
|
43
|
+
raw_data.is_a?(Hash) && raw_data.count == 1 && raw_data.key?(CONTENT_KEY)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
data/lib/avmtrf1/oracle/oci8.rb
CHANGED
@@ -1,15 +1,21 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'avmtrf1/ruby/gems/dependency'
|
4
|
+
|
3
5
|
module Avmtrf1
|
4
6
|
module Oracle
|
5
7
|
module Oci8
|
6
|
-
NLS_LANG_DEFAULT_VALUE = 'BRAZILIAN PORTUGUESE_BRAZIL.
|
8
|
+
NLS_LANG_DEFAULT_VALUE = 'BRAZILIAN PORTUGUESE_BRAZIL.UTF8'
|
7
9
|
NLS_LANG_ENVIRONMENT_KEY = 'NLS_LANG'
|
8
10
|
|
9
11
|
class << self
|
12
|
+
def dependency
|
13
|
+
@dependency ||= ::Avmtrf1::Ruby::Gems::Dependency.new('ruby-oci8', 'oci8')
|
14
|
+
end
|
15
|
+
|
10
16
|
def require_lib
|
11
17
|
nls_lang_set
|
12
|
-
|
18
|
+
dependency.require_lib
|
13
19
|
end
|
14
20
|
|
15
21
|
def nls_lang_set
|
@@ -21,5 +27,3 @@ module Avmtrf1
|
|
21
27
|
end
|
22
28
|
end
|
23
29
|
end
|
24
|
-
|
25
|
-
::Avmtrf1::Oracle::Oci8.require_lib
|
@@ -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,58 +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
|
-
issue_class.new(self, request(issue_get_url_suffix(provider_issue_id)))
|
32
|
-
end
|
33
|
-
|
34
|
-
def request(service_url_suffix)
|
35
|
-
url = build_service_url(service_url_suffix)
|
36
|
-
infov 'URL', url
|
37
|
-
c = ::Curl::Easy.new(url)
|
38
|
-
c.http_auth_types = :basic
|
39
|
-
c.username = username
|
40
|
-
c.password = password
|
41
|
-
c.headers['Accept'] = 'application/json'
|
42
|
-
curl_perform(c)
|
43
|
-
end
|
44
|
-
|
45
|
-
def issue_class
|
46
|
-
"#{self.class.name.deconstantize}::Entities::Issue".constantize
|
47
|
-
end
|
48
|
-
|
49
|
-
private
|
50
|
-
|
51
|
-
def curl_perform(curl)
|
52
|
-
raise 'Curl failed' unless curl.perform
|
53
|
-
|
54
|
-
infov 'Return status', curl.status
|
55
|
-
return JSON.parse(curl.body_str) if curl.status.to_i == 200
|
56
|
-
|
57
|
-
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
|
58
23
|
end
|
59
24
|
|
60
|
-
def
|
61
|
-
|
62
|
-
"#{curl.url} returned #{curl.status.to_i}:
|
63
|
-
#{'=' * 10}
|
64
|
-
#{curl.body_str}
|
65
|
-
#{'=' * 10}"
|
66
|
-
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)
|
67
27
|
end
|
68
28
|
end
|
69
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
|
data/lib/avmtrf1/ruby.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
4
|
+
require 'avmtrf1/ruby/gems/not_found_error'
|
5
|
+
|
6
|
+
module Avmtrf1
|
7
|
+
module Ruby
|
8
|
+
module Gems
|
9
|
+
class Dependency
|
10
|
+
common_constructor :gem_name, :lib_name
|
11
|
+
|
12
|
+
def require_lib
|
13
|
+
require lib_name
|
14
|
+
rescue LoadError
|
15
|
+
raise ::Avmtrf1::Ruby::Gems::NotFoundError, self
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Avmtrf1
|
4
|
+
module Ruby
|
5
|
+
module Gems
|
6
|
+
class NotFoundError < ::StandardError
|
7
|
+
attr_reader :dependency
|
8
|
+
|
9
|
+
def initialize(dependency)
|
10
|
+
@dependency = dependency
|
11
|
+
super("Gem \"#{dependency.gem_name}\" not found" \
|
12
|
+
" (Library required: \"#{dependency.lib_name}\")")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/avmtrf1/tools/runner.rb
CHANGED
@@ -4,6 +4,7 @@ require 'aranha/selenium/driver_factory/base'
|
|
4
4
|
require 'eac_ruby_utils/console/docopt_runner'
|
5
5
|
require 'eac_ruby_utils/require_sub'
|
6
6
|
require 'avmtrf1/tools/version'
|
7
|
+
require 'avmtrf1/ruby/gems/not_found_error'
|
7
8
|
require 'eac_ruby_utils/console/speaker'
|
8
9
|
|
9
10
|
module Avmtrf1
|
@@ -33,6 +34,17 @@ module Avmtrf1
|
|
33
34
|
else
|
34
35
|
run_with_subcommand
|
35
36
|
end
|
37
|
+
rescue ::Avmtrf1::Ruby::Gems::NotFoundError => e
|
38
|
+
on_gem_not_found(e.dependency)
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def on_gem_not_found(dependency)
|
44
|
+
fatal_error "A gem \"#{dependency.gem_name}\" foi requerida " \
|
45
|
+
"(Por \"require '#{dependency.lib_name}'\") e não encontrada. Para instalá-la:\n\n" \
|
46
|
+
" gem install #{dependency.gem_name}\n\n" \
|
47
|
+
'Nota: procedimentos adicionais podem ser necessários.'
|
36
48
|
end
|
37
49
|
end
|
38
50
|
end
|
@@ -1,8 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'eac_ruby_utils/console/docopt_runner'
|
4
|
-
require 'eac_ruby_utils/
|
5
|
-
require 'eac_ruby_utils/simple_cache'
|
4
|
+
require 'eac_ruby_utils/core_ext'
|
6
5
|
require 'avmtrf1/default_esosti'
|
7
6
|
require 'avmtrf1/ini'
|
8
7
|
require 'avmtrf1/red/profile'
|
@@ -11,34 +10,28 @@ module Avmtrf1
|
|
11
10
|
module Tools
|
12
11
|
class Runner < ::EacRubyUtils::Console::DocoptRunner
|
13
12
|
class Esosti < ::EacRubyUtils::Console::DocoptRunner
|
14
|
-
|
15
|
-
|
13
|
+
require_sub __FILE__
|
14
|
+
enable_console_speaker
|
15
|
+
enable_simple_cache
|
16
16
|
|
17
17
|
DOC = <<~DOCOPT
|
18
18
|
Utilidades para e-Sosti (Control Desk).
|
19
19
|
|
20
20
|
Usage:
|
21
|
-
__PROGRAM__ [options]
|
21
|
+
__PROGRAM__ [options] __SUBCOMMANDS__
|
22
22
|
__PROGRAM__ -h | --help
|
23
23
|
|
24
24
|
Options:
|
25
|
-
-h --help
|
26
|
-
-
|
25
|
+
-h --help Mostra esta ajuda.
|
26
|
+
-U --url=<url> Utiliza o Control Desk em <url>.
|
27
27
|
DOCOPT
|
28
28
|
|
29
|
-
|
30
|
-
if options.fetch('fetch')
|
31
|
-
fetch
|
32
|
-
else
|
33
|
-
fatal_error('Subcomando não mapeado (Isto é um defeito do software)')
|
34
|
-
end
|
35
|
-
end
|
29
|
+
private
|
36
30
|
|
37
|
-
def
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
out issue.data.to_yaml
|
31
|
+
def esosti_instance_uncached
|
32
|
+
options.fetch('--url').if_present(::Avmtrf1.default_esosti) do |url|
|
33
|
+
::Avmtrf1.trf1_esosti(url)
|
34
|
+
end
|
42
35
|
end
|
43
36
|
end
|
44
37
|
end
|
@@ -0,0 +1,52 @@
|
|
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 Changed < ::EacRubyUtils::Console::DocoptRunner
|
14
|
+
enable_console_speaker
|
15
|
+
enable_simple_cache
|
16
|
+
|
17
|
+
DOC = <<~DOCOPT
|
18
|
+
Recupera o conteúdo de uma solicitação e-Sosti (Control Desk).
|
19
|
+
|
20
|
+
Usage:
|
21
|
+
__PROGRAM__ [options] <time>
|
22
|
+
__PROGRAM__ -h | --help
|
23
|
+
|
24
|
+
Options:
|
25
|
+
-h --help Mostra esta ajuda.
|
26
|
+
DOCOPT
|
27
|
+
|
28
|
+
def run
|
29
|
+
infov 'Time', time
|
30
|
+
infov 'URL', request.url
|
31
|
+
out data.to_yaml
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def data_uncached
|
37
|
+
infom 'Recuperando informações...'
|
38
|
+
request.response.body_data_or_raise
|
39
|
+
end
|
40
|
+
|
41
|
+
def request_uncached
|
42
|
+
context(:esosti_instance).changed_request(time)
|
43
|
+
end
|
44
|
+
|
45
|
+
def time
|
46
|
+
::Time.parse(options.fetch('<time>'))
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,52 @@
|
|
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 Fetch < ::EacRubyUtils::Console::DocoptRunner
|
14
|
+
enable_console_speaker
|
15
|
+
enable_simple_cache
|
16
|
+
|
17
|
+
DOC = <<~DOCOPT
|
18
|
+
Recupera o conteúdo de uma solicitação e-Sosti (Control Desk).
|
19
|
+
|
20
|
+
Usage:
|
21
|
+
__PROGRAM__ [options] <solicitacao_id>
|
22
|
+
__PROGRAM__ -h | --help
|
23
|
+
|
24
|
+
Options:
|
25
|
+
-h --help Mostra esta ajuda.
|
26
|
+
DOCOPT
|
27
|
+
|
28
|
+
def run
|
29
|
+
infov 'URL', request.url
|
30
|
+
fatal_error("Issue não encontrado: #{solicitacao_id}") unless issue
|
31
|
+
out issue.data.to_yaml
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def request_uncached
|
37
|
+
context(:esosti_instance).issue_request(solicitacao_id)
|
38
|
+
end
|
39
|
+
|
40
|
+
def issue_uncached
|
41
|
+
infom "Recuperando informações de #{solicitacao_id}..."
|
42
|
+
request.response.body_data_or_raise
|
43
|
+
end
|
44
|
+
|
45
|
+
def solicitacao_id
|
46
|
+
options.fetch('<solicitacao_id>')
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -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
|
@@ -16,20 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0.
|
20
|
-
- - ">="
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: 0.2.1
|
19
|
+
version: '0.4'
|
23
20
|
type: :runtime
|
24
21
|
prerelease: false
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
26
23
|
requirements:
|
27
24
|
- - "~>"
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version: '0.
|
30
|
-
- - ">="
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version: 0.2.1
|
26
|
+
version: '0.4'
|
33
27
|
- !ruby/object:Gem::Dependency
|
34
28
|
name: aranha-selenium
|
35
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -39,7 +33,7 @@ dependencies:
|
|
39
33
|
version: '0.1'
|
40
34
|
- - ">="
|
41
35
|
- !ruby/object:Gem::Version
|
42
|
-
version: 0.1.
|
36
|
+
version: 0.1.2
|
43
37
|
type: :runtime
|
44
38
|
prerelease: false
|
45
39
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -49,21 +43,21 @@ dependencies:
|
|
49
43
|
version: '0.1'
|
50
44
|
- - ">="
|
51
45
|
- !ruby/object:Gem::Version
|
52
|
-
version: 0.1.
|
46
|
+
version: 0.1.2
|
53
47
|
- !ruby/object:Gem::Dependency
|
54
48
|
name: avm-tools
|
55
49
|
requirement: !ruby/object:Gem::Requirement
|
56
50
|
requirements:
|
57
51
|
- - "~>"
|
58
52
|
- !ruby/object:Gem::Version
|
59
|
-
version: '0.
|
53
|
+
version: '0.46'
|
60
54
|
type: :runtime
|
61
55
|
prerelease: false
|
62
56
|
version_requirements: !ruby/object:Gem::Requirement
|
63
57
|
requirements:
|
64
58
|
- - "~>"
|
65
59
|
- !ruby/object:Gem::Version
|
66
|
-
version: '0.
|
60
|
+
version: '0.46'
|
67
61
|
- !ruby/object:Gem::Dependency
|
68
62
|
name: curb
|
69
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -84,48 +78,34 @@ dependencies:
|
|
84
78
|
requirements:
|
85
79
|
- - "~>"
|
86
80
|
- !ruby/object:Gem::Version
|
87
|
-
version: '0.
|
81
|
+
version: '0.3'
|
88
82
|
type: :runtime
|
89
83
|
prerelease: false
|
90
84
|
version_requirements: !ruby/object:Gem::Requirement
|
91
85
|
requirements:
|
92
86
|
- - "~>"
|
93
87
|
- !ruby/object:Gem::Version
|
94
|
-
version: '0.
|
88
|
+
version: '0.3'
|
95
89
|
- !ruby/object:Gem::Dependency
|
96
|
-
name:
|
90
|
+
name: eac_ruby_utils
|
97
91
|
requirement: !ruby/object:Gem::Requirement
|
98
92
|
requirements:
|
99
93
|
- - "~>"
|
100
94
|
- !ruby/object:Gem::Version
|
101
|
-
version: '0.
|
95
|
+
version: '0.32'
|
102
96
|
- - ">="
|
103
97
|
- !ruby/object:Gem::Version
|
104
|
-
version: 0.
|
98
|
+
version: 0.32.1
|
105
99
|
type: :runtime
|
106
100
|
prerelease: false
|
107
101
|
version_requirements: !ruby/object:Gem::Requirement
|
108
102
|
requirements:
|
109
103
|
- - "~>"
|
110
104
|
- !ruby/object:Gem::Version
|
111
|
-
version: '0.
|
105
|
+
version: '0.32'
|
112
106
|
- - ">="
|
113
107
|
- !ruby/object:Gem::Version
|
114
|
-
version: 0.
|
115
|
-
- !ruby/object:Gem::Dependency
|
116
|
-
name: eac_ruby_utils
|
117
|
-
requirement: !ruby/object:Gem::Requirement
|
118
|
-
requirements:
|
119
|
-
- - "~>"
|
120
|
-
- !ruby/object:Gem::Version
|
121
|
-
version: '0.26'
|
122
|
-
type: :runtime
|
123
|
-
prerelease: false
|
124
|
-
version_requirements: !ruby/object:Gem::Requirement
|
125
|
-
requirements:
|
126
|
-
- - "~>"
|
127
|
-
- !ruby/object:Gem::Version
|
128
|
-
version: '0.26'
|
108
|
+
version: 0.32.1
|
129
109
|
- !ruby/object:Gem::Dependency
|
130
110
|
name: filesize
|
131
111
|
requirement: !ruby/object:Gem::Requirement
|
@@ -175,6 +155,9 @@ dependencies:
|
|
175
155
|
- - "~>"
|
176
156
|
- !ruby/object:Gem::Version
|
177
157
|
version: '1.1'
|
158
|
+
- - ">="
|
159
|
+
- !ruby/object:Gem::Version
|
160
|
+
version: 1.1.1
|
178
161
|
type: :runtime
|
179
162
|
prerelease: false
|
180
163
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -182,20 +165,9 @@ dependencies:
|
|
182
165
|
- - "~>"
|
183
166
|
- !ruby/object:Gem::Version
|
184
167
|
version: '1.1'
|
185
|
-
- !ruby/object:Gem::Dependency
|
186
|
-
name: ruby-oci8
|
187
|
-
requirement: !ruby/object:Gem::Requirement
|
188
|
-
requirements:
|
189
168
|
- - ">="
|
190
169
|
- !ruby/object:Gem::Version
|
191
|
-
version:
|
192
|
-
type: :runtime
|
193
|
-
prerelease: false
|
194
|
-
version_requirements: !ruby/object:Gem::Requirement
|
195
|
-
requirements:
|
196
|
-
- - ">="
|
197
|
-
- !ruby/object:Gem::Version
|
198
|
-
version: '0'
|
170
|
+
version: 1.1.1
|
199
171
|
- !ruby/object:Gem::Dependency
|
200
172
|
name: eac_ruby_gem_support
|
201
173
|
requirement: !ruby/object:Gem::Requirement
|
@@ -203,6 +175,9 @@ dependencies:
|
|
203
175
|
- - "~>"
|
204
176
|
- !ruby/object:Gem::Version
|
205
177
|
version: '0.1'
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: 0.1.1
|
206
181
|
type: :development
|
207
182
|
prerelease: false
|
208
183
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -210,6 +185,9 @@ dependencies:
|
|
210
185
|
- - "~>"
|
211
186
|
- !ruby/object:Gem::Version
|
212
187
|
version: '0.1'
|
188
|
+
- - ">="
|
189
|
+
- !ruby/object:Gem::Version
|
190
|
+
version: 0.1.1
|
213
191
|
description:
|
214
192
|
email:
|
215
193
|
executables:
|
@@ -236,7 +214,8 @@ files:
|
|
236
214
|
- lib/avmtrf1/esosti/entities.rb
|
237
215
|
- lib/avmtrf1/esosti/entities/issue.rb
|
238
216
|
- lib/avmtrf1/esosti/instance.rb
|
239
|
-
- lib/avmtrf1/esosti/
|
217
|
+
- lib/avmtrf1/esosti/instance/changed.rb
|
218
|
+
- lib/avmtrf1/esosti/raw_data_sanitizer.rb
|
240
219
|
- lib/avmtrf1/esosti/session.rb
|
241
220
|
- lib/avmtrf1/esosti/session/action_base.rb
|
242
221
|
- lib/avmtrf1/esosti/session/atividades.rb
|
@@ -320,13 +299,23 @@ files:
|
|
320
299
|
- lib/avmtrf1/rest_provider.rb
|
321
300
|
- lib/avmtrf1/rest_provider/entity.rb
|
322
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
|
323
305
|
- lib/avmtrf1/result.rb
|
306
|
+
- lib/avmtrf1/ruby.rb
|
307
|
+
- lib/avmtrf1/ruby/gems.rb
|
308
|
+
- lib/avmtrf1/ruby/gems/dependency.rb
|
309
|
+
- lib/avmtrf1/ruby/gems/not_found_error.rb
|
324
310
|
- lib/avmtrf1/template.rb
|
325
311
|
- lib/avmtrf1/tools.rb
|
326
312
|
- lib/avmtrf1/tools/runner.rb
|
327
313
|
- lib/avmtrf1/tools/runner/check_point.rb
|
328
314
|
- lib/avmtrf1/tools/runner/check_point/login.rb
|
329
315
|
- lib/avmtrf1/tools/runner/esosti.rb
|
316
|
+
- lib/avmtrf1/tools/runner/esosti/changed.rb
|
317
|
+
- lib/avmtrf1/tools/runner/esosti/fetch.rb
|
318
|
+
- lib/avmtrf1/tools/runner/esosti/request.rb
|
330
319
|
- lib/avmtrf1/tools/runner/forponto.rb
|
331
320
|
- lib/avmtrf1/tools/runner/forponto/espelho.rb
|
332
321
|
- lib/avmtrf1/tools/runner/forponto/marcacoes.rb
|
@@ -1,22 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'active_support/core_ext/object' # To-to: declare in gem "aranha"
|
4
|
-
require 'active_support/core_ext/string' # To-to: declare in gem "aranha"
|
5
|
-
require 'aranha/parsers/html/item'
|
6
|
-
require 'nokogiri' # To-to: declare in gem "aranha"
|
7
|
-
|
8
|
-
module Avmtrf1
|
9
|
-
module Esosti
|
10
|
-
module Parsers
|
11
|
-
module Solicitacao
|
12
|
-
class Main < ::Aranha::Parsers::Html::Item
|
13
|
-
field :pessoa_afetada_email, :string,
|
14
|
-
'//input[@type="text" and ' \
|
15
|
-
'following-sibling::img[contains(@aria-label, "Pessoa Afetada")]]/@value'
|
16
|
-
|
17
|
-
def item_xpath; end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|