[Fwd: Re: Preferred monkeypatching technique]

Daniel Berger wrote:

Well, the idea is that the 3rd party software is going to be using
whatever classes it has always used, so just creating a subclass doesn't
get me anywhere because the 3rd party app (i.e. Rails) doesn't give a
hoot about my BigNozzleFiretruck.

You could use a factory for that, and allow the plugin to override the
factory's creater method.

#!/usr/bin/env ruby

class FireTruck
  def say
    puts "truck"
  end
end

class FireTruckFactory
  def FireTruckFactory.create
    return FireTruck.new
  end
end

# First plugin
class Pumper < FireTruck
  def say
    puts "Pumper here."
  end
end

class FireTruckFactory
  def FireTruckFactory.create
    return Pumper.new
  end
end

# Second plugin
class HookAndLadder < FireTruck
  def say
    puts "Hook and ladder here."
  end
end

class FireTruckFactory
  def FireTruckFactory.create
    return HookAndLadder.new
  end
end

#try it
ft = FireTruckFactory.create
ft.say # => Hook and ladder here.

Regards,
  JJ