Этот крошечный драгоценный камень может быть полезен, если вы столкнулись с проблемами исправления обезьян: (https://github.com/gnovos/ctx). Я изначально написал его для создания более выразительных DSL, позволяя вносить изменения в базовые объекты, не причиняя слишком большого ущерба в другом месте, но, вероятно, его можно использовать для любого количества применений. Он решает некоторые проблемы, связанные с исправлениями обезьян, путем переопределения области видимости в произвольных контекстах, которые могут быть заменены при необходимости.
Если я хочу переопределить метод в каком-то базовом классе (например, в String и т. Д.), Я использую ctx_define вместо «def», а затем заключаю фрагмент кода, который должен использовать новое определение, в блок ctx вот так:
class ::String
ctx_define :dsl, :+ do |other|
"#{self[0].upcase}#{self[1..-1]}#{other.capitalize}"
end
end
puts "this" + "is" + "normal" + "text" + "concatination"
# => thisisnormaltextconcatination
ctx(:dsl) { puts "this" + "is" + "special" + "text" + "concatination" }
# => ThisIsSpecialTextConcatination
Я собрал его всего за несколько минут, так что я не могу дать никаких гарантий о том, насколько он надежен в любом количестве сложных ситуаций, но, похоже, он отлично работает для простых нужд. Посмотрите, если вам интересно, и посмотрите, поможет ли это. :)