class SPED2SQL::Conversor
Attributes
fonte[R]
memoria[R]
options[R]
saida[R]
template[R]
Public Class Methods
new(fonte, template, options = {})
click to toggle source
Calls superclass method
# File lib/sped2sql/conversor.rb, line 7 def initialize(fonte, template, options = {}) @fonte = fonte @template = template.is_a?(Symbol) ? Mapa.arquivo_template(template) : template @saida = [] @memoria = Hash.new { |k, v| k[v] = [] } @options = options valida_arquivo(@fonte) valida_arquivo(@template) tasks = if options[:tasks].is_a?(Array) options[:tasks] elsif options[:tasks] == :vazio [] else [Pipeline::NormalizaSQL, Pipeline::AddHash] end super(tasks) end
Public Instance Methods
converter!()
click to toggle source
# File lib/sped2sql/conversor.rb, line 28 def converter! mapa = Mapa.carrega!(@template) dados = IO.read(fonte, encoding: 'ISO-8859-1').gsub("'", '"') CSV.parse(dados, col_sep: '|', quote_char: "'") do |row| # pula linha se o registro nao existe no mapa next unless mapa.has_key?(row[1]) # O primeiro e o ultimo item de uma linha no SPED sempre eh nulo linha = row.clone[1..-2] # Executa o pipe pipe = execute({ original: linha, final: linha, mapa: mapa, memoria: @memoria, saida: @saida, options: @options }) @saida << pipe[:final] @memoria[linha.first] << pipe[:final] # Para um arquivo completo do SPED, 9999 eh o ultimo registro. # termina a leitura do arquivo no registro 9999 evitando ler # linhas em branco ou assinatura digital break if linha[0].to_i == 9999 end end
to_sql()
click to toggle source
# File lib/sped2sql/conversor.rb, line 57 def to_sql SQL::Parser.to_sql(@saida, @options[:db] || {}) end
Private Instance Methods
valida_arquivo(file)
click to toggle source
# File lib/sped2sql/conversor.rb, line 63 def valida_arquivo(file) fail(ArgumentError, "Arquivo inexistente: #{file}") unless File.exist?(file) end