banister / method_source

return the sourcecode for a method

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Exclude Proc#source Enclosure

bryanp opened this issue · comments

Hit a case where I need the Proc source without the enclosure. For example:

p = Proc.new do
  puts 'proc'
end

p.source currently gives me all three lines, but I really want:

puts 'proc'

There doesn't appear to be a way to do this. Possible to add?

It'll be quite hard. The way we currently do this is find the first line of the method, and then extract one complete expression from ruby. To get it without the begin end, it might be sufficient to drop the last end, and delete everything up to the first do or {; but there'll obviously be edge-cases.

Eh, that's what I was afraid of. I may work on a solution for easy cases. If so I'll be sure to send a PR along.

There's a crazy gem called sourcify which uses its own ragel scanner to do this accurately, you might get some mileague with that ;)

Tried sourcify before method_source. It failed anytime a string was defined with double quotes.

Simple is better, I think.