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