Using pre-existing libraries can save you development time. Unfortunately, the quality of Ruby plugins and gems can be highly variable.

Kernel#__method__ as defined in the aws-s3 gem:

unless (RUBY_VERSION[0,3] == '1.9') module Kernel def __method__ /\`([^\']+)\'/.match(caller(1).first)[1].to_sym end # ... end end

Kernel#__method__ as defined in the facets gem:

module Kernel def __method__(depth = 0) caller[depth][/`([^']+)'/, 1] end if RUBY_VERSION <= '1.8.7' # ... end

Can you guess what happens when both are loaded?

One definition wins. Something breaks.

So which one is right?

Neither.

Please don’t write code like this.