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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0fc536ae35fea31a81dcf588d028a691b22ef255652395556e9d5df4b18f9a86
4
- data.tar.gz: fe45a68ece7117513a30b34c9f52b842339a916b4f5d7c2aa4ab6632b4ee0762
3
+ metadata.gz: b61967bd7fdee216edfc174a67a238cb5f09fd625ae19c5bc029f0e13fc319ce
4
+ data.tar.gz: 4ecf717af9a51d39bda3ef107a5536ad97a27c4839cae2ff4255f89bccffa47e
5
5
  SHA512:
6
- metadata.gz: 3bc133b27c48f0926c2b7afbc096313e5658f58a04bae3b32f9d9e9f1798a0463ecae8fcfab9f3a6a489f48a6675cfae2878a4f242798cbfcafcff0c283f4a61
7
- data.tar.gz: 790921a5e68cc1731ddbe2f79569a983543b2d4f3db2a96e2a2d643004610f2aa90bc030bcd24a15bfa9bb66983afeb5f389676f17bb0bb5493aea1f841c7bb2
6
+ metadata.gz: f4dcd615dec9efc8824e9307a8673a409ef411e27c41e0b52b4df8f2bf613a66425fda3c13fe7550dc5347088d83b6e097360fb033e78ee100d84ed779715aa2
7
+ data.tar.gz: 788d8843f20252d25d86e79e327f16e71f2aa9a9de370e754b65a99eb7043dbbbc2a40ba02bfc244f0287af4bd96daf579ea7849dfcc61e61966122419f9f368
data/Gemfile CHANGED
@@ -3,3 +3,7 @@
3
3
  source 'https://rubygems.org'
4
4
 
5
5
  gemspec
6
+
7
+ group :oracle do
8
+ gem 'ruby-oci8'
9
+ end
@@ -6,8 +6,12 @@ require 'avmtrf1/ad_user'
6
6
  module Avmtrf1
7
7
  class << self
8
8
  def default_esosti
9
- @default_esosti ||= ::Avmtrf1::Esosti::Instance.new(
10
- 'https://esosti.trf1.jus.br',
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 raw_data_to_data(raw_data)
11
- sanitize_data(raw_data.fetch('QueryMS_RMTICKETResponse').fetch('MS_RMTICKETSet')
12
- .fetch('TICKET'))
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, self.class.raw_data_to_data(data)
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
@@ -12,6 +12,7 @@ module Avmtrf1
12
12
  delegate :exec, to: :connection
13
13
 
14
14
  def initialize(connection_string)
15
+ ::Avmtrf1::Oracle::Oci8.require_lib
15
16
  @connection = OCI8.new(connection_string)
16
17
  end
17
18
 
@@ -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.WE8ISO8859P1'
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
- require 'oci8'
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
- request('/issue_statuses').fetch('issue_statuses').map do |data|
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 'json'
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
- include ::EacRubyUtils::Console::Speaker
16
-
17
- attr_reader :root_url, :username, :password
18
-
19
- def initialize(root_url, username, password)
20
- @root_url = root_url
21
- @username = username
22
- @password = password
23
- end
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 curl_raise_message(curl)
61
- raise <<~MESSAGE
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
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avmtrf1
6
+ module Ruby
7
+ require_sub __FILE__
8
+ end
9
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avmtrf1
6
+ module Ruby
7
+ module Gems
8
+ require_sub __FILE__
9
+ end
10
+ end
11
+ end
@@ -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
@@ -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/console/speaker'
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
- include ::EacRubyUtils::Console::Speaker
15
- include ::EacRubyUtils::SimpleCache
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] fetch <solicitacao_id>
21
+ __PROGRAM__ [options] __SUBCOMMANDS__
22
22
  __PROGRAM__ -h | --help
23
23
 
24
24
  Options:
25
- -h --help Mostra esta ajuda.
26
- -u --user Usuário no e-Sosti.
25
+ -h --help Mostra esta ajuda.
26
+ -U --url=<url> Utiliza o Control Desk em <url>.
27
27
  DOCOPT
28
28
 
29
- def run
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 fetch
38
- infom "Recuperando informações de #{options.fetch('<solicitacao_id>')}..."
39
- issue = ::Avmtrf1.default_esosti.issue(options.fetch('<solicitacao_id>'))
40
- fatal_error("Issue não encontrado: #{options.fetch('<solicitacao_id>')}") unless issue
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
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Avmtrf1
4
4
  module Tools
5
- VERSION = '0.26.0'
5
+ VERSION = '0.30.0'
6
6
  end
7
7
  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.26.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-04-24 00:00:00.000000000 Z
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.2'
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.2'
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.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.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.34'
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.34'
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.2'
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.2'
88
+ version: '0.3'
95
89
  - !ruby/object:Gem::Dependency
96
- name: eac_launcher
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.6'
95
+ version: '0.32'
102
96
  - - ">="
103
97
  - !ruby/object:Gem::Version
104
- version: 0.6.4
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.6'
105
+ version: '0.32'
112
106
  - - ">="
113
107
  - !ruby/object:Gem::Version
114
- version: 0.6.4
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: '0'
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/parsers/solicitacao/main.rb
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