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

Impressum / About Us