class Tapsoob::CLI::Root

Public Instance Methods

pull(dump_path, database_url) click to toggle source
# File lib/tapsoob/cli/root.rb, line 22
def pull(dump_path, database_url)
  opts = parse_opts(options)
  Tapsoob.log.level = Logger::DEBUG if opts[:debug]
  if opts[:resume_filename]
    clientresumexfer(:pull, dump_path, database_url, opts)
  else
    clientxfer(:pull, dump_path, database_url, opts)
  end
end
push(dump_path, database_url) click to toggle source
# File lib/tapsoob/cli/root.rb, line 45
def push(dump_path, database_url)
  opts = parse_opts(options)
  Tapsoob.log.level = Logger::DEBUG if opts[:debug]
  if opts[:resume_filename]
    clientresumexfer(:push, dump_path, database_url, opts)
  else
    clientxfer(:push, dump_path, database_url, opts)
  end
end
version() click to toggle source
# File lib/tapsoob/cli/root.rb, line 56
def version
  puts Tapsoob::VERSION.dup
end

Private Instance Methods

clientresumexfer(method, dump_path, database_url, opts) click to toggle source
# File lib/tapsoob/cli/root.rb, line 120
def clientresumexfer(method, dump_path, database_url, opts)
  session = JSON.parse(File.read(opts.delete(:resume_filename)))
  session.symbolize_recursively!

  dump_path = dump_path || session.delete(:dump_path)

  require 'taps/operation'

  newsession = session.merge({
    :default_chunksize => opts[:default_chunksize],
    :disable_compression => opts[:disable_compression],
    :resume => true
  })

  Tapsoob::Operation.factory(method, database_url, dump_path, newsession).run
end
clientxfer(method, dump_path, database_url, opts) click to toggle source
# File lib/tapsoob/cli/root.rb, line 110
def clientxfer(method, dump_path, database_url, opts)
  Tapsoob::Config.verify_database_url(database_url)

  FileUtils.mkpath "#{dump_path}/schemas"
  FileUtils.mkpath "#{dump_path}/data"
  FileUtils.mkpath "#{dump_path}/indexes"

  Tapsoob::Operation.factory(method, database_url, dump_path, opts).run
end
parse_opts(options) click to toggle source
# File lib/tapsoob/cli/root.rb, line 67
def parse_opts(options)
  # Default options
  opts = {
    skip_schema: options[:"skip-schema"],
    indexes_first: options[:"indexes_first"],
    disable_compression: options[:"disable-compression"],
    debug: options[:debug]
  }

  # Push only options
  opts[:purge] = options[:purge] if options.key?(:purge)
  opts[:"skip-duplicates"] = options[:"skip-duplicates"] if options.key?(:"skip-duplicates")
  opts[:"discard-identity"] = options[:"discard-identity"] if options.key?(:"discard-identity")

  # Resume
  if options[:resume]
    if File.exists?(options[:resume])
      opts[:resume_file] = options[:resume]
    else
      raise "Unable to find resume file."
    end
  end

  # Default chunksize
  if options[:chunksize]
    opts[:default_chunksize] = (options[:chunksize] < 10 ? 10 : options[:chunksize])
  end

  # Regex filter
  opts[:table_filter] = options[:filter] if options[:filter]

  # Table filter
  if options[:tables]
    r_tables = options[:tables].collect { |t| "^#{t}" }.join("|")
    opts[:table_filter] = "#{r_tables}"
  end

  # Exclude tables
  opts[:exclude_tables] = options[:"exclude-tables"] if options[:"exclude-tables"]

  opts
end