liquid_feedback_frontend
view env/util/autoapi.lua @ 51:0849be391140
Public read access; Read-only API for initiatives; Prepared integration of OpenID
author | bsw |
---|---|
date | Sun Apr 04 22:05:11 2010 +0200 (2010-04-04) |
parents | |
children | 88ac7798b562 |
line source
1 function util.autoapi_xml(args)
2 local selector = assert(args.selector)
3 local fields = assert(args.fields)
4 local rows = selector:exec()
5 slot.set_layout("xml")
6 slot.put("<initiative_list>\n")
7 for i_row, row in ipairs(rows) do
8 slot.put(" <initiative>\n")
9 for i_field, field in ipairs(fields) do
10 slot.put(" <", field.name, ">")
11 local value
12 if field.func then
13 value = field.func(row)
14 elseif field.field then
15 value = row[field.name]
16 end
17 if value then
18 slot.put(encode.html(tostring(value)))
19 end
20 slot.put("</", field.name, ">\n")
21 end
22 slot.put(" </initiative>\n")
23 end
24 slot.put("</initiative_list>\n")
25 end
27 function util.autoapi_json(args)
28 slot.set_layout("blank")
29 local selector = assert(args.selector)
30 local fields = assert(args.fields)
31 local rows = selector:exec()
32 slot.put("{\n")
33 for i_row, row in ipairs(rows) do
34 slot.put(" {\n")
35 for i_field, field in ipairs(fields) do
36 slot.put(" ", field.name, ": ")
37 local value
38 if field.func then
39 value = field.func(row)
40 elseif field.field then
41 value = row[field.name]
42 end
43 slot.put(encode.json(value))
44 slot.put(",\n")
45 end
46 slot.put(" },\n")
47 end
48 slot.put("}\n")
49 end
51 function util.autoapi(args)
52 local selector = assert(args.selector)
53 local fields = assert(args.fields)
54 local api_engine = assert(args.api_engine)
56 selector:reset_fields()
58 for i_field, field in ipairs(fields) do
59 if field.field then
60 selector:add_field(field.field, field.name)
61 end
62 end
64 if api_engine == "xml" then
65 util.autoapi_xml{
66 selector = selector,
67 fields = fields
68 }
69 elseif api_engine == "json" then
70 util.autoapi_json{
71 selector = selector,
72 fields = fields
73 }
74 end
76 end