On Apr 8, 5:06pm, Frederick C. [email protected]
wrote:
Because you’re in development mode, the app’s code, including
application_helper is reloaded for each request, but your plugin’s
init.rb is only called once and never gets to do your monkey patching
on the reloaded copies of application helper
You might be able to use a to_prepare callback (these get called
before each request in development mode) if you’re going to use this a
lot in development mode - take a peek inside action_dispatch/
middleware/callbacks
Yes, but I was using a to_prepare block (w/o actually understanding
what it does, though.)
So what I now actually have in init.rb is this:
Dispatcher.to_prepare :redmine_model_dependencies do
puts “!!! to_prepare block !!!”
require_dependency ‘application_helper’
unless ApplicationHelper.included_modules.include?
RedminePastebin::ApplicationHelperPatch
ApplicationHelper.send(:include,
RedminePastebin::ApplicationHelperPatch)
end
end
If I put some logging lines into redmine’s application_helper.rb, I
can get this:
module ApplicationHelper
def self.included(base)
puts “ApplicationHelper: INCLUDED: #{self.method_defined?
(:parse_redmine_links_with_pastes)}”
end
…
def parse_redmine_links(text, project, obj, attr, only_path,
options)
logger.info “parse_redmine_links”
…
And in my patch-module I have this log line:
def parse_redmine_links_with_pastes(text, project, obj, attr,
only_path,
options)
logger.info “parse_redmine_links_with_pastes”
…
Now for the first page load I get these:
ApplicationHelper: INCLUDED: false
ApplicationHelper: INCLUDED: false
!!! to_prepare block !!!
=> Call with -d to detach
=> Ctrl-C to shutdown server
!!! to_prepare block !!!
ApplicationHelper: INCLUDED: true
…
parse_redmine_links_with_pastes
…
and for the second load, these:
!!! to_prepare block !!!
ApplicationHelper: INCLUDED: true
ApplicationHelper: INCLUDED: true
ApplicationHelper: INCLUDED: true
…
parse_redmine_links
So original unmodified method is called regardless of the fact that
the new one is defined…
I guess I need to move that alias_method_chain call somewhere else so
it’s called on every page load. How do I do so?
–
Thanks,
Alex