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 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