4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
# File 'lib/webcream/scraper.rb', line 4
def scrape!(page, &block)
@page = page
block_source = block.to_source
if block_source[block_source.length - 1] == '}' then
modified_block = block_source.chop!
modified_block << '; binding }'
else
modified_block = block_source.gsub(/\nend/, "\nbinding \nend")
end
new_block = eval(modified_block)
outer_binding = binding
inner_binding = new_block.call
inner = eval("local_variables", inner_binding)
outer = eval("local_variables", outer_binding)
(inner - outer).each do |item|
singleton_class.class_eval { attr_reader item }
value = eval("#{item.to_s}", inner_binding)
instance_eval("@#{item} = value")
end
end
|