class << self, alias_method и monkey patching Mechanize::Cookie
У меня проблема с Mechanize::Cookie, которая плохо себя ведет, и я хочу попытаться ее исправить. Мой код:
class Mechanize::Cookie
class << self; alias_method :old_parse, :parse end
def self.parse(uri, str, log = Mechanize.log)
puts 'new parse!'
#str.gsub!(/domain[^;]*;/,'')
old_parse(uri, str, log)
end
end
когда я добавляю это, куки не добавляются, и я не могу понять, почему.
Изменить: Чтобы увидеть проблему попробуйте этот код с и без патча обезьяны:
agent = Mechanize.new
agent.get 'http://www.google.com/'
pp agent.cookie_jar
Без патча вы увидите полную банку с печеньем, с пустой.
1 ответ
Решение
Похоже, оригинальный метод разбора имеет yield cookie if block_given?
утверждение в нем. Вам также нужно будет пройти блок.
РЕДАКТИРОВАТЬ:
Чтобы быть более понятным...
class Foo
def self.x
yield "yielded from x!" if block_given?
end
end
class Foo
class <<self
alias :y :x
end
# new implementation of x's last parameter is an optional block
def self.x(&block)
puts "in redefined x."
puts "block=#{block}"
self.y(&block) #use the block as the last parameter
end
end
Foo.x{|value| puts "value is '#{value}'"}