teodoro 0.0.3 → 0.0.8

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: 5c32ef55e3371462d555ae6a8ff7ee9b4e0a3a5a8ea1fa9ad934075b5d1947f1
4
- data.tar.gz: 4f3b5c2d251a73d2ac4e57396396cd998d14b3436f98327526aa2eb8c5ac4546
3
+ metadata.gz: 715220b95bb70bc46665ecff3b112fc2d5ed6496ce069c1f186b9c2763b28c90
4
+ data.tar.gz: 753ce68d220b8134f457df47ac6cefd007530a10d51534689e816a091819228d
5
5
  SHA512:
6
- metadata.gz: d801ca25c9f3525526162aea27aaaf9c36df2d314ebeac6816be33d0fbd627042119b9356f8ed3662ca9fa3cf3dafb8d2027d5daef5296cae7c5720e32caba1c
7
- data.tar.gz: ef51ce23964d8378b61f58c130e996e44b4f6393eaa7106474d02dbe8860c337c1391d500d947c61fd132d64e60e888b9281523bfde0b77cd55cde79f689e46a
6
+ metadata.gz: 8ae28ea683456163c96e3efa9f78bcc9b3f880826bb46c2267a608757c0d8f8225e5209c19bf1b46e916d4724c240272813274c336c3221cdd46c5e144fa386e
7
+ data.tar.gz: f9c43aabab55122d8ca1044da63a0496baeacd6039cfdfc5a00679b508fe9744d2ea1188a6523ab340a44fb03a0c93e8a6543574be364bb12a7147c5f2e4f828
data/bin/teodoro CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env ruby
2
2
  require 'teodoro'
3
- Teodoro.call
3
+ Teodoro.call(ARGV)
data/lib/teodoro.rb CHANGED
@@ -1,7 +1,81 @@
1
- require_relative 'teodoro/execucao'
1
+ require 'nokogiri'
2
+ require 'os'
3
+ require 'zip'
4
+
5
+ require_relative 'teodoro/console'
6
+ require_relative 'teodoro/empresa'
2
7
 
3
8
  module Teodoro
4
- def self.call
5
- Execucao.new(origem: ARGV[0], destino: ARGV[1]).call
9
+ def self.call(args)
10
+ Execution.new(args).call
11
+ end
12
+
13
+ class Execution
14
+ NOME_DO_PROGRAMA = 'teodoro'.freeze
15
+
16
+ private
17
+
18
+ def initialize(args)
19
+ @args = args
20
+ end
21
+
22
+ attr_reader :args
23
+
24
+ public
25
+
26
+ def call
27
+ executar
28
+ rescue StandardError => e
29
+ Console.print e.message, *e.backtrace, color: :red
30
+ exit
31
+ end
32
+
33
+ private
34
+
35
+ def executar
36
+ validar_argumentos
37
+ validar_existencia_do_diretorio_de_origem
38
+ validar_que_diretorio_de_origem_nao_esta_vazio
39
+ validar_que_diretorio_de_destino_esta_vazio
40
+
41
+ processar_empresas
42
+ end
43
+
44
+ def validar_argumentos
45
+ erro "#{NOME_DO_PROGRAMA} [diretório de origem] [diretório de destino]" unless args.size == 2
46
+ end
47
+
48
+ def validar_existencia_do_diretorio_de_origem
49
+ erro 'Diretório de origem não existe.' unless File.directory?(origem)
50
+ end
51
+
52
+ def origem
53
+ @origem ||= args[0]
54
+ end
55
+
56
+ def validar_que_diretorio_de_origem_nao_esta_vazio
57
+ erro 'Diretório de origem vazio.' if Dir.empty?(origem)
58
+ end
59
+
60
+ def validar_que_diretorio_de_destino_esta_vazio
61
+ erro 'Diretório de destino deve estar vazio.' unless Dir.empty?(destino)
62
+ end
63
+
64
+ def destino
65
+ @destino ||= args[1]
66
+ end
67
+
68
+ def erro(erro)
69
+ puts erro
70
+ exit
71
+ end
72
+
73
+ def processar_empresas
74
+ empresas.each(&:processar)
75
+ end
76
+
77
+ def empresas
78
+ Dir[File.join(origem, '*')].map { |caminho| Empresa.new(caminho: caminho, destino: destino) }
79
+ end
6
80
  end
7
81
  end
@@ -5,9 +5,22 @@ module Teodoro
5
5
  attr_reader :xml_do_evento, :xml_do_recibo, :destino_dos_arquivos_data
6
6
 
7
7
  def criar_arquivo_data
8
+ raise caminho_do_arquivo_data if File.exist?(caminho_do_arquivo_data)
9
+
8
10
  File.write(caminho_do_arquivo_data, conteudo_do_arquivo_data)
9
11
  end
10
12
 
13
+ def criar_caminho_do_arquivo_data(nome_do_arquivo)
14
+ File.join(
15
+ destino_dos_arquivos_data,
16
+ "#{windows? ? nome_do_arquivo.gsub(%r{[<|>:"/\\?*]}, '_') : nome_do_arquivo}.data"
17
+ )
18
+ end
19
+
20
+ def windows?
21
+ OS.windows?
22
+ end
23
+
11
24
  def evento
12
25
  @evento ||= XML.new(xml_do_evento)
13
26
  end
@@ -38,10 +38,7 @@ module Teodoro
38
38
  end
39
39
 
40
40
  def obter_caminho_do_arquivo_data(inicio_da_validade)
41
- File.join(
42
- destino_dos_arquivos_data,
43
- "#{nome_base_do_arquivo_data}[#{inicio_da_validade.delete('-')}].data"
44
- )
41
+ criar_caminho_do_arquivo_data("#{nome_base_do_arquivo_data}[#{inicio_da_validade.delete('-')}]")
45
42
  end
46
43
 
47
44
  def nome_base_do_arquivo_data
@@ -32,7 +32,7 @@ module Teodoro
32
32
  end
33
33
 
34
34
  def caminho_do_arquivo_data_original
35
- File.join(destino_dos_arquivos_data, "#{nome_do_arquivo_original}.data")
35
+ criar_caminho_do_arquivo_data(nome_do_arquivo_original)
36
36
  end
37
37
 
38
38
  def nome_do_arquivo_original
@@ -52,7 +52,7 @@ module Teodoro
52
52
  end
53
53
 
54
54
  def caminho_do_arquivo_data
55
- File.join(destino_dos_arquivos_data, "#{nome_do_arquivo_data}.data")
55
+ criar_caminho_do_arquivo_data(nome_do_arquivo_data)
56
56
  end
57
57
  end
58
58
  end
@@ -14,7 +14,7 @@ module Teodoro
14
14
  public
15
15
 
16
16
  def descompactar
17
- puts File.basename(caminho)
17
+ print "\e[2Kdescompactando #{File.basename(caminho)}...\r"
18
18
 
19
19
  Zip::File.open(caminho) do |zip|
20
20
  zip
@@ -24,6 +24,8 @@ module Teodoro
24
24
  end
25
25
 
26
26
  def processar
27
+ print "\e[2Kprocessando #{nome}.xml...\r"
28
+
27
29
  return unless %w[S1000 S1005 S1010 S1020 S1030 S1040 S1050 S1070 S2190 S2200 S2205 S2206 S2230 S2250 S2300 S2306]
28
30
  .include?(tipo_de_evento)
29
31
 
@@ -21,12 +21,12 @@ module Teodoro
21
21
  descompactar_arquivos_de_origem
22
22
  criar_diretorio_dos_arquivos_data
23
23
  processar_arquivos_xml
24
+ limpar_linha_de_feedback
24
25
  end
25
26
 
26
27
  private
27
28
 
28
29
  def dar_feedback_para_o_usuario
29
- puts ''
30
30
  Console.print nome_do_diretorio, color: :green
31
31
  end
32
32
 
@@ -81,5 +81,9 @@ module Teodoro
81
81
  def de_recibo_para_nome_do_arquivo_data
82
82
  @de_recibo_para_nome_do_arquivo_data ||= {}
83
83
  end
84
+
85
+ def limpar_linha_de_feedback
86
+ print "\e[2K"
87
+ end
84
88
  end
85
89
  end
@@ -18,7 +18,11 @@ module Teodoro
18
18
  end
19
19
 
20
20
  def identificacao_do_arquivo_data
21
- ['RUB', codigo]
21
+ ['RUB', "#{identificador_da_tabela_de_rubricas}_#{codigo}"] # FIXME: Tales
22
+ end
23
+
24
+ def identificador_da_tabela_de_rubricas
25
+ @identificador_da_tabela_de_rubricas ||= evento['evtTabRubrica/infoRubrica/*/ideRubrica/ideTabRubr']
22
26
  end
23
27
 
24
28
  def codigo
@@ -36,7 +40,7 @@ module Teodoro
36
40
  ['InicioValidade', inicio_da_validade],
37
41
  ['FimValidade', fim_da_validade],
38
42
  ['chkIdTabelaRubrica'],
39
- ['IdTabelaRubrica', evento['evtTabRubrica/infoRubrica/*/ideRubrica/ideTabRubr']],
43
+ ['IdTabelaRubrica', identificador_da_tabela_de_rubricas],
40
44
  ['IdTabelaRubricaText'],
41
45
  ['DadosRubrica_Descricao', evento['evtTabRubrica/infoRubrica/*/dadosRubrica/dscRubr']],
42
46
  ['DadosRubrica_Natureza', evento['evtTabRubrica/infoRubrica/*/dadosRubrica/natRubr']],
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: teodoro
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Clavius Tales
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-04-08 00:00:00.000000000 Z
11
+ date: 2021-04-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.11'
27
+ - !ruby/object:Gem::Dependency
28
+ name: os
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.1'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.1'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rubyzip
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -38,6 +52,20 @@ dependencies:
38
52
  - - "~>"
39
53
  - !ruby/object:Gem::Version
40
54
  version: '2.3'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: byebug
43
71
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +80,20 @@ dependencies:
52
80
  - - ">="
53
81
  - !ruby/object:Gem::Version
54
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
55
97
  - !ruby/object:Gem::Dependency
56
98
  name: rspec
57
99
  requirement: !ruby/object:Gem::Requirement
@@ -139,7 +181,6 @@ files:
139
181
  - lib/teodoro/cnpj.rb
140
182
  - lib/teodoro/console.rb
141
183
  - lib/teodoro/empresa.rb
142
- - lib/teodoro/execucao.rb
143
184
  - lib/teodoro/leiaute_2_4_1.rb
144
185
  - lib/teodoro/leiaute_2_4_1/arquivo_s1000.rb
145
186
  - lib/teodoro/leiaute_2_4_1/arquivo_s1005.rb
@@ -1,62 +0,0 @@
1
- require 'nokogiri'
2
- require 'zip'
3
-
4
- require_relative 'console'
5
- require_relative 'empresa'
6
-
7
- module Teodoro
8
- class Execucao
9
- private
10
-
11
- def initialize(origem:, destino:)
12
- @origem = origem
13
- @destino = destino
14
- end
15
-
16
- attr_reader :origem, :destino
17
-
18
- public
19
-
20
- def call
21
- executar
22
- rescue StandardError => e
23
- Console.print e.message, *e.backtrace, color: :red
24
- exit
25
- end
26
-
27
- private
28
-
29
- def executar
30
- validar_existencia_do_diretorio_de_origem
31
- validar_que_diretorio_de_origem_nao_esta_vazio
32
- validar_que_diretorio_de_destino_esta_vazio
33
-
34
- processar_empresas
35
- end
36
-
37
- def validar_existencia_do_diretorio_de_origem
38
- erro 'Diretório de origem não existe.' unless File.directory?(origem)
39
- end
40
-
41
- def validar_que_diretorio_de_origem_nao_esta_vazio
42
- erro 'Diretório de origem vazio.' if Dir.empty?(origem)
43
- end
44
-
45
- def validar_que_diretorio_de_destino_esta_vazio
46
- erro 'Diretório de destino deve estar vazio.' unless Dir.empty?(destino)
47
- end
48
-
49
- def erro(erro)
50
- puts erro
51
- exit
52
- end
53
-
54
- def processar_empresas
55
- empresas.each(&:processar)
56
- end
57
-
58
- def empresas
59
- Dir[File.join(origem, '*')].map { |caminho| Empresa.new(caminho: caminho, destino: destino) }
60
- end
61
- end
62
- end