require "html"
require "ecr/macros"
require "../../api/methods"
require "./page"
class Guff::APIDocsHTMLView
TITLE = "Guff API Documentation"
def self.run(context : HTTP::Server::Context)
page = PageHTMLView.new(TITLE, new.to_s)
context.response.content_type = page.content_type
context.response.puts page
end
private def namespaces
API::Methods::METHODS.keys.sort
end
private def methods(
namespace : String
)
API::Methods::METHODS[namespace].keys.sort
end
private def method_text(
namespace : String,
method : String
)
API::Methods::METHODS[namespace][method][:text] as String
end
private def method_args(
namespace : String,
method : String
)
if method_has_args?(namespace, method)
args = API::Methods::METHODS[namespace][method][:args] as \
Hash(String, Hash(Symbol, String|Symbol|Bool)) | Nil
args.keys.sort
else
[] of String
end
end
private def arg_text(
namespace : String,
method : String,
name : String
) : String
if method_has_args?(namespace, method)
arg = API::Methods::METHODS[namespace][method][:args][name] as\
Hash(Symbol, String|Symbol|Bool)
arg[:text] as String
else
""
end
end
private def method_has_args?(
namespace : String,
method : String
)
API::Methods::METHODS[namespace][method].has_key?(:args)
end
def h(s : String)
HTML.escape(s || "")
end
ECR.def_to_s("./src/guff/views/ecrs/api-docs.ecr")
end