Sha256: 8781d0a5f888f0b07925540bd5874749a1719b638c9c053f8dea73f4550dc31f

Contents?: true

Size: 861 Bytes

Versions: 8

Compression:

Stored size: 861 Bytes

Contents

require "metamorpher"

class RefactorWhereFirstMocks
  include Metamorpher::Refactorer
  include Metamorpher::Builders::Ruby

  def pattern
    builder
      .build("TYPE.DOUBLE_METHOD(:where).returns(ARRAY_VALUE)")
      .ensuring("DOUBLE_METHOD") { |m| m.name == :expects || m.name == :stubs }
      .ensuring("ARRAY_VALUE") { |v| v.name == :array }
    # Doesn't match non-array return types, such as Topic.stubs(:where).returns(Topic)
  end

  def replacement
    builder
      .build("TYPE.DOUBLE_METHOD(:find_by).returns(SINGLE_VALUE)")
      .deriving("SINGLE_VALUE", "ARRAY_VALUE") { |array_value| take_first(array_value) }
  end

  private

  # Refactor the argument from [] to nil, or from [X] to X
  def take_first(array_value)
    if array_value.children.empty?
      builder.build("nil")
    else
      array_value.children.first
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
metamorpher-0.2.6 examples/refactorings/rails/where_first/refactorers/refactor_where_first_mocks.rb
metamorpher-0.2.5 examples/refactorings/rails/where_first/refactorers/refactor_where_first_mocks.rb
metamorpher-0.2.4 examples/refactorings/rails/where_first/refactorers/refactor_where_first_mocks.rb
metamorpher-0.2.3 examples/refactorings/rails/where_first/refactorers/refactor_where_first_mocks.rb
metamorpher-0.2.2 examples/refactorings/rails/where_first/refactorers/refactor_where_first_mocks.rb
metamorpher-0.2.1 examples/refactorings/rails/where_first/refactorers/refactor_where_first_mocks.rb
metamorpher-0.2.0 examples/refactorings/rails/where_first/refactorers/refactor_where_first_mocks.rb
metamorpher-0.1.1 examples/refactorings/rails/where_first/refactorers/refactor_where_first_mocks.rb