maestrano/mno-enterprise

View on GitHub
frontend/app/assets/javascripts/mno_enterprise/angular/services/maestrano-utilities.js.coffee

Summary

Maintainability
Test Coverage
# This service provides oftenly used methods like Rails error processing
angular.module('maestrano.utilities', []).factory('Utilities', [() ->
  service = {}
  
  # Parse a Rails model error and return an array of messages
  # ready to be displayed
  service.processRailsError = (error) ->
    messages = []
    
    if error.status && error.status == 401
      messages.push("Sorry! You are not authorized to perform this action")
    else
      if error.data && error.data != " "
        if angular.isArray(error.data)
          _.each(error.data, (errorMessage) ->
            capitalizedError = errorMessage.charAt(0).toUpperCase() + errorMessage.slice(1);
            messages.push("#{capitalizedError}")
          )
        else if angular.isObject(error.data)
          _.each(error.data, (attrErrors, attribute) ->
            capitalizedAttr = attribute.charAt(0).toUpperCase() + attribute.slice(1);
            if angular.isArray(attrErrors)
              _.each(attrErrors, (attrError) ->
                if capitalizedAttr.match(/base/i)
                  messages.push(attrError)
                else
                  messages.push("#{capitalizedAttr} #{attrError}")
              )
            else
              if capitalizedAttr.match(/base/i)
                messages.push(attrErrors)
              else
                messages.push("#{capitalizedAttr} #{attrErrors}")
          )
        else if angular.isString(error.data)
          messages.push(error.data)
        else
          messages.push("Potentially a system or communication error. Please retry later.")
      else
        messages.push("Potentially a system or communication error. Please retry later.")
      
    return messages
    
  # Camelize a string
  service.camelize = (word) ->
    return word.replace(/(?:^|[-_])(\w)/g
      , (_, c) ->
        if c then c.toUpperCase() else ''
    )
  
  # Camelize a string for javascript 
  # (camelize with first letter lower case)
  service.jsCamelize = (word) ->
    camelized = this.camelize(word)
    return camelized.charAt(0).toLowerCase() + camelized.slice(1)
  
  service.capitalize = (word) ->
    return (word.charAt(0).toUpperCase() + word.slice(1))
  
  return service
])