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.
