module Roda::RodaPlugins::LiveReload::RequestMethods

Public Instance Methods

live_reload(opts = {}, &block) click to toggle source

Setup the live reload endpoint

# File lib/roda/plugins/live_reload.rb, line 73
def live_reload(opts = {}, &block)
  on("_live_reload") do
    logger.info "Live Reload listener attached" if logger
    reader, writer = IO.pipe

    LiveReload.synchronize do
      LiveReload.listeners.push(writer)
    end

    # I wish Rack would provide a shutdown indicator
    trap(:INT) { exit }

    scope.stream(loop: true) do |out|
      if IO.select([reader], nil, nil, 1)
        out.close
      else
        out << 0
      end
    end

    LiveReload.synchronize do
      LiveReload.listeners.delete(writer)
    end
  end
end