# class WebConsole::Session

A session lets you persist an `Evaluator` instance in memory associated with multiple bindings.

Each newly created session is persisted into memory and you can find it later by its `id`.

A session may be associated with multiple bindings. This is used by the error pages only, as currently, this is the only client that needs to do that.

### Attributes

id[R]

An unique identifier for every REPL.

### Public Class Methods

find(id) click to toggle source

Finds a persisted session in memory by its id.

Returns a persisted session if found in memory. Raises NotFound error unless found in memory.

    # File lib/web_console/session.rb, line 20
    def find(id)
      inmemory_storage[id]
    end

from(storage) click to toggle source

Create a Session from an binding or exception in a storage.

The storage is expected to respond to []. The binding is expected in :__web_console_binding and the exception in :__web_console_exception.

Can return nil, if no binding or exception have been preserved in the storage.

    # File lib/web_console/session.rb, line 31
    def from(storage)
      if exc = storage[:__web_console_exception]
        new(ExceptionMapper.new(exc))
      elsif binding = storage[:__web_console_binding]
        new([binding])
      end
    end

new(bindings) click to toggle source

    # File lib/web_console/session.rb, line 43
    def initialize(bindings)
      @id = SecureRandom.hex(16)
      @bindings = bindings
      @evaluator = Evaluator.new(bindings.first)

      store_into_memory
    end

### Public Instance Methods

eval(input) click to toggle source

Evaluate `input` on the current Evaluator associated binding.

Returns a string of the Evaluator output.

    # File lib/web_console/session.rb, line 54
    def eval(input)
      @evaluator.eval(input)
    end

switch_binding_to(index) click to toggle source

Switches the current binding to the one at specified `index`.

Returns nothing.

    # File lib/web_console/session.rb, line 61
    def switch_binding_to(index)
      @evaluator = Evaluator.new(@bindings[index.to_i])
    end

### Private Instance Methods

store_into_memory() click to toggle source

    # File lib/web_console/session.rb, line 67
    def store_into_memory
      inmemory_storage[id] = self
    end