henry_flower: A melancholy wolf (Default)
henry_flower ([personal profile] henry_flower) wrote2012-03-07 12:36 am
Entry tags:

Никак не мог понять, почему File.open у меня в глубине тесто

Никак не мог понять, почему File.open у меня в глубине тестов как-то странно себя ведет в таком:

# a very silly analogue to "sed -i'' -E 's/foo/bar/g' file"
def sed(file, re, repl)
o = File.read(file).gsub(re, repl)
File.open(file, 'w+') {|fp| fp.write(o) }
end

Первый раз на каком-то файле оно работает, а дальше sed() ничего в этот же файл не записывает. Что за... Потом нашел:

class File
class << self
alias_method :old_open, :open
def open(*args, &block)
case args[0]
when :foo
StringIO.new "Line 1\nLine 2"

[...]

else
### ШО ЦЭ?
block ? block.call(old_open(*args)) : old_open(*args)
end
end
end
end

Поменял на:

old_open(*args, &block)

Если человек идиот, то это навсегдa надолго.

Permalink: https://plus.google.com/115290581164606462017/posts/9bDTFxMW6v4