json-api-schema
Version:
JSON Api Schema is a JSON dialect that can describe any Web Based API that uses JSON to exchange data.
76 lines (68 loc) • 2.48 kB
text/coffeescript
class EntityParser
constructor: ->
=
Action: require "../model/action"
Resource: require "../model/resource"
Api: require "../model/api"
Type: require "../model/type"
Schema: require "../model/schema"
=
Api:
title: {type: "Primitive"}
description: {type: "Primitive"}
resources: {type: "Map", options: { elems: "Resource" }}
types: {type: "Map", options: { elems: "Type" }}
protocols: {type: "Map", options: { elems: "Object" }}
actions: {type: "Map", options: { elems: "Action" }}
events: {type: "Map", options: { elems: "Event" }}
Action:
title: {type: "Primitive"}
description: {type: "Primitive"}
params: {type: "Schema"}
returns: {type: "Schema"}
Event:
title: {type: "Primitive"}
description: {type: "Primitive"}
params: {type: "Schema"}
returns: {type: "Schema"}
Resource:
title: {type: "Primitive"}
description: {type: "Primitive"}
type: {type: "Primitive"}
resources: {type: "Map", options: {elems: "Resource"}}
protocols: {type: "Object"}
actions: {type: "Map", options: {elems: "Action" }}
events: {type: "Map", options: { elems: "Event" }}
Type:
title: {type: "Primitive"}
description: {type: "Primitive"}
schema: {type: "Schema"}
applySchema: (object, type, options = {}) ->
if type is "Schema"
new .Schema(object)
else if type in ["Object", "Primitive"]
object
else if type is "Map"
res = {}
for k, v of object
properties = (v, options.elems, {})
klass = [options.elems]
res[k] = new klass(properties)
res[k].name = k
res
else if schema = [type]
res = {}
for k, decl of schema
if object[k]
res[k] = (object[k], decl.type, decl.options)
if klass = [decl.type]
res[k] = new klass(res[k])
else
if decl.type is "Map"
res[k] = {}
res
else
throw "Unexpected Parser Error. Execution should never get here."
parseApi: (object) ->
new .Api((object, "Api", {}))
module.exports = EntityParser