lib/shiba/configure.rb in shiba-0.1.1 vs lib/shiba/configure.rb in shiba-0.1.2

- old
+ new

@@ -1,31 +1,103 @@ require 'pathname' - +require 'pp' module Shiba - module Configure + module Configure - # avoiding Rails dependency on the cli tools for now. - # yanked from https://github.com/rails/rails/blob/v5.0.5/railties/lib/rails/application/configuration.rb - def self.activerecord_configuration - yaml = Pathname.new("config/database.yml") + # avoiding Rails dependency on the cli tools for now. + # yanked from https://github.com/rails/rails/blob/v5.0.5/railties/lib/rails/application/configuration.rb + def self.activerecord_configuration + yaml = Pathname.new("config/database.yml") - config = if yaml && yaml.exist? - require "yaml" - require "erb" - YAML.load(ERB.new(yaml.read).result) || {} - elsif ENV['DATABASE_URL'] - # Value from ENV['DATABASE_URL'] is set to default database connection - # by Active Record. - {} - end + config = if yaml && yaml.exist? + require "yaml" + require "erb" + YAML.load(ERB.new(yaml.read).result) || {} + elsif ENV['DATABASE_URL'] + # Value from ENV['DATABASE_URL'] is set to default database connection + # by Active Record. + {} + end - config - rescue Psych::SyntaxError => e - raise "YAML syntax error occurred while parsing #{yaml.to_s}. " \ - "Please note that YAML must be consistently indented using spaces. Tabs are not allowed. " \ - "Error: #{e.message}" - rescue => e - raise e, "Cannot load `#{path}`:\n#{e.message}", e.backtrace + config + rescue Psych::SyntaxError => e + raise "YAML syntax error occurred while parsing #{yaml.to_s}. " \ + "Please note that YAML must be consistently indented using spaces. Tabs are not allowed. " \ + "Error: #{e.message}" + rescue => e + raise e, "Cannot load `#{path}`:\n#{e.message}", e.backtrace + end + + def self.read_config_file(option_file, default) + file_to_read = nil + if option_file + if !File.exist?(option_file) + $stderr.puts "no such file: #{option_file}" + exit 1 end + file_to_read = option_file + elsif File.exist?(default) + file_to_read = default + end + if file_to_read + YAML.load_file(file_to_read) + else + {} + end end -end \ No newline at end of file + + def self.make_options_parser(options) + parser = OptionParser.new do |opts| + # note that the key to the hash needs to stay the same as the + # option name since we re-pass them + opts.on("-h","--host HOST", "sql host") do |h| + options["host"] = h + end + + opts.on("-d","--database DATABASE", "sql database") do |d| + options["database"] = d + end + + opts.on("-u","--username USER", "sql user") do |u| + options["username"] = u + end + + opts.on("-p","--password PASSWORD", "sql password") do |p| + options["password"] = p + end + + opts.on("-c","--config FILE", "location of shiba.yml") do |f| + options["config"] = f + end + + opts.on("-i","--index INDEX", "location of shiba_index.yml") do |i| + options["index"] = i.to_i + end + + opts.on("-l", "--limit NUM", "stop after processing NUM queries") do |l| + options["limit"] = l.to_i + end + + opts.on("-s","--stats FILES", "location of index statistics tsv file") do |f| + options["stats"] = f + end + + opts.on("-f", "--file FILE", "location of file containing queries") do |f| + options["file"] = f + end + + opts.on("-e", "--explain FILE", "write explain JSON to file. default: stdout") do |f| + options["explain"] = f + end + + opts.on("-o", "--output PATH", "path to put generated report in. default: /tmp") do |p| + options["output"] = p + end + + opts.on("-t", "--test", "analyze queries at --file instead of analyzing a process") do |f| + options["test"] = true + end + end + end + end +end