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
