module Padrino::Reloader::Storage

Public Instance Methods

clear!() click to toggle source
# File lib/padrino-core/reloader/storage.rb, line 6
def clear!
  files.each_key do |file|
    remove(file)
    Reloader.remove_feature(file)
  end
  @files = {}
end
commit(name) click to toggle source
# File lib/padrino-core/reloader/storage.rb, line 33
def commit(name)
  entry = {
    :constants => new_classes(@old_entries[name][:constants]),
    :features  => Set.new($LOADED_FEATURES) - @old_entries[name][:features] - [name]
  }
  files[name] = entry
  @old_entries.delete(name)
end
prepare(name) click to toggle source
# File lib/padrino-core/reloader/storage.rb, line 21
def prepare(name)
  file = remove(name)
  @old_entries ||= {}
  @old_entries[name] = {
    :constants => object_classes,
    :features  => old_features = Set.new($LOADED_FEATURES.dup)
  }
  features = file && file[:features] || []
  features.each{ |feature| Reloader.safe_load(feature, :force => true) }
  Reloader.remove_feature(name) if old_features.include?(name)
end
remove(name) click to toggle source
# File lib/padrino-core/reloader/storage.rb, line 14
def remove(name)
  file = files[name] || return
  file[:constants].each{ |constant| Reloader.remove_constant(constant) }
  file[:features].each{ |feature| Reloader.remove_feature(feature) }
  files.delete(name)
end
rollback(name) click to toggle source
# File lib/padrino-core/reloader/storage.rb, line 42
def rollback(name)
  new_classes(@old_entries[name][:constants]).each do |klass|
    loaded_in_name = files.each do |file, data|
                       next if file == name
                       break if data[:constants].include?(klass)
                     end
    Reloader.remove_constant(klass) if loaded_in_name
  end
  @old_entries.delete(name)
end

Private Instance Methods

files() click to toggle source
# File lib/padrino-core/reloader/storage.rb, line 55
def files
  @files ||= {}
end
new_classes(snapshot) click to toggle source

Returns a list of object space classes that are not included in “snapshot”.

# File lib/padrino-core/reloader/storage.rb, line 81
def new_classes(snapshot)
  object_classes do |klass|
    snapshot.include?(klass) ? nil : klass
  end
end
object_classes() { |klass| ... } click to toggle source

Returns all the classes in the object space.

# File lib/padrino-core/reloader/storage.rb, line 62
def object_classes
  klasses = Set.new

  ObjectSpace.each_object(::Class).each do |klass|
    if block_given?
      if filtered_class = yield(klass)
        klasses << filtered_class
      end
    else
      klasses << klass
    end
  end

  klasses
end