Summary

Swap allows dynamically replacing and restoring methods. Useful as a stubbing device, as it allows unstubbing as well.

Examples

require 'swap'

class User
  extend Swappable

  attr_writer :name
  def name
    @name
  end
end

user = User.new
user.name = 'martin'
user.name #=> 'martin'

User.swap!(:name) { @name.reverse }
user.name #=> 'nitram'

User.unswap!(:name)
user.name #=> 'martin'

Calling #unswap! without argument will restore all swapped methods.

See also examples/simple.rb