I just got educated by drogus that the problem is the module_eval with 
include:


module UrlHelpers
  def fruit_path
  end
end

A.module_eval do
  include UrlHelpers
end

Object.new.extend(B).fruit_path
#=> NoMethodError: undefined method `fruit_path' for #<Object:0x964c540>

So obviously, when including modules into source modules it is not 
propagated properly to the includer.

On Thursday, June 28, 2012 9:41:13 AM UTC+2, Nick Sutterer wrote:
>
> I'd like to state that this behaviour usually works in Ruby:
>
> module A
> end
>
> module B
>   include A
> end
>
> A.module_eval do
>   def a
>     "Hey from A!"
>   end
> end
>
> Object.new.extend(B).a #=> "Hey from A!"
>
> On Wednesday, June 27, 2012 6:43:00 PM UTC+2, Nick Sutterer wrote:
>>
>> Hi friends,
>>
>> I found a bug (?) with routes.url_helpers. Let's say my routes file 
>> contains
>>
>>   resources :fruits
>>
>> Now I have the following setup:
>>
>> module A
>> end
>>
>> module B
>>   include A
>> end
>>
>> A.module_eval do
>>    include Rails.application.routes.url_helpers
>> end
>>
>> Object.new.extend(A).fruit_path #=> That works.
>> Object.new.extend(B).fruit_path #=> NoMethodError: undefined method 
>> `fruit_path' for #<Object:0x98e56d0>
>>
>> In a proper Ruby setup B should have references to any method in A. 
>> Obviously, this doesn't work with url_helpers. I didn't check its 
>> implementation so far, is there any magic done inside the url_helpers that 
>> breaks the expected behaviour?
>>
>> Nick 
>>
>

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/rubyonrails-core/-/v6y6jFdjktMJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-core?hl=en.

Reply via email to