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