liquid_feedback_frontend
diff 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 diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/env/util/autoapi.lua Sun Apr 04 22:05:11 2010 +0200 1.3 @@ -0,0 +1,76 @@ 1.4 +function util.autoapi_xml(args) 1.5 + local selector = assert(args.selector) 1.6 + local fields = assert(args.fields) 1.7 + local rows = selector:exec() 1.8 + slot.set_layout("xml") 1.9 + slot.put("<initiative_list>\n") 1.10 + for i_row, row in ipairs(rows) do 1.11 + slot.put(" <initiative>\n") 1.12 + for i_field, field in ipairs(fields) do 1.13 + slot.put(" <", field.name, ">") 1.14 + local value 1.15 + if field.func then 1.16 + value = field.func(row) 1.17 + elseif field.field then 1.18 + value = row[field.name] 1.19 + end 1.20 + if value then 1.21 + slot.put(encode.html(tostring(value))) 1.22 + end 1.23 + slot.put("</", field.name, ">\n") 1.24 + end 1.25 + slot.put(" </initiative>\n") 1.26 + end 1.27 + slot.put("</initiative_list>\n") 1.28 +end 1.29 + 1.30 +function util.autoapi_json(args) 1.31 + slot.set_layout("blank") 1.32 + local selector = assert(args.selector) 1.33 + local fields = assert(args.fields) 1.34 + local rows = selector:exec() 1.35 + slot.put("{\n") 1.36 + for i_row, row in ipairs(rows) do 1.37 + slot.put(" {\n") 1.38 + for i_field, field in ipairs(fields) do 1.39 + slot.put(" ", field.name, ": ") 1.40 + local value 1.41 + if field.func then 1.42 + value = field.func(row) 1.43 + elseif field.field then 1.44 + value = row[field.name] 1.45 + end 1.46 + slot.put(encode.json(value)) 1.47 + slot.put(",\n") 1.48 + end 1.49 + slot.put(" },\n") 1.50 + end 1.51 + slot.put("}\n") 1.52 +end 1.53 + 1.54 +function util.autoapi(args) 1.55 + local selector = assert(args.selector) 1.56 + local fields = assert(args.fields) 1.57 + local api_engine = assert(args.api_engine) 1.58 + 1.59 + selector:reset_fields() 1.60 + 1.61 + for i_field, field in ipairs(fields) do 1.62 + if field.field then 1.63 + selector:add_field(field.field, field.name) 1.64 + end 1.65 + end 1.66 + 1.67 + if api_engine == "xml" then 1.68 + util.autoapi_xml{ 1.69 + selector = selector, 1.70 + fields = fields 1.71 + } 1.72 + elseif api_engine == "json" then 1.73 + util.autoapi_json{ 1.74 + selector = selector, 1.75 + fields = fields 1.76 + } 1.77 + end 1.78 + 1.79 +end 1.80 \ No newline at end of file