Sha256: dc82d42a891453414729a49544b6d50828d016059db25c458f0ab2bbc5d767f6

Contents?: true

Size: 1.46 KB

Versions: 13

Compression:

Stored size: 1.46 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')
        try
          handler(status, args...)
        catch error
          console?.log("Plugin error: #{error}")

  broadcastOutput: (raw, args...) ->
    chunk = new Chunk(raw)
    for handler in @listeners('chunk')
      try
        handler(chunk, args...)
      catch error
        console?.log("Plugin error: #{error}")

  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

13 entries across 13 versions & 1 rubygems

Version Path
shipit-engine-0.8.9 app/assets/javascripts/task/stream.js.coffee
shipit-engine-0.8.8 app/assets/javascripts/task/stream.js.coffee
shipit-engine-0.8.7 app/assets/javascripts/task/stream.js.coffee
shipit-engine-0.8.6 app/assets/javascripts/task/stream.js.coffee
shipit-engine-0.8.5 app/assets/javascripts/task/stream.js.coffee
shipit-engine-0.8.4 app/assets/javascripts/task/stream.js.coffee
shipit-engine-0.8.3 app/assets/javascripts/task/stream.js.coffee
shipit-engine-0.8.2 app/assets/javascripts/task/stream.js.coffee
shipit-engine-0.8.1 app/assets/javascripts/task/stream.js.coffee
shipit-engine-0.8.0 app/assets/javascripts/task/stream.js.coffee
shipit-engine-0.7.0 app/assets/javascripts/task/stream.js.coffee
shipit-engine-0.6.4 app/assets/javascripts/task/stream.js.coffee
shipit-engine-0.6.3 app/assets/javascripts/task/stream.js.coffee