All files / src marshall.js

23.53% Statements 12/51
22.73% Branches 10/44
20% Functions 2/10
29.27% Lines 12/41
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 781x 1x       3x   6x 2x 4x 4x   4x 2x     2x 2x 2x                                                                                                                      
import moment from 'moment'
import _ from 'lodash'
 
// Helper function to convert comparison operator values to numbers or dates
export function marshallComparisonFields (queryObject) {
  _.forOwn(queryObject, (value, key) => {
    // Process current attributes or  recurse
    if (typeof value === 'object') {
      marshallComparisonFields(value)
    } else Eif ((key === '$lt') || (key === '$lte') || (key === '$gt') || (key === '$gte')) {
      let number = _.toNumber(value)
      // Update from query string to number if required
      if (!Number.isNaN(number)) {
        queryObject[key] = number
      } else {
        // try for dates as well
        let date = moment.utc(value)
        Eif (date.isValid()) {
          queryObject[key] = date.toDate()
        }
      }
    }
  })
}
 
// Helper function to convert sort operator values to numbers
export function marshallSortFields (queryObject) {
  _.forOwn(queryObject, (value, key) => {
    // Process current attributes or  recurse
    if (typeof value === 'object') {
      marshallSortFields(value)
    } else {
      let number = _.toNumber(value)
      // Update from query string to number if required
      if (!Number.isNaN(number)) {
        queryObject[key] = number
      }
    }
  })
}
 
// Helper function to convert time objects or array of time objects
export function marshallTime (item, property) {
  if (!item) return
  const time = item[property]
  if (!time) return
  if (Array.isArray(time)) {
    item[property] = time.map(t => {
      if (moment.isMoment(t)) return new Date(t.format())
      else if (typeof t === 'string') return new Date(t)
      else return t
    })
  } else if (moment.isMoment(time)) {
    item[property] = new Date(time.format())
  } else if (typeof time === 'string') {
    item[property] = new Date(time)
  } else if (typeof time === 'object') { // Check if complex object such as comparison operator
    // If so this will recurse
    _.keys(time).forEach(key => marshallTime(time, key))
  }
}
 
// Helper function to convert time objects or array of time objects
export function unmarshallTime (item, property) {
  if (!item) return
  const time = item[property]
  if (!time) return
  if (Array.isArray(time)) {
    item[property] = time.map(t => !moment.isMoment(t) ? moment.utc(t.toISOString()) : t)
  } else if (!moment.isMoment(time)) {
    // Check if complex object indexed by element
    const keys = _.keys(time)
    // If so recurse
    if (keys.length > 0) keys.forEach(key => unmarshallTime(time, key))
    else item[property] = moment.utc(time.toISOString())
  }
}