UNPKG

1.53 kBtext/coffeescriptView Raw
1{resource} = require "shred"
2{call} = require "when/generator"
3
4describe = (url, api) ->
5 root = {}
6 for rname, {actions} of api.resources
7 description = {}
8 for aname, {method, request, response} of actions
9 description[aname] = action = {method}
10 if request?
11 if request.type?
12 action.headers = "content-type": request.type
13 if response?
14 if response.type?
15 action.headers ?= {}
16 action.headers.accept = response.type
17 if response.status?
18 action.expect = response.status
19 do (rname, description) ->
20 root[rname] = (resource) ->
21 {template, path, query} = api.mappings[rname]
22 # TODO: add support for query params
23 if path?
24 resource path, description
25 else if template?
26 components = for component in (template.split "/")[1..]
27 if component[0] == ":"
28 key = component[1..]
29 "{#{key}}"
30 else
31 component
32 resource ("/" + components.join "/"), description
33
34 resource url, root
35
36discover = (discovery, url) ->
37 url ?= discovery
38 # Create a bootstrap service here to do the discovery
39 service = resource discovery,
40 description: (resource) ->
41 resource "/",
42 get:
43 method: "get"
44 headers:
45 "accept": "application/json"
46 expect: 200
47
48 call ->
49 {data} = yield service.description.get()
50 api = yield data
51 describe url, api
52
53
54
55module.exports = {discover, describe}