def update(value)
      raise RuntimeError, "Observable crashed: #{@value}" if crashed?
      raise ArgumentError, "Update with nil value" if value.nil?

      debug { "update: #{value}" }

      set_and_notify(value)
    end
def update(value)
      raise RuntimeError, "Observable crashed: #{@value}" if crashed?
      raise ArgumentError, "Update with nil value" if value.nil?

      debug { "update: #{value}" }

      set_and_notify(value)
    end
The Observable has a value. Propagate it to any observers.

 This will notify any Observers, causing them to yield/return if ready.

 The value must be immutable and threadsafe: it must remain valid for use by other threads
 both after this update, and after any other future updates. Do not send a mutable object
 that gets invalidated in between updates.

 TODO: automatically freeze the value?

 @param value [Object]
 @raise [RuntimeError] Observable crashed
 @raise [ArgumentError] Update with nil value