• Jump To … +
    PorthandlerConnection.coffee ProducerClass.coffee helpers.coffee
  • helpers.coffee

  • ¶
    _ = require 'lodash'
    debug = require("debug")("omg-class_node_producer:helpers")
    
    parseZmqMessage = ->
      msg = [];
      Array.prototype.slice.call(arguments).forEach (arg) =>
        msg.push arg.toString()
      data = msg[3]
      if data
        try
          data = JSON.parse(data)
          msg[3] = data
        catch e
  • ¶

    debug msg[3]

          debug e
      return msg
    
    objectify = (object) ->
      if _.isString object
        newObject = object
      else if _.isArray object
        newObject = {}
        for item, ind in object
          newObject[ind] = objectify item
    
      else if _.isPlainObject object
        newObject = {}
        for ind, item of object
          newObject[ind] = objectify item
    
      else
        newObject = object
    
      return newObject
    
    getChanges = (prev, now) ->
      changes = {}
      for prop of now
  • ¶

    if there is no previous value, set changes to now

        return changes = now if not prev
    
        preProp = prev[prop]
        nowProp = now[prop]
  • ¶

    if the property of the left hand side is not the same as on the rhs

        if not preProp || (preProp isnt nowProp)
  • ¶

    if property is an object, get difference between lhs and rhs property

          if _.isObject nowProp
  • ¶
              // if there are differences, include them in the "changes" object
    
            if _.isEmpty nowProp
              changes[prop] = nowProp
            else
              subChanges = getChanges(preProp, nowProp)
              changes[prop] = subChanges if subChanges
    
          else if _.isString nowProp
            if nowProp and not preProp
              changes[prop] = nowProp
            if preProp isnt nowProp
              changes[prop] = nowProp
    
          else if _.isNumber nowProp
            if preProp isnt nowProp
              changes[prop] = nowProp
    
          else if _.isBoolean nowProp
            if nowProp is false
              unless preProp is undefined or preProp is false
                changes[prop] = false
            if nowProp is true
              unless preProp is true
                changes[prop] = true
    
    
      changes = undefined if _.isEmpty changes
  • ¶

    changes = {} if .isObject now and .isEmpty now

      return changes
    
    module.exports =
      getChanges: getChanges
      objectify: objectify
      parseZmqMessage: parseZmqMessage