class Rails5::SpecConverter::CLI

Public Class Methods

new() click to toggle source
# File lib/rails5/spec_converter/cli.rb, line 9
def initialize
  @options = TextTransformerOptions.new
  OptionParser.new do |opts|
    opts.banner = "Usage: rails5-spec-converter [options] [files]"

    opts.on("--version", "Print version number") do |q|
      puts Rails5::SpecConverter::VERSION
      exit
    end

    opts.on("-q", "--quiet", "Run quietly") do |q|
      @options.quiet = q
    end

    opts.on("-i", "--indent INDENT", "Use specified string for indentation (default is two spaces)") do |indent|
      @options.indent = indent.gsub("\\t", "\t")
    end

    opts.on("--[no-]hash-spacing", "Always/never add space around hashes ({foo: 'bar'} vs { foo: 'bar' })") do |hash_spacing|
      @options.hash_spacing = hash_spacing
    end
  end.parse!

  @files = ARGV
end

Public Instance Methods

log(str) click to toggle source
# File lib/rails5/spec_converter/cli.rb, line 50
def log(str)
  return if @options.quiet?

  puts str
end
run() click to toggle source
# File lib/rails5/spec_converter/cli.rb, line 35
def run
  paths = @files.length > 0 ? @files : ["spec/**/*_spec.rb", "test/**/*_test.rb"]

  paths.each do |path|
    Dir.glob(path) do |file_path|
      log "Processing: #{file_path}"

      original_content = File.read(file_path)
      @options.file_path = file_path
      transformed_content = Rails5::SpecConverter::TextTransformer.new(original_content, @options).transform
      File.write(file_path, transformed_content)
    end
  end
end