Sha256: ee1a6fb57d7319366544fe8422abb4669a464e89eb43e011702508b366d52997

Contents?: true

Size: 1.88 KB

Versions: 11

Compression:

Stored size: 1.88 KB

Contents

require 'sinatra'
require 'rack/highlighter'

module Devcenter::Previewer

  class WebApp < Sinatra::Base

    use Rack::Highlighter, :coderay, { misc: { :css => :class, :element => "pre>code" } }

    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

11 entries across 11 versions & 1 rubygems

Version Path
devcenter-1.1.9 lib/devcenter/previewer/web_app.rb
devcenter-1.1.8 lib/devcenter/previewer/web_app.rb
devcenter-1.1.6 lib/devcenter/previewer/web_app.rb
devcenter-1.1.5 lib/devcenter/previewer/web_app.rb
devcenter-1.1.4 lib/devcenter/previewer/web_app.rb
devcenter-1.1.3 lib/devcenter/previewer/web_app.rb
devcenter-1.1.2 lib/devcenter/previewer/web_app.rb
devcenter-1.1.1 lib/devcenter/previewer/web_app.rb
devcenter-1.1.0 lib/devcenter/previewer/web_app.rb
devcenter-1.1.0rc2 lib/devcenter/previewer/web_app.rb
devcenter-1.1.0rc1 lib/devcenter/previewer/web_app.rb