Why does `send` fail with Ruby 2.0 refinement?

ruby, ruby-2.0

Solution

Because the specification says so:

Indirect method accesses

Any indirect method access such as `Kernel#send`, `Kernel#method`, and `Kernel#respond_to?` shall not honor refinements in the caller context during method lookup.

Problem

Why does this not work? ``` module StringRefinement refine String do def bar length end end end using StringRefinement "abcdefghijklmnopqrstuvwxyz".send(:bar) #NoMethodError: undefined method 'bar' for "abcdefghijklmnopqrstuvwxyz":String ``` Can someone explain why `send` doesn't work here? And is there a way to dynamically call methods defined in a refinement? I can't seem to find a good, full explanation of how refinements work in Ruby 2.0.

Original source