lib/fdoc/presenters/schema_presenter.rb in fdoc-0.3.0 vs lib/fdoc/presenters/schema_presenter.rb in fdoc-0.3.1
- old
+ new
@@ -1,8 +1,8 @@
-# An HtmlPresenter for a JSON Schema fragment. Like most JSON
+# An BasePresenter for a JSON Schema fragment. Like most JSON
# schema things, has a tendency to recurse.
-class Fdoc::SchemaPresenter < Fdoc::HtmlPresenter
+class Fdoc::SchemaPresenter < Fdoc::BasePresenter
FORMATTED_KEYS = %w(
description
type
required
example
@@ -38,11 +38,11 @@
html << '<ul>'
begin
html << '<li>Required: %s</li>' % required? if nested?
html << '<li>Type: %s</li>' % type if type
html << '<li>Format: %s</li>' % format if format
- html << '<li>Example: %s</li>' % example if example
+ html << '<li>Example: %s</li>' % example.to_html if example
html << enum_html
(@schema.keys - FORMATTED_KEYS).each do |key|
html << '<li>%s: %s</li>' % [ key, @schema[key] ]
end
@@ -56,10 +56,42 @@
html << '</div>'
html.string
end
+ def to_markdown(prefix = "")
+ md = StringIO.new
+ md << 'Deprecated' if deprecated?
+ md << "\n#{@schema["description"]}"
+ md << "\n#{prefix}* __Required__: #{required?}" if nested?
+ md << "\n#{prefix}* __Type__: #{type}" if type
+ md << "\n#{prefix}* __Format__: #{format}" if format
+ md << "\n#{prefix}* __Example__: <tt>#{example.to_markdown}</tt>" if example
+ md << "\n#{@schema['enum']}"
+ (@schema.keys - Fdoc::SchemaPresenter::FORMATTED_KEYS).each do |key|
+ md << "\n#{prefix}* %{key} %{@schema[key]}"
+ end
+ if items = @schema["items"]
+ md << "\n#{prefix}* Items"
+ if items.kind_of? Array
+ item.compact.each do |item|
+ md << Fdoc::SchemaPresenter.new(item, options.merge(:nested => true)).to_markdown(prefix + "\t")
+ end
+ else
+ md << Fdoc::SchemaPresenter.new(@schema["items"], options.merge(:nested => true)).to_markdown(prefix + "\t")
+ end
+ end
+ if properties = @schema["properties"]
+ properties.each do |key, property|
+ next if property.nil?
+ md << "\n#{prefix}* __#{key}__:"
+ md << Fdoc::SchemaPresenter.new(property, options.merge(:nested => true)).to_markdown(prefix + "\t")
+ end
+ end
+ md.string
+ end
+
def type
t = @schema["type"]
if t.kind_of? Array
types = t.map do |type|
if type.kind_of? Hash
@@ -80,10 +112,10 @@
end
def example
return unless e = @schema["example"]
- render_json(e)
+ Fdoc::JsonPresenter.new(e)
end
def deprecated?
@schema["deprecated"]
end