pimatic
Version:
A home automation server and framework for the Raspberry PI running on node.js
40 lines (35 loc) • 1.44 kB
text/coffeescript
class DeclApiClient
rest: {}
constructor: (@apiDef) ->
for actionName, action of @apiDef.actions
if action.rest?
@createRestAction(@rest, actionName, action, action.rest)
createRestAction: (obj, actionName, action, rest) ->
obj[actionName] = ( (args, ajaxOptions) =>
type = rest.type
url = rest.url
data = {}
for paramName, param of action.params
if args[paramName]?
# test if its an url parameter
regex = new RegExp("(^|/)(\:#{paramName})(/|$)")
if regex.test(url)
# ":paramName" can't be replaced directly, because parameter name could
# include regexp special chars, so replace by "!!!" and then by value
url = url.replace(regex, '$1!!!$3').replace('!!!', args[paramName])
else
data[paramName] = args[paramName]
else
unless param.optional
throw new Error("Expected param #{paramName}")
json = (type.toLowerCase() in ["post", "patch"])
unless ajaxOptions? then ajaxOptions = {}
ajaxOptions.type = type
ajaxOptions.url = url
ajaxOptions.data = if json then JSON.stringify(data) else data
if json
ajaxOptions.contentType = "application/json; charset=utf-8"
ajaxOptions.dataType = "json"
return jQuery.ajax(ajaxOptions)
)
window.DeclApiClient = DeclApiClient