Sha256: daa1633451884404580011dfb63b830645d72c985d90388a5716189295e349b2

Contents?: true

Size: 1.26 KB

Versions: 7

Compression:

Stored size: 1.26 KB

Contents

require 'rubygems'
require 'sinatra/base'
require 'json'
require 'em-hiredis'
require 'redis'
require 'uri'
require 'thin'
require 'rspectacles/config.rb'

module RSpectacles
  class App < Sinatra::Base
    require 'rspectacles/app/helpers'

    connections = []
    config = RSpectacles.config
    dir = File.dirname(File.expand_path(__FILE__))
    set :app_file, __FILE__
    set :root, dir
    set :views, "#{dir}/app/views"
    set :static, true

    if respond_to? :public_folder
      set :public_folder, "#{dir}/app/public"
    else
      set :public, "#{dir}/app/public"
    end

    uri = URI.parse config.redis_uri
    redis = Redis.new host: uri.host, port: uri.port

    # Routes
    get '/' do
      erb :index
    end

    get '/stream', :provides => 'text/event-stream' do
      stream :keep_open do |out|
        connections << out
        out.callback { connections.delete(out) }
      end
    end

    get '/last' do
      redis.lrange(config.last_run_primary_key, 0, -1).to_json
    end

    # pubsub and streaming - EventMachine support only
    EM.next_tick do
      emredis = EM::Hiredis.connect(uri)

      emredis.pubsub.subscribe config.pubsub_channel_name do |message|
        connections.each { |out| out << "data: #{message}\n\n" }
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
rspectacles-0.1.3 lib/rspectacles/app.rb
rspectacles-0.1.2 lib/rspectacles/app.rb
rspectacles-0.1.1 lib/rspectacles/app.rb
rspectacles-0.1.0 lib/rspectacles/app.rb
rspectacles-0.0.9 lib/rspectacles/app.rb
rspectacles-0.0.8 lib/rspectacles/app.rb
rspectacles-0.0.7 lib/rspectacles/app.rb