avmtrf1-tools 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 5cb1ffb9dde8a2732c1ad3f49a7213250ed76e462a95f904a18804c7b7a5b4a4
4
+ data.tar.gz: ca10e34e58da0794d751f42d2ebc8e6ec5a2773c5b2b956f0998f1b6d2dbef38
5
+ SHA512:
6
+ metadata.gz: 55b49d07b25d00446eb6618218a9a62eb97da7382a9c7b539d118fbac3f888ef529f16421ad28e42bd7017854e8b664bf22a498e1cd8fbd60975661f91b7fe75
7
+ data.tar.gz: 688fb0d1d371ffe8fbeaa60a2339d11fec845ae6b6fe5755bf4c9397c078c740720e74e40a769866082412378cc40e8108959ad3aaa1e9cee821c2d1dc4c9e58
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gemspec
data/bin/oracle ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require_relative '../init.rb'
5
+ require 'oracle/runner'
6
+
7
+ ::Oracle::Runner.new
data/exe/avmtrf1 ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ $LOAD_PATH.unshift("#{__dir__}/../lib")
5
+
6
+ require 'avmtrf1/tools/runner'
7
+
8
+ ::Avmtrf1::Tools::Runner.run(program_name: ::File.basename(__FILE__))
data/init.rb ADDED
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ ENV['BUNDLE_GEMFILE'] = ::File.join(__dir__, 'Gemfile')
4
+ ENV['NLS_LANG'] = 'BRAZILIAN PORTUGUESE_BRAZIL.WE8ISO8859P1'
5
+ require 'rubygems'
6
+ require 'bundler/setup'
7
+ require 'eac_ruby_utils'
8
+ require 'active_support/core_ext/object'
9
+
10
+ $LOAD_PATH.unshift ::File.join(__dir__, 'lib')
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/simple_cache'
4
+
5
+ module Avmtrf1
6
+ class Ini
7
+ class Profile
8
+ include ::EacRubyUtils::SimpleCache
9
+
10
+ attr_reader :ini, :name, :parent_name, :self_data
11
+
12
+ # @param profiles [Avmtrf1::Ini::Profiles
13
+ def initialize(ini, name, parent_name, self_data)
14
+ @ini = ini
15
+ @name = name
16
+ @parent_name = parent_name
17
+ @self_data = self_data
18
+ end
19
+
20
+ def [](key)
21
+ data[key]
22
+ end
23
+
24
+ def fetch(key)
25
+ data.fetch(key)
26
+ end
27
+
28
+ def to_h(prefix = '')
29
+ data.select { |k, _v| k.start_with?(prefix) }
30
+ .map { |e| [e[0].gsub(/\A#{Regexp.quote(prefix)}/, ''), e[1]] }.to_h
31
+ end
32
+
33
+ private
34
+
35
+ def data_uncached
36
+ r = self_data
37
+ r = parent.data.merge(r) if parent
38
+ r
39
+ end
40
+
41
+ def parent
42
+ parent_name ? ini.profiles[parent_name] : nil
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/simple_cache'
4
+ require 'pp'
5
+ require 'avmtrf1/ini/profile'
6
+ require 'avmtrf1/patches/inifile'
7
+
8
+ module Avmtrf1
9
+ # Leitor de arquivos .ini com suporte a herança de seções/perfis.
10
+ class Ini
11
+ include ::EacRubyUtils::SimpleCache
12
+
13
+ class << self
14
+ SECTION_NAME_PATTERN = /\A([^\:]+)(?:\:([^\:]+))?\z/.freeze
15
+
16
+ # @return Um [Array] em que o primeiro elemento é o perfil e o segundo é seu super-perfil.
17
+ def parse_section_name(section_name)
18
+ m = SECTION_NAME_PATTERN.match(section_name)
19
+ return [m[1], m[2]] if m
20
+
21
+ raise "Section name pattern \"#{SECTION_NAME_PATTERN}\" not match \"#{section_name}\""
22
+ end
23
+ end
24
+
25
+ attr_reader :inifile
26
+
27
+ # @param ini Um [IniFile] ou um caminho de arquivo .ini.
28
+ def initialize(inifile)
29
+ @inifile = ::IniFile.load(inifile.to_s) unless inifile.is_a?(::IniFile)
30
+ end
31
+
32
+ private
33
+
34
+ def profiles_uncached
35
+ r = {}
36
+ inifile.each_section do |section|
37
+ profile_name, profile_parent_name = self.class.parse_section_name(section)
38
+ r[profile_name] = ::Avmtrf1::Ini::Profile.new(
39
+ self, profile_name, profile_parent_name, inifile[section]
40
+ )
41
+ end
42
+ r.sort.to_h.freeze
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'inifile'
4
+
5
+ class IniFile
6
+ class Parser
7
+ alias original_typecast typecast
8
+
9
+ def typecast(value)
10
+ value.to_s
11
+ end
12
+ end
13
+ end
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0"?>
2
+ <root>
3
+ <Solicitante login="<%= login %>" ip="<%= ip %>" sistema="<%= sistema %>" nomeMaquina="<%= nome_maquina %>"/>
4
+ </root>
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avmtrf1/red/server'
4
+ require 'avmtrf1/red/helper'
5
+ require 'pp'
6
+ require 'tempfile'
7
+
8
+ module Avmtrf1
9
+ module Red
10
+ class Client
11
+ include ::Avmtrf1::Red::Helper
12
+
13
+ class << self
14
+ def by_ini_profile(ini_profile)
15
+ ::Avmtrf1::Red::Client.new(
16
+ ::Avmtrf1::Red::Server.by_ini_profile(ini_profile),
17
+ ini_profile.to_h('parametros.')
18
+ )
19
+ end
20
+ end
21
+
22
+ attr_reader :server, :login, :ip, :sistema, :nome_maquina
23
+
24
+ def initialize(server, parametros)
25
+ @server = server
26
+ @login = parametros.fetch('login')
27
+ @ip = parametros.fetch('ip')
28
+ @sistema = parametros.fetch('sistema')
29
+ @nome_maquina = parametros.fetch('nomeMaquina')
30
+ end
31
+
32
+ def authorization_url
33
+ xml = post_xml('/REDCentral/autorizacaoinclusao', xml_content('authorization'))
34
+ xml.at_xpath('/root/retornoSolicitacaoInclusao/@url')
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/concern'
4
+ require 'active_support/core_ext/string'
5
+ require 'eac_ruby_utils/console/speaker'
6
+ require 'erb'
7
+ require 'httpclient'
8
+ require 'nokogiri'
9
+
10
+ module Avmtrf1
11
+ module Red
12
+ module Helper
13
+ extend ::ActiveSupport::Concern
14
+
15
+ included do
16
+ include ::EacRubyUtils::Console::Speaker
17
+ end
18
+
19
+ def http_client
20
+ @http_client ||= ::HTTPClient.new
21
+ end
22
+
23
+ def check_request_result(url, result)
24
+ return if result.status == 200
25
+
26
+ raise "#{url} returned #{result.status}\n#{result.body}"
27
+ end
28
+
29
+ def post(url, *post_args)
30
+ infom "Requesting \"#{url}\""
31
+ res = http_client.post(url, *post_args)
32
+ check_request_result(url, res)
33
+ res.body
34
+ end
35
+
36
+ def post_xml(url_suffix, xml_body)
37
+ url = server.resource_url(url_suffix)
38
+ ::Nokogiri::XML(post(url, xml_body))
39
+ end
40
+
41
+ def xml_content(name)
42
+ ::ERB.new(::File.read(xml_path(name))).result(binding)
43
+ end
44
+
45
+ def xml_path(name)
46
+ ::File.join(__dir__, self.class.name.demodulize.underscore, "#{name}.xml.erb")
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,19 @@
1
+ <root>
2
+ <MetadadosInclusao
3
+ dataHoraProducaoConteudo="<%= Time.now.strftime('%d/%m/%Y %H:%I:%S') %>"
4
+ numeroPasta="<%= metadados.fetch('numeroPasta') %>"
5
+ descricaoTituloDocumento="<%= metadados.fetch('descricaoTituloDocumento') %>"
6
+ numeroTipoSigilo="<%= metadados.fetch('numeroSigiloPublico') %>"
7
+ nomeSistemaIntrodutor="<%= client.sistema %>"
8
+ ipMaquinaResponsavelIntervencao = "<%= client.ip %>"
9
+ secaoOrigemDocumento ="<%= metadados.fetch('secaoOrigemDocumento') %>"
10
+ prioridadeReplicacao="<%= metadados.fetch('prioridadeReplicacaoNormal') %>"
11
+ espacoDocumento="<%= metadados.fetch('espacoDocumento') %>"
12
+ indicadorAnotacao="<%= metadados.fetch('indicadorAnotacaoMinutaTemporario') %>"
13
+ nomeMaquinaResponsavelIntervensao="<%= metadados.fetch('nomeMaquinaResponsavelIntervensao') %>"
14
+ >
15
+
16
+ <SecaoDestino idSecao = "<%= metadados.fetch('secaoDestinoIdSecao') %>"/>
17
+
18
+ </MetadadosInclusao>
19
+ </root>
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avmtrf1/red/client'
4
+ require 'avmtrf1/red/helper'
5
+ require 'eac_ruby_utils/simple_cache'
6
+
7
+ module Avmtrf1
8
+ module Red
9
+ class Profile
10
+ include ::Avmtrf1::Red::Helper
11
+ include ::EacRubyUtils::SimpleCache
12
+
13
+ class << self
14
+ def by_ini_profile(ini_profile)
15
+ new(
16
+ ::Avmtrf1::Red::Client.by_ini_profile(ini_profile),
17
+ ini_profile.to_h('metadados.')
18
+ )
19
+ end
20
+ end
21
+
22
+ attr_reader :client, :metadados
23
+
24
+ # @param client [Avmtrf1::Red::Client]
25
+ # @param metadados [Hash]
26
+ def initialize(client, metadados)
27
+ @client = client
28
+ @metadados = metadados.dup.freeze
29
+ end
30
+
31
+ def put_file(file_path)
32
+ auth_url = client.authorization_url
33
+ infov 'Authorization URL', auth_url
34
+ put_file_request(auth_url, file_path)
35
+ end
36
+
37
+ def server
38
+ client.server
39
+ end
40
+
41
+ private
42
+
43
+ def put_file_request(auth_url, file_path)
44
+ post(auth_url, put_file_args(file_path))
45
+ end
46
+
47
+ def put_file_args(file_path)
48
+ {
49
+ body: put_file_body(file_path),
50
+ header: {
51
+ 'Content-Type' => 'multipart/form-data'
52
+ }
53
+ }
54
+ end
55
+
56
+ def metadados_file_path_uncached
57
+ file = Tempfile.new(['red_metadados', '.xml'])
58
+ ::File.write(file.path, xml_content('put_file'))
59
+ file.path
60
+ end
61
+
62
+ def put_file_body(file_path)
63
+ infov 'Metadados', ::File.read(metadados_file_path)
64
+ {
65
+ 'ip' => client.ip,
66
+ 'login' => client.login,
67
+ 'metadado' => ::File.open(metadados_file_path, 'r'),
68
+ 'conteudo' => ::File.open(file_path, 'r')
69
+ }
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avmtrf1/red/client'
4
+
5
+ module Avmtrf1
6
+ module Red
7
+ class Server
8
+ class << self
9
+ def by_ini_profile(ini_profile)
10
+ new(ini_profile.fetch('red.server'))
11
+ end
12
+ end
13
+
14
+ attr_reader :host
15
+
16
+ def initialize(host)
17
+ @host = host
18
+ end
19
+
20
+ def client(login, ip, sistema, nome_maquina)
21
+ ::Avmtrf1::Red::Client.new(self, login, ip, sistema, nome_maquina)
22
+ end
23
+
24
+ def root_url
25
+ "http://#{host}"
26
+ end
27
+
28
+ def resource_url(url_suffix)
29
+ "#{root_url}#{url_suffix}"
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avmtrf1/red/client'
4
+ require 'avmtrf1/red/profile'
5
+ require 'avmtrf1/red/server'
@@ -0,0 +1,87 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/console/docopt_runner'
4
+ require 'eac_ruby_utils/console/speaker'
5
+ require 'eac_ruby_utils/simple_cache'
6
+ require 'avmtrf1/ini'
7
+ require 'avmtrf1/red/profile'
8
+
9
+ module Avmtrf1
10
+ module Tools
11
+ class Runner < ::EacRubyUtils::Console::DocoptRunner
12
+ class Red < ::EacRubyUtils::Console::DocoptRunner
13
+ include ::EacRubyUtils::Console::Speaker
14
+ include ::EacRubyUtils::SimpleCache
15
+
16
+ DOC = <<~DOCOPT
17
+ Utilidades para RED.
18
+
19
+ Usage:
20
+ __PROGRAM__ [options] [-i <red-ini-path>] file put <file>
21
+ __PROGRAM__ -h | --help
22
+
23
+ Options:
24
+ -h --help Mostra esta ajuda.
25
+ -i --red-ini=<red-ini-path> Arquivo red.ini com parâmetros de conexão e upload.
26
+ -p --red-profile=<red-profile> Perfil/seção do red.ini [default: development].
27
+ DOCOPT
28
+
29
+ def run
30
+ start_banner
31
+ if options.fetch('file') && options.fetch('put')
32
+ file_put
33
+ else
34
+ fatal_error('Subcomando não mapeado (Isto é um defeito do software)')
35
+ end
36
+ end
37
+
38
+ def start_banner
39
+ infov 'red.ini', options.fetch('--red-ini')
40
+ infov 'Perfil de red.ini', red_profile_name
41
+ infov 'Arquivo para upload', options.fetch('<file>')
42
+ end
43
+
44
+ def file_put
45
+ result = red_profile.put_file(file)
46
+ require 'pp'
47
+ puts '>' * 20
48
+ puts result
49
+ puts '<' * 20
50
+ end
51
+
52
+ def red_profile_name
53
+ options.fetch('--red-profile')
54
+ end
55
+
56
+ def red_profile_uncached
57
+ ::Avmtrf1::Red::Profile.by_ini_profile(red_ini_profile)
58
+ end
59
+
60
+ def file
61
+ required_file('<file>')
62
+ end
63
+
64
+ def red_ini_path_uncached
65
+ required_file('--red-ini')
66
+ end
67
+
68
+ def red_ini_uncached
69
+ ::Avmtrf1::Ini.new(red_ini_path)
70
+ end
71
+
72
+ def red_ini_profile
73
+ return red_ini.profiles[red_profile_name] if red_ini.profiles.key?(red_profile_name)
74
+
75
+ fatal_error "Perfil/seção \"#{red_profile_name}\" não encontrada em \"#{red_ini_path}\""
76
+ end
77
+
78
+ def required_file(option_key)
79
+ path = options.fetch(option_key)
80
+ return path if path
81
+
82
+ fatal_error("Arquivo \"#{path}\" não existe (Informado na opção #{option_key})")
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/console/docopt_runner'
4
+ require 'avmtrf1/tools/runner/red'
5
+
6
+ module Avmtrf1
7
+ module Tools
8
+ class Runner < ::EacRubyUtils::Console::DocoptRunner
9
+ DOC = <<~DOCOPT
10
+ Utilidades para AVM-TRF1 (http://redmine.trf1.gov.br/projects/avm-trf1).
11
+
12
+ Usage:
13
+ __PROGRAM__ [options] __SUBCOMMANDS__
14
+ __PROGRAM__ -h | --help
15
+
16
+ Options:
17
+ -h --help Show this screen.
18
+ DOCOPT
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avmtrf1
4
+ module Tools
5
+ VERSION = '0.1.0'
6
+ end
7
+ end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avmtrf1/tools/runner'
4
+ require 'avmtrf1/tools/version'
data/lib/avmtrf1.rb ADDED
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avmtrf1
4
+ require 'avmtrf1/patches'
5
+ require 'avmtrf1/tools'
6
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Oracle
4
+ module Commands
5
+ class Base
6
+ def initialize(connection)
7
+ @connection = connection
8
+ end
9
+
10
+ protected
11
+
12
+ attr_reader :connection
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'oracle/commands/base'
4
+
5
+ module Oracle
6
+ module Commands
7
+ class SourceGet < ::Oracle::Commands::Base
8
+ include ::EacRubyUtils::Console::Speaker
9
+
10
+ TABLE = 'all_source'
11
+
12
+ def initialize(connection, options)
13
+ super(connection)
14
+ @name = options[:name]
15
+ @type = options[:type]
16
+ validate
17
+ run
18
+ end
19
+
20
+ private
21
+
22
+ attr_reader :name, :type
23
+
24
+ def validate
25
+ raise '"name" is blank' if name.blank?
26
+ end
27
+
28
+ def run
29
+ infov('Name', name)
30
+ infov('Type', type)
31
+ infov('Found', found_count)
32
+ infov('Enconding', OCI8.encoding)
33
+ connection.query(sql(false)) do |row|
34
+ out(row['TEXT'].encode('UTF-8').to_s)
35
+ end
36
+ end
37
+
38
+ def found_count
39
+ connection.unique_value(sql(true)).to_i
40
+ end
41
+
42
+ def sql(count)
43
+ projection = count ? 'count(*)' : '*'
44
+ selection = "lower(name) = lower('#{name}')"
45
+ selection += " and lower(type) = lower('#{type}')" if type.present?
46
+ "select #{projection} from #{TABLE} where #{selection} order by line"
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'oci8'
4
+
5
+ module Oracle
6
+ module Connection
7
+ class Base
8
+ DEFAULT_PORT = 1521
9
+
10
+ def initialize(connection_string)
11
+ @connection = OCI8.new(connection_string)
12
+ end
13
+
14
+ def unique_value(sql)
15
+ connection.exec(sql) do |row|
16
+ return row.first
17
+ end
18
+ end
19
+
20
+ def query(sql, &block)
21
+ if block
22
+ query_with_block(sql, block)
23
+ else
24
+ query_without_block(sql)
25
+ end
26
+ end
27
+
28
+ private
29
+
30
+ attr_reader :connection
31
+
32
+ def query_without_block(sql)
33
+ connection.exec(sql)
34
+ end
35
+
36
+ def query_with_block(sql, block)
37
+ cursor = query_without_block(sql)
38
+ begin
39
+ while (row = cursor.fetch_hash)
40
+ block.call(row)
41
+ end
42
+ ensure
43
+ cursor.close
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Oracle
4
+ module Connection
5
+ class StringBuilder
6
+ DEFAULT_PORT = 1521
7
+
8
+ FIELDS = %w[user password host port service_name].freeze
9
+
10
+ attr_accessor(*FIELDS)
11
+ attr_accessor :string
12
+
13
+ def initialize(options = nil)
14
+ if options.is_a?(String)
15
+ self.string = options
16
+ elsif options.is_a?(Hash)
17
+ options.each do |k, v|
18
+ send("#{k}=", v)
19
+ end
20
+ end
21
+ end
22
+
23
+ def port
24
+ @port || DEFAULT_PORT
25
+ end
26
+
27
+ def build
28
+ if string
29
+ string
30
+ else
31
+ validate_fields
32
+ "#{user}/#{password}@//#{host}:#{port}/#{service_name}"
33
+ end
34
+ end
35
+
36
+ private
37
+
38
+ def validate_fields
39
+ FIELDS.each { |f| raise "\"#{f}\" is blank" if send(f).blank? }
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'oracle/connection/base.rb'
4
+ require 'oracle/connection/string_builder.rb'
5
+ require 'oracle/commands/source_get.rb'
6
+
7
+ module Oracle
8
+ class Runner < ::EacRubyUtils::Console::DocoptRunner
9
+ include ::EacRubyUtils::Console::Speaker
10
+
11
+ DOC = <<~DOCOPT
12
+ Usage:
13
+ __PROGRAM__ [options] source:get <name> <type>
14
+ __PROGRAM__ -h | --help
15
+
16
+ Options:
17
+ -h --help Show this screen
18
+ -H --host=<host> Host Oracle (Ex.: 172.16.3.3)
19
+ -p --port=<port> Porta Oracle (Ex.: 1521) (Padrão: 1521).
20
+ -s --service-name=<service> Serviço Oracle (Ex.: trf1.trf1.gov.br)
21
+ -u --user=<user> Usuário Oracle
22
+ -w --password=<password> Senha Oracle
23
+ DOCOPT
24
+
25
+ private
26
+
27
+ def run
28
+ run_source_get if options['source:get']
29
+ end
30
+
31
+ def run_source_get
32
+ Oracle::Commands::SourceGet.new(connection, name: options['<name>'], type: options['<type>'])
33
+ end
34
+
35
+ def connection
36
+ @connection ||= ::Oracle::Connection::Base.new(connection_string)
37
+ end
38
+
39
+ def connection_string
40
+ ::Oracle::Connection::StringBuilder.new(
41
+ host: options['--host'],
42
+ port: options['--port'],
43
+ user: options['--user'],
44
+ password: options['--password'],
45
+ service_name: options['--service-name']
46
+ ).build
47
+ end
48
+ end
49
+ end
metadata ADDED
@@ -0,0 +1,166 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: avmtrf1-tools
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Eduardo H. Bogoni
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2019-07-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: eac_ruby_utils
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.7'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: inifile
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: nokogiri
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.8'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.8'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 0.73.0
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 0.73.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop-rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 1.34.0
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 1.34.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: ruby-oci8
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description:
112
+ email:
113
+ executables:
114
+ - avmtrf1
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - Gemfile
119
+ - bin/oracle
120
+ - exe/avmtrf1
121
+ - init.rb
122
+ - lib/avmtrf1.rb
123
+ - lib/avmtrf1/ini.rb
124
+ - lib/avmtrf1/ini/profile.rb
125
+ - lib/avmtrf1/patches.rb
126
+ - lib/avmtrf1/patches/inifile.rb
127
+ - lib/avmtrf1/red.rb
128
+ - lib/avmtrf1/red/client.rb
129
+ - lib/avmtrf1/red/client/authorization.xml.erb
130
+ - lib/avmtrf1/red/helper.rb
131
+ - lib/avmtrf1/red/profile.rb
132
+ - lib/avmtrf1/red/profile/put_file.xml.erb
133
+ - lib/avmtrf1/red/server.rb
134
+ - lib/avmtrf1/tools.rb
135
+ - lib/avmtrf1/tools/runner.rb
136
+ - lib/avmtrf1/tools/runner/red.rb
137
+ - lib/avmtrf1/tools/version.rb
138
+ - lib/oracle/commands/base.rb
139
+ - lib/oracle/commands/source_get.rb
140
+ - lib/oracle/connection/base.rb
141
+ - lib/oracle/connection/string_builder.rb
142
+ - lib/oracle/runner.rb
143
+ homepage: http://redmine.trf1.gov.br/projects/avm-trf1
144
+ licenses: []
145
+ metadata: {}
146
+ post_install_message:
147
+ rdoc_options: []
148
+ require_paths:
149
+ - lib
150
+ required_ruby_version: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - ">="
153
+ - !ruby/object:Gem::Version
154
+ version: '0'
155
+ required_rubygems_version: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ requirements: []
161
+ rubyforge_project:
162
+ rubygems_version: 2.7.7
163
+ signing_key:
164
+ specification_version: 4
165
+ summary: Ferramentas para AVM-TRF1.
166
+ test_files: []