猴子修补有限范围内的内置ruby类

猴子修补有限范围内的内置ruby类,ruby,dsl,monkeypatching,instance-eval,Ruby,Dsl,Monkeypatching,Instance Eval,我正在开发一个内部Ruby DSL,为了使它看起来尽可能漂亮,我需要对Symbol类进行修补并添加一些操作符。我想负责如何做到这一点,并希望将补丁的范围和生命周期限制为特定的代码块。这样做有标准模式吗?下面是一些伪代码来说明我的想法: class SomeContext def self.monkey_patch_region(&block) context = SomeContext.new context.monkey_patch_Symbol conte

我正在开发一个内部Ruby DSL,为了使它看起来尽可能漂亮,我需要对Symbol类进行修补并添加一些操作符。我想负责如何做到这一点,并希望将补丁的范围和生命周期限制为特定的代码块。这样做有标准模式吗?下面是一些伪代码来说明我的想法:

class SomeContext
  def self.monkey_patch_region(&block)
    context = SomeContext.new
    context.monkey_patch_Symbol
    context.instance_eval(&block)
    context.unmonkey_patch_Symbol
  end

  # magical method
  def monkey_patch_Symbol
    #...
  end

  # another magical method
  def unmonkey_patch_Symbol
    #...
  end

结束

我相信,您正在寻找ruby。该功能已登陆ruby trunk,但可能会在我听说的2.0之前恢复。它的设计目的是混合使用和联X特派团的模块。也许它对monkey和unmonkey补丁有用

更新:mixology对您没有帮助,因为它(un)将模块与对象(与
扩展
)混合,而不是与类(与
包含
)混合,并且您想要monkey/unmockey核心类,而不是它们各自的对象。无论如何,我打算保留这个答案,作为可能对其他人有用的参考。

我已经做了一个简单(但对我来说足够有用)的改进。也许它对某人有用。