module Hyperloop::Context
Allows interactive systems to reset context to the state at boot. Any modules or classes that set context instance variables to hold things like call backs should use Hyperloop::Context.set_var
(self, :@var_name) { .… } the provided block will be rerun and the instance variable re-initialized when the reset! method is called
Public Class Methods
reset!(reboot = true)
click to toggle source
# File lib/hyperloop/context.rb, line 22 def self.reset!(reboot = true) # if @context is already initialized then reset all the instance # vars using their corresponding blocks. Otherwise initialize # @context. if @context @context.each do |ctx, vars| vars.each { |var, init| ctx.instance_variable_set(var, init) } end Hyperloop::Application::Boot.run if reboot else @context = Hash.new { |h, k| h[k] = {} } end end
set_var(ctx, var, force: nil) { || ... }
click to toggle source
Replace @foo ||= … with Context.set_var
(self, :@foo) { … } If reset! has been called then the instance variable will be record, and will be reset on the next call to reset! If you want to record the current value of the instance variable then set force to true.
# File lib/hyperloop/context.rb, line 14 def self.set_var(ctx, var, force: nil) inst_value_b4 = ctx.instance_variable_get(var) if @context && !@context[ctx].key?(var) && (force || !inst_value_b4) @context[ctx][var] = (inst_value_b4 && inst_value_b4.dup) end inst_value_b4 || ctx.instance_variable_set(var, yield) end