diff options
author | José Valim and Mikel Lindsaar <pair@programming.com> | 2010-01-25 09:50:01 +1100 |
---|---|---|
committer | José Valim and Mikel Lindsaar <pair@programming.com> | 2010-01-25 09:50:01 +1100 |
commit | 4e96442c4e404141830b2d7f0d850b6556190b39 (patch) | |
tree | a3ca088ad9d68b5be9ace4d431375bb3fd4ea045 /railties/lib/rails/application/routes_reloader.rb | |
parent | a74a655648618a6ed568b9b4ef3a17a8970e7774 (diff) | |
parent | 396003fc48d7c0ba206ad059646c7414bee22a36 (diff) | |
download | rails-4e96442c4e404141830b2d7f0d850b6556190b39.tar.gz rails-4e96442c4e404141830b2d7f0d850b6556190b39.tar.bz2 rails-4e96442c4e404141830b2d7f0d850b6556190b39.zip |
Merge branch 'master' of git://github.com/rails/rails
Conflicts:
actionmailer/lib/action_mailer/mail_helper.rb
railties/lib/rails/configuration.rb
Diffstat (limited to 'railties/lib/rails/application/routes_reloader.rb')
-rw-r--r-- | railties/lib/rails/application/routes_reloader.rb | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/railties/lib/rails/application/routes_reloader.rb b/railties/lib/rails/application/routes_reloader.rb new file mode 100644 index 0000000000..fe0cfb7801 --- /dev/null +++ b/railties/lib/rails/application/routes_reloader.rb @@ -0,0 +1,49 @@ +module Rails + class Application + # TODO Write tests for this behavior extracted from Application + class RoutesReloader + def self.paths + @paths ||= [] + end + + def initialize(config) + @config, @last_change_at = config, nil + end + + def changed_at + routes_changed_at = nil + + self.class.paths.each do |path| + config_changed_at = File.stat(path).mtime + + if routes_changed_at.nil? || config_changed_at > routes_changed_at + routes_changed_at = config_changed_at + end + end + + routes_changed_at + end + + def reload! + routes = Rails::Application.routes + routes.disable_clear_and_finalize = true + + routes.clear! + self.class.paths.each { |path| load(path) } + routes.finalize! + + nil + ensure + routes.disable_clear_and_finalize = false + end + + def reload_if_changed + current_change_at = changed_at + if @last_change_at != current_change_at + @last_change_at = current_change_at + reload! + end + end + end + end +end
\ No newline at end of file |