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 21
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 32
def from(storage)
  if exc = storage[:__web_console_exception]
    new(ExceptionMapper.follow(exc))
  elsif binding = storage[:__web_console_binding]
    new([[binding]])
  end
end
new(exception_mappers) click to toggle source
# File lib/web_console/session.rb, line 44
def initialize(exception_mappers)
  @id = SecureRandom.hex(16)

  @exception_mappers = exception_mappers
  @evaluator         = Evaluator.new(@current_binding = exception_mappers.first.first)

  store_into_memory
end

Public Instance Methods

context(objpath) click to toggle source

Returns context of the current binding

# File lib/web_console/session.rb, line 70
def context(objpath)
  Context.new(@current_binding).extract(objpath)
end
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 56
def eval(input)
  @evaluator.eval(input)
end
switch_binding_to(index, exception_object_id) click to toggle source

Switches the current binding to the one at specified index.

Returns nothing.

# File lib/web_console/session.rb, line 63
def switch_binding_to(index, exception_object_id)
  bindings = ExceptionMapper.find_binding(@exception_mappers, exception_object_id)

  @evaluator = Evaluator.new(@current_binding = bindings[index.to_i])
end

Private Instance Methods

store_into_memory() click to toggle source
# File lib/web_console/session.rb, line 76
def store_into_memory
  inmemory_storage[id] = self
end