Commit afdae5a97e1696823ba24b76826dada70bc45274
1 parent
ef453b43
Exists in
master
and in
29 other branches
plugins: reload extensions before request when needed
Use ActionDispatch::Reloader.to_prepare instead of Rails.configuration.to_prepare. The latter runs the block only once and is not adequate for code that are reloaded upon files changes on each request. As extensions may touch on helpers and controllers, the former suits well. Besides, filters must be loaded after all plugins' extensions, as controllers and helpers needs the "final" code to execute properly. The production behaviour don't change as the code is not reloaded.
Showing
2 changed files
with
14 additions
and
8 deletions
Show diff stats
lib/noosfero/plugin.rb
... | ... | @@ -24,11 +24,17 @@ class Noosfero::Plugin |
24 | 24 | |
25 | 25 | def initialize! |
26 | 26 | return if !should_load |
27 | - available_plugins.each do |plugin_dir| | |
27 | + | |
28 | + klasses = available_plugins.map do |plugin_dir| | |
28 | 29 | plugin_name = File.basename(plugin_dir) |
29 | - plugin = load_plugin(plugin_name) | |
30 | - load_plugin_extensions(plugin_dir) | |
31 | - load_plugin_filters(plugin) | |
30 | + load_plugin plugin_name | |
31 | + end | |
32 | + available_plugins.each do |plugin_dir| | |
33 | + load_plugin_extensions plugin_dir | |
34 | + end | |
35 | + # filters must be loaded after all extensions | |
36 | + klasses.each do |plugin| | |
37 | + load_plugin_filters plugin | |
32 | 38 | end |
33 | 39 | end |
34 | 40 | |
... | ... | @@ -88,7 +94,7 @@ class Noosfero::Plugin |
88 | 94 | # This is a generic method that initialize any possible filter defined by a |
89 | 95 | # plugin to a specific controller |
90 | 96 | def load_plugin_filters(plugin) |
91 | - Rails.configuration.to_prepare do | |
97 | + ActionDispatch::Reloader.to_prepare do | |
92 | 98 | filters = plugin.new.send 'application_controller_filters' rescue [] |
93 | 99 | Noosfero::Plugin.add_controller_filters ApplicationController, plugin, filters |
94 | 100 | |
... | ... | @@ -116,7 +122,7 @@ class Noosfero::Plugin |
116 | 122 | end |
117 | 123 | |
118 | 124 | def load_plugin_extensions(dir) |
119 | - Rails.configuration.to_prepare do | |
125 | + ActionDispatch::Reloader.to_prepare do | |
120 | 126 | Dir[File.join(dir, 'lib', 'ext', '*.rb')].each {|file| require_dependency file } |
121 | 127 | end |
122 | 128 | end |
... | ... | @@ -422,7 +428,7 @@ class Noosfero::Plugin |
422 | 428 | def upload_files_extra_fields(article) |
423 | 429 | nil |
424 | 430 | end |
425 | - | |
431 | + | |
426 | 432 | # -> Adds fields to the signup form |
427 | 433 | # returns = proc that creates html code |
428 | 434 | def signup_extra_contents | ... | ... |
lib/noosfero/plugin/spammable.rb