Wednesday, September 18, 2013

[Rails] Re: Unable to override methods built with alias_method_chain

Frederick Cheung wrote in post #1121711:
> On Tuesday, September 17, 2013 8:59:06 PM UTC+1, Ruby-Forum.com User
> wrote:
>>
> aliasing pretty much creates a copy of a method - later attempts to
> redefine the original method don't affect the copy. For example
>
> class Example
> def foo
> puts "foo"
> end
>
> alias_method :bar, :foo
>
> def foo
> puts "new foo"
> end
> end
>
> Example.new.foo() #=> "new foo"
> Example.new.bar() #=> "foo"
>
> You'll have to do your own alias method chaining when you include your
> module (in newer versions of rails alias_method_chain has falled out of
> favour)
>
> Fred

That's exactly what it was! I had to re-alias the method names.

So the original plugin used alias_method_chain to alias :rewrite,
:rewrite_with_subdomain

I had to restructure my module like this:

module CustomRouting
def included(base)
base.send :alias_method, :rewrite, :rewrite_with_subdomains
end

def native_plugin_method
#successfully invoked
...a bunch of code
super #will call method from SubdomainRoutes::UrlWriter
end

def rewrite_with_subdomains
#method is never invoked
...code
super
end
end

And now my overloaded method is correctly invoked, and the 'super' call
works properly and invokes the previous alias.

This was really complicated. phew

--
Posted via http://www.ruby-forum.com/.

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/d4155e7b902318790b55afddae90ba84%40ruby-forum.com.
For more options, visit https://groups.google.com/groups/opt_out.

0 Comments:

Post a Comment

Subscribe to Post Comments [Atom]

<< Home


Real Estate