class MinitestToRspec::CLI

Command-Line Interface (CLI) instantiated by `bin/mt2rspec`

Constants

E_CANNOT_CREATE_TARGET_DIR
E_CONVERT_FAIL
E_FILE_ALREADY_EXISTS
E_FILE_NOT_FOUND
E_USAGE
OPT_MOCHA
OPT_RAILS

Attributes

source[R]
target[R]

Public Class Methods

new(args) click to toggle source
# File lib/minitest_to_rspec/cli.rb, line 34
def initialize(args)
  opts = parse_args(args)
  @rails = opts[:rails]
  @mocha = opts[:mocha]
  case args.length
  when 2
    @source, @target = args
  when 1
    @source = args[0]
    @target = infer_target_from @source
  else
    warn 'Please specify source file'
    exit E_USAGE
  end
end

Public Instance Methods

run() click to toggle source
# File lib/minitest_to_rspec/cli.rb, line 50
def run
  assert_file_exists(source)
  assert_file_does_not_exist(target)
  ensure_target_directory(target)
  write_target(converter.convert(read_source, source))
rescue Error => e
  warn "Failed to convert: #{e}"
  exit E_CONVERT_FAIL
end

Private Instance Methods

assert_file_does_not_exist(file) click to toggle source
# File lib/minitest_to_rspec/cli.rb, line 69
def assert_file_does_not_exist(file)
  if File.exist?(file)
    warn "File already exists: #{file}"
    exit(E_FILE_ALREADY_EXISTS)
  end
end
assert_file_exists(file) click to toggle source
# File lib/minitest_to_rspec/cli.rb, line 62
def assert_file_exists(file)
  unless File.exist?(file)
    warn "File not found: #{file}"
    exit(E_FILE_NOT_FOUND)
  end
end
converter() click to toggle source
# File lib/minitest_to_rspec/cli.rb, line 76
def converter
  Converter.new(mocha: @mocha, rails: @rails)
end
ensure_target_directory(target) click to toggle source
# File lib/minitest_to_rspec/cli.rb, line 80
def ensure_target_directory(target)
  dir = File.dirname(target)
  return if Dir.exist?(dir)
  begin
    FileUtils.mkdir_p(dir)
  rescue SystemCallError => e
    warn "Cannot create target dir: #{dir}"
    warn e.message
    exit E_CANNOT_CREATE_TARGET_DIR
  end
end
infer_target_from(source) click to toggle source
# File lib/minitest_to_rspec/cli.rb, line 92
def infer_target_from(source)
  source
    .gsub(/\Atest/, 'spec')
    .gsub(/_test.rb\Z/, '_spec.rb')
end
parse_args(args) click to toggle source
# File lib/minitest_to_rspec/cli.rb, line 98
def parse_args(args)
  Trollop.options(args) do
    version MinitestToRspec.gem_version.to_s
    banner BANNER
    opt :rails, OPT_RAILS, short: :none
    opt :mocha, OPT_MOCHA, short: :none
  end
end
read_source() click to toggle source
# File lib/minitest_to_rspec/cli.rb, line 107
def read_source
  File.read(source)
end
write_target(str) click to toggle source
# File lib/minitest_to_rspec/cli.rb, line 111
def write_target(str)
  File.write(target, str)
end