| rev | line source | 
| bsw@51 | 1 function util.autoapi_xml(args) | 
| bsw@51 | 2   local selector = assert(args.selector) | 
| bsw@51 | 3   local fields = assert(args.fields) | 
| bsw@51 | 4   local rows = selector:exec() | 
| bsw@51 | 5   slot.set_layout("xml") | 
| bsw@51 | 6   slot.put("<initiative_list>\n") | 
| bsw@51 | 7   for i_row, row in ipairs(rows) do | 
| bsw@51 | 8     slot.put("  <initiative>\n") | 
| bsw@51 | 9     for i_field, field in ipairs(fields) do | 
| bsw@51 | 10       slot.put("    <", field.name, ">") | 
| bsw@51 | 11       local value | 
| bsw@51 | 12       if field.func then | 
| bsw@51 | 13         value = field.func(row) | 
| bsw@51 | 14       elseif field.field then | 
| bsw@51 | 15         value = row[field.name] | 
| bsw@51 | 16       end | 
| bsw@51 | 17       if value then | 
| bsw@51 | 18         slot.put(encode.html(tostring(value))) | 
| bsw@51 | 19       end | 
| bsw@51 | 20       slot.put("</", field.name, ">\n") | 
| bsw@51 | 21     end | 
| bsw@51 | 22     slot.put("  </initiative>\n") | 
| bsw@51 | 23   end | 
| bsw@51 | 24   slot.put("</initiative_list>\n") | 
| bsw@51 | 25 end | 
| bsw@51 | 26 | 
| bsw@51 | 27 function util.autoapi_json(args) | 
| bsw@51 | 28   slot.set_layout("blank") | 
| bsw@51 | 29   local selector = assert(args.selector) | 
| bsw@51 | 30   local fields = assert(args.fields) | 
| bsw@51 | 31   local rows = selector:exec() | 
| bsw@51 | 32   slot.put("{\n") | 
| bsw@51 | 33   for i_row, row in ipairs(rows) do | 
| bsw@51 | 34     slot.put("  {\n") | 
| bsw@51 | 35     for i_field, field in ipairs(fields) do | 
| bsw@51 | 36       slot.put("    ", field.name, ": ") | 
| bsw@51 | 37       local value | 
| bsw@51 | 38       if field.func then | 
| bsw@51 | 39         value = field.func(row) | 
| bsw@51 | 40       elseif field.field then | 
| bsw@51 | 41         value = row[field.name] | 
| bsw@51 | 42       end | 
| bsw@51 | 43         slot.put(encode.json(value)) | 
| bsw@51 | 44       slot.put(",\n") | 
| bsw@51 | 45     end | 
| bsw@51 | 46     slot.put("  },\n") | 
| bsw@51 | 47   end | 
| bsw@51 | 48   slot.put("}\n") | 
| bsw@51 | 49 end | 
| bsw@51 | 50 | 
| bsw@51 | 51 function util.autoapi(args) | 
| bsw@51 | 52   local selector = assert(args.selector) | 
| bsw@51 | 53   local fields = assert(args.fields) | 
| bsw@51 | 54   local api_engine = assert(args.api_engine) | 
| bsw@51 | 55 | 
| bsw@51 | 56   selector:reset_fields() | 
| bsw@51 | 57 | 
| bsw@51 | 58   for i_field, field in ipairs(fields) do | 
| bsw@51 | 59     if field.field then | 
| bsw@51 | 60       selector:add_field(field.field, field.name) | 
| bsw@51 | 61     end | 
| bsw@51 | 62   end | 
| bsw@51 | 63 | 
| bsw@51 | 64   if api_engine == "xml" then | 
| bsw@51 | 65     util.autoapi_xml{ | 
| bsw@51 | 66       selector = selector, | 
| bsw@51 | 67       fields = fields | 
| bsw@51 | 68     } | 
| bsw@51 | 69   elseif api_engine == "json" then | 
| bsw@51 | 70     util.autoapi_json{ | 
| bsw@51 | 71       selector = selector, | 
| bsw@51 | 72       fields = fields | 
| bsw@51 | 73     } | 
| bsw@51 | 74   end | 
| bsw@51 | 75 | 
| bsw@51 | 76 end |