module Hyperstack::Internal::AutoUnmount

Public Class Methods

included(base) click to toggle source
# File lib/hyperstack/internal/auto_unmount.rb, line 4
def self.included(base)
  base.include(Hyperstack::Internal::Callbacks)
  base.class_eval do
    define_callback :before_unmount
  end
end
objects_to_unmount() click to toggle source
# File lib/hyperstack/internal/auto_unmount.rb, line 49
def objects_to_unmount
  @objects_to_unmount ||= Hash.new { |h, k| h[k] = Set.new }
end

Public Instance Methods

after(*args, &block) click to toggle source
Calls superclass method
# File lib/hyperstack/internal/auto_unmount.rb, line 39
def after(*args, &block)
  return if unmounted?
  super.tap do |id|
    sself = self
    id.define_singleton_method(:unmount) { abort }
    AutoUnmount.objects_to_unmount[self] << id
  end
end
every(*args, &block) click to toggle source
Calls superclass method
# File lib/hyperstack/internal/auto_unmount.rb, line 30
def every(*args, &block)
  return if unmounted?
  super.tap do |id|
    sself = self
    id.define_singleton_method(:unmount) { abort }
    AutoUnmount.objects_to_unmount[self] << id
  end
end
unmount() click to toggle source
# File lib/hyperstack/internal/auto_unmount.rb, line 15
def unmount
  run_callback(:before_unmount)
  AutoUnmount.objects_to_unmount[self].each(&:unmount)
  AutoUnmount.objects_to_unmount.delete(self)
  instance_variables.each do |var|
    val = instance_variable_get(var)
    begin
      val.unmount if val.respond_to?(:unmount)
    rescue RUBY_ENGINE == 'opal' ? JS::Error : nil
      nil
    end
  end
  @__hyperstack_internal_auto_unmount_unmounted = true
end
unmounted?() click to toggle source
# File lib/hyperstack/internal/auto_unmount.rb, line 11
def unmounted?
  @__hyperstack_internal_auto_unmount_unmounted
end