Sha256: d4d5dedb6aaa2ea778fd5c38315c13a1df3aea57a955bed942f8f821fda4763a
Contents?: true
Size: 1.76 KB
Versions: 1
Compression:
Stored size: 1.76 KB
Contents
require 'sinatra' module Devcenter::Previewer class WebApp < Sinatra::Base include Devcenter::Logger set :logging, false set :connections, [] set :public_folder, File.dirname(__FILE__) set :views, File.join(File.dirname(__FILE__), 'views') helpers do include Devcenter::Helpers end get '/favicon.ico' do end get '/stream', provides: 'text/event-stream' do stream :keep_open do |conn| settings.connections << conn log "New incoming connection (#{settings.connections.size} open)" # refresh connection before browser times out EventMachine::PeriodicTimer.new(20) do log "Refreshing connection" conn << ":refreshing \n\n" end conn.callback do settings.connections.delete(conn) log "Connection closed locally (#{settings.connections.size} open)" end conn.errback do conn.close settings.connections.delete(conn) log "Connection closed externally (#{settings.connections.size} open)" end end end get '/:slug' do log "Local article requested: #{params[:slug]}" src_path = File.join(Dir.pwd, "#{params[:slug]}.md") if File.exists?(src_path) log "Parsing" @article = Devcenter::ArticleFile.read(src_path) @page_title = @article.metadata.title log "Serving" erb :article else @referrer_url = request.referrer @page_title = 'Not found' erb :not_found end end def self.send_server_event Devcenter::Logger.log "Serving server side event to #{settings.connections.size} connections" settings.connections.each do |conn| conn << "data: reload\n\n" end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
devcenter-1.2.0 | lib/devcenter/previewer/web_app.rb |