Class: Merb::BootLoader::ReloadClasses

Inherits:
Merb::BootLoader show all
Defined in:
lib/merb-core/bootloader.rb

Defined Under Namespace

Classes: TimedExecutor

Class Method Summary collapse

Methods inherited from Merb::BootLoader

after, after_app_loads, before, before_app_loads, before_master_shutdown, before_worker_shutdown, default_framework, finished?, inherited, move_klass

Class Method Details

.reload(paths) ⇒ Object

Reloads all files which have been modified since they were last loaded.

Returns

nil

:api: private



1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
# File 'lib/merb-core/bootloader.rb', line 1387

def self.reload(paths)
  paths.each do |file|
    next if LoadClasses::MTIMES[file] &&
      LoadClasses::MTIMES[file] == File.mtime(file)

    LoadClasses.reload(file)
  end

  nil
end

.runObject

Set up the class reloader if class reloading is enabled. This checks periodically for modifications to files loaded by the LoadClasses BootLoader and reloads them when they are modified.

Returns

nil

:api: plugin



1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
# File 'lib/merb-core/bootloader.rb', line 1357

def self.run
  return unless Merb::Config[:reload_classes]

  paths = []
  Merb.load_paths.each do |path_name, file_info|
    path, glob = file_info
    next unless glob
    paths << Dir[path / glob]
  end

  if Merb.dir_for(:application) && File.file?(Merb.dir_for(:application))
    paths << Merb.dir_for(:application)
  end

  paths.flatten!

  TimedExecutor.every(Merb::Config[:reload_time] || 0.5) do
    GC.start
    reload(paths)
  end

  nil
end