class Sped2DB::CLI
Constants
- CONFIG_INVALID
- CONFIG_NOT_PROVIDED
- DEFAULT_CONFIG_FILE
- SPED_FILES_NOT_FOUND
- SPED_PATH_INVALID
Attributes
opts[R]
Public Class Methods
new(io = $stdout, extractor = nil, db_tools = nil)
click to toggle source
# File lib/sped2db/cli.rb, line 14 def initialize(io = $stdout, extractor = nil, db_tools = nil) @io = io @extractor = extractor @db_tools = db_tools @exe = 'sped2db' end
Public Instance Methods
run(args)
click to toggle source
# File lib/sped2db/cli.rb, line 21 def run(args) @args = args @opts = parse_args(args) process_opts end
Private Instance Methods
bootstrap_db()
click to toggle source
# File lib/sped2db/cli.rb, line 94 def bootstrap_db @db_tools ||= DbTools.new(@db, @layout) if @db_tools.exists? @io.puts 'Banco de dados existente' else @io.puts 'Criando Banco de dados' @db_tools.create_database end @io.puts 'Criando tabelas' @db_tools.create_tables end
configure_progress_listeners()
click to toggle source
# File lib/sped2db/cli.rb, line 117 def configure_progress_listeners progressbar = nil io = @io files_count = @files_count format_error = method(:format_error) @extractor.on :process_file_start do |file, index| file = File.basename(file) io.puts format("\n[%03d/%03d] %s", index + 1, files_count, file) progressbar = ProgressBar.create(title: 'Progresso', format: '[%B] %p%%', output: io) end @extractor.on :progress do |progress| progressbar.progress = progress if progress > progressbar.progress end @extractor.on(:process_file_end) { progressbar.finish } @extractor.on :error do |e| progressbar.stop io.puts format_error[e] end end
exist_config?()
click to toggle source
# File lib/sped2db/cli.rb, line 173 def exist_config? !opts[:config].nil? || File.exist?(DEFAULT_CONFIG_FILE) end
fetch_db_config()
click to toggle source
# File lib/sped2db/cli.rb, line 66 def fetch_db_config config = opts[:config] || DEFAULT_CONFIG_FILE config_hash = YAML.load_file(config) if File.exist?(config) config_hash || config end
fetch_db_opts()
click to toggle source
# File lib/sped2db/cli.rb, line 72 def fetch_db_opts db_name = opts[:dbname] user = opts[:user] passwd = opts[:passwd] db_opts = {} db_opts.update(database: db_name) unless db_name.nil? db_opts.update(user: user) unless user.nil? db_opts.update(password: passwd) unless passwd.nil? db_opts end
fetch_sped_files()
click to toggle source
# File lib/sped2db/cli.rb, line 83 def fetch_sped_files path = opts.args[0] show_error SPED_PATH_INVALID if path.nil? show_error SPED_PATH_INVALID unless file_or_dir?(path) sped_files = Find.find(path).select { |f| sped_file?(f) } show_error SPED_FILES_NOT_FOUND if sped_files.size.zero? sped_files end
file_or_dir?(path)
click to toggle source
# File lib/sped2db/cli.rb, line 177 def file_or_dir?(path) File.file?(path) || File.directory?(path) end
format_error(e)
click to toggle source
# File lib/sped2db/cli.rb, line 161 def format_error(e) msg = "Erro: #{e.class}: #{e.message}\n#{e.backtrace.first}\n" msg << "Linha #{e.lineno}: #{e.line}" if e.instance_of? SpedError msg end
import()
click to toggle source
# File lib/sped2db/cli.rb, line 108 def import @extractor ||= Extractor.new@sped_files, @db, continue_on_error: opts.continue_on_error? @files_count = @sped_files.size configure_progress_listeners @extractor.import end
parse_args(args)
click to toggle source
# File lib/sped2db/cli.rb, line 30 def parse_args(args) Slop.parse(args) do |o| o.banner = "Uso: #{@exe} [opções] <caminho sped>" o.separator 'Opções:' o.string '-c', '--config', 'Arquivo de configuração ou URI de conexão (default: ./sped2db.yml)' o.string '-n', '--dbname', 'Nome do BD (sobrescreve config)' o.string '-u', '--user', 'Nome do usuário do BD (sobrescreve config)' o.string '-p', '--passwd', 'Senha do usuário (sobrescreve config)' o.bool '-e', '--continue-on-error', 'Continua se encontrar erro (default: false)', default: false o.on('-v', '--version') { show_version } o.on('-h', '--help') { show_help(o) } end end
process_opts()
click to toggle source
# File lib/sped2db/cli.rb, line 46 def process_opts show_help if @args.nil? || @args.empty? show_error CONFIG_NOT_PROVIDED unless exist_config? db_config = fetch_db_config db_opts = fetch_db_opts @sped_files = fetch_sped_files @layout = get_layout @sped_files.first @io.puts "SPED #{@layout.type.to_s.capitalize} v#{@layout.version}" @db = Sequel.connect(db_config, db_opts) bootstrap_db import rescue => e @io.puts format_error(e) ensure @db.disconnect unless @db.nil? end
show_error(msg)
click to toggle source
# File lib/sped2db/cli.rb, line 167 def show_error(msg) @io.puts "Erro: #{msg}" @io.puts "Para mais detalhes: #{@exe} --help" exit 1 end
show_help(opts = nil)
click to toggle source
# File lib/sped2db/cli.rb, line 143 def show_help(opts = nil) @io.puts opts || @opts @io.puts "\nExemplos:" @io.puts "\n# Usa configurações de conexão do sped2db.yml no diretório" @io.puts '# atual e carrega arquivo ~/sped.txt no BD teste' @io.puts "#{@exe} -n teste ~/sped.txt" @io.puts "\n# Usa configurações de conexão contidas em ~/database.yml" @io.puts '# com usuário john, senha 123 e carrega arquivo ~/sped.txt' @io.puts "#{@exe} -c ~/database.yml -u john -p 123 ~/sped.txt" @io.puts "\n# Usa URI de conexão e carrega todos os arquivos SPED do" @io.puts '# diretório ~/sped-files/, mesmo se algum tiver erros' @io.puts "#{@exe} -c postgres://localhost/teste -e ~/sped-files/" exit end
show_version()
click to toggle source
# File lib/sped2db/cli.rb, line 138 def show_version @io.puts Sped2DB::VERSION exit end