/
index.coffee
51 lines (44 loc) · 1.29 KB
/
index.coffee
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
module.exports = require("coffee-dsl").dsl()
module.exports.set "collection", (collectionFun)->
collection = {version:"1.0"}
root = {collection:collection}
collectionFun.call new exports.Collection(collection)
root
exports.Base = class Base
constructor: (@_obj) ->
href: (value)->
@_obj.href = value
exports.Data = class Data extends exports.Base
datum: (options)->
@_obj.data ||= []
@_obj.data.push options
# expose internal objects for extensions
exports.Collection = class Collection extends Base
error: (options)->
@_obj.error = options
link: (options)->
@_obj.links ||= []
@_obj.links.push options
item: (itemFun)->
item = {}
@_obj.items ||= []
@_obj.items.push item
itemFun.call new exports.Item(item)
query: (queryFun)->
query = {}
@_obj.queries ||= []
@_obj.queries.push query
queryFun.call new exports.Query(query)
template: (templateFun)->
@_obj.template = {}
templateFun.call new exports.Template(@_obj.template)
exports.Item = class Item extends exports.Data
link: (options)->
@_obj.links ||= []
@_obj.links.push options
exports.Query = class Query extends exports.Data
rel: (value)->
@_obj.rel = value
prompt: (value)->
@_obj.prompt = value
exports.Template = class Template extends exports.Data