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.