class Pry::Visualizer

Manages a websocket server

Constants

VERSION

Public Class Methods

new() click to toggle source
# File lib/pry/visualizer.rb, line 14
def initialize

  @commands = []

  Pry.hooks.add_hook(:when_started, :viz_init) do |output, _binding, _pry|
    start_server
  end

  Pry.hooks.add_hook(:before_eval, :viz_before) do |code, _pry|
    @commands << { id: @commands.size, code: code, start: Time.now }
  end

  Pry.hooks.add_hook(:after_eval, :viz_after) do |result, _pry|
    @commands[-1].merge!(
      end:    Time.now,
      result: result
    )
    # send data to websocket
    @sock && begin
      @sock.send_data(JSON.generate({ command: @commands[-1] }))
    end
  end
end

Public Instance Methods

call(env) click to toggle source

Rack App

# File lib/pry/visualizer.rb, line 43
def call(env)
  @sock = Tubesock.hijack(env)
  @sock.onclose do
    ActiveRecord::Base.clear_active_connections! if defined? ActiveRecord
  end
  @sock.listen
  [-1, {}, []]
end
start_server() click to toggle source
# File lib/pry/visualizer.rb, line 38
def start_server
  Thread.new { Rack::Handler::Puma.run(self, Port: ENV['PORT'] || 3000) }
end