Sha256: 9ab05722fdb8e5f737ca476e29d6c34ff9d0aca219a84fc06a984e337944d62b

Contents?: true

Size: 1.59 KB

Versions: 4

Compression:

Stored size: 1.59 KB

Contents

require "optparse"
require_relative "refactorers/refactor_where_first_to_find_by.rb"
require_relative "refactorers/refactor_where_first_not_called_expectations.rb"
require_relative "refactorers/refactor_where_first_mocks.rb"
require_relative "refactorers/refactor_where_first_strict_mocks.rb"

options = { overwrite: true }
OptionParser.new do |opts|
  opts.banner = "Usage: refactorer.rb [options]"

  opts.on("-d", "--dry-run", "Write changes to console, rather than to source files.") do |_v|
    options[:overwrite] = false
  end
end.parse!

source_dir = ARGV.first || "."
base = File.expand_path(File.join("**", "*.rb"), source_dir)
puts "Refactoring in source directory: #{base}"

[
  # Refactor "where(...).first -> find_by(...)"
  RefactorWhereFirstToFindBy,

  # Refactor ".expect(:where).never" to ".expect(:find_by).never"
  RefactorWhereFirstNotCalledExpectations,

  # Refactor ".expect(:where).return([X])" to ".expect(:find_by).return(X)"
  #      and ".stubs(:where).return([X])" to ".stubs(:find_by).return(X)"
  RefactorWhereFirstMocks,

  # Refactor ".expect(:where).with(...).return([X])" to ".expect(:find_by).with(...).return(X)"
  RefactorWhereFirstStrictMocks

].each do |refactorer|
  refactorer.new.refactor_files(Dir.glob(base)) do |path, refactored, changes|
    if changes.empty?
      puts "No changes in #{path}"

    else
      puts "In #{path}:"

      changes.each do |change|
        puts "\tAt #{change.original_position}, inserting:\n\t\t#{change.transformed_code}"
        puts ""
      end

      File.open(path, "w") { |f| f.write(refactored) } if options[:overwrite]
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
metamorpher-0.2.6 examples/refactorings/rails/where_first/app.rb
metamorpher-0.2.5 examples/refactorings/rails/where_first/app.rb
metamorpher-0.2.4 examples/refactorings/rails/where_first/app.rb
metamorpher-0.2.3 examples/refactorings/rails/where_first/app.rb