Исправление Monkey, встроенное -в рубиновые классы в ограниченных областях

Я работаю над внутренним 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

конец

5
задан davidk01 12 August 2012 в 07:00
поделиться