Stop relying on mutable structures in the FileUpdateChecker

This commit is contained in:
José Valim 2012-06-12 10:36:13 +02:00
parent e6ea3fec30
commit 5ea2b11ad7
2 changed files with 7 additions and 35 deletions

@ -35,22 +35,11 @@ class FileUpdateChecker
# have directories as keys and the value is an array of extensions to be
# watched under that directory.
#
# This method must also receive a block that will be called once a path changes.
#
# == Implementation details
#
# This particular implementation checks for added, updated, and removed
# files. Directories lookup are compiled to a glob for performance.
# Therefore, while someone can add new files to the +files+ array after
# initialization (and parts of Rails do depend on this feature), adding
# new directories after initialization is not supported.
#
# Notice that other objects that implement the FileUpdateChecker API may
# not even allow new files to be added after initialization. If this
# is the case, we recommend freezing the +files+ after initialization to
# avoid changes that won't make effect.
# This method must also receive a block that will be called once a path
# changes. The array of files and list of directories cannot be changed
# after FileUpdateChecker has been initialized.
def initialize(files, dirs={}, &block)
@files = files
@files = files.freeze
@glob = compile_glob(dirs)
@block = block

@ -9,25 +9,6 @@ class Railtie < Rails::Railtie
config.i18n.load_path = []
config.i18n.fallbacks = ActiveSupport::OrderedOptions.new
def self.reloader
@reloader ||= ActiveSupport::FileUpdateChecker.new(reloader_paths){ I18n.reload! }
end
def self.reloader_paths
@reloader_paths ||= []
end
# Add <tt>I18n::Railtie.reloader</tt> to ActionDispatch callbacks. Since, at this
# point, no path was added to the reloader, I18n.reload! is not triggered
# on to_prepare callbacks. This will only happen on the config.after_initialize
# callback below.
initializer "i18n.callbacks" do |app|
app.reloaders << I18n::Railtie.reloader
ActionDispatch::Reloader.to_prepare do
I18n::Railtie.reloader.execute_if_updated
end
end
# Set the i18n configuration after initialization since a lot of
# configuration is still usually done in application initializers.
config.after_initialize do |app|
@ -63,7 +44,9 @@ def self.initialize_i18n(app)
init_fallbacks(fallbacks) if fallbacks && validate_fallbacks(fallbacks)
reloader_paths.concat I18n.load_path
reloader = ActiveSupport::FileUpdateChecker.new(I18n.load_path.dup){ I18n.reload! }
app.reloaders << reloader
ActionDispatch::Reloader.to_prepare { reloader.execute_if_updated }
reloader.execute
@i18n_inited = true