Sha256: 1d5232e53d9c3272b9b5d7a5dff4ad7aba2fbd1b7d81a3b250335b98d78333f7

Contents?: true

Size: 1.3 KB

Versions: 23

Compression:

Stored size: 1.3 KB

Contents

class Chunk
  constructor: (@raw) ->

  rawText: ->
    @raw

  text: ->
    @_text ||= AnsiStream.strip(@raw)

  rawLines: ->
    @_rawLines ||= @raw.split(/\r?\n/)

  lines: ->
    @_lines ||= @text().split(/\r?\n/)

class @Stream
  INTERVAL = 1000
  MAX_RETRIES = 15

  constructor: ->
    @url = null
    @eventListeners = {}
    @retries = 0
    @status = 'running'

  init: ({url, text, status}) ->
    @status = status
    @broadcastOutput(text)
    @start(url)

  poll: =>
    jQuery.ajax @url,
      success: @success
      error: @error

  success: (response) =>
    @retries = 0
    @broadcastOutput(response.output, response)
    @broadcastStatus(response.status, response)
    @start(response.url || false)

  broadcastStatus: (status, args...) ->
    if status != @status
      @status = status
      for handler in @listeners('status')
        handler(status, args...)

  broadcastOutput: (raw, args...) ->
    chunk = new Chunk(raw)
    for handler in @listeners('chunk')
      handler(chunk, args...)

  error: (response) =>
    @start() if 600 > response.status >= 500 && (@retries += 1) < MAX_RETRIES

  start: (url = @url) ->
    if @url = url
      setTimeout(@poll, INTERVAL)

  addEventListener: (type, handler) ->
    @listeners(type).push(handler)

  listeners: (type) ->
    @eventListeners[type] ||= []

Version data entries

23 entries across 23 versions & 1 rubygems

Version Path
shipit-engine-0.6.2 app/assets/javascripts/task/stream.js.coffee
shipit-engine-0.6.1 app/assets/javascripts/task/stream.js.coffee
shipit-engine-0.6.0 app/assets/javascripts/task/stream.js.coffee
shipit-engine-0.5.2 app/assets/javascripts/task/stream.js.coffee
shipit-engine-0.5.1 app/assets/javascripts/task/stream.js.coffee
shipit-engine-0.5.0 app/assets/javascripts/task/stream.js.coffee
shipit-engine-0.4.10 app/assets/javascripts/task/stream.js.coffee
shipit-engine-0.4.9 app/assets/javascripts/task/stream.js.coffee
shipit-engine-0.4.8 app/assets/javascripts/task/stream.js.coffee
shipit-engine-0.4.7 app/assets/javascripts/task/stream.js.coffee
shipit-engine-0.4.6 app/assets/javascripts/task/stream.js.coffee
shipit-engine-0.4.5 app/assets/javascripts/task/stream.js.coffee
shipit-engine-0.4.4 app/assets/javascripts/task/stream.js.coffee
shipit-engine-0.4.3 app/assets/javascripts/task/stream.js.coffee
shipit-engine-0.4.2 app/assets/javascripts/task/stream.js.coffee
shipit-engine-0.4.1 app/assets/javascripts/task/stream.js.coffee
shipit-engine-0.4.0 app/assets/javascripts/task/stream.js.coffee
shipit-engine-0.3.1 app/assets/javascripts/task/stream.js.coffee
shipit-engine-0.3.0 app/assets/javascripts/task/stream.js.coffee
shipit-engine-0.2.3 app/assets/javascripts/task/stream.js.coffee