class Brainstem::ApiDocs::Formatters::Markdown::PresenterFormatter
Attributes
output[RW]
presenter[RW]
Public Class Methods
new(presenter, options = {})
click to toggle source
Calls superclass method
Brainstem::ApiDocs::Formatters::AbstractFormatter::new
# File lib/brainstem/api_docs/formatters/markdown/presenter_formatter.rb, line 12 def initialize(presenter, options = {}) self.presenter = presenter self.output = "" super options end
Public Instance Methods
call()
click to toggle source
# File lib/brainstem/api_docs/formatters/markdown/presenter_formatter.rb, line 21 def call return output if presenter.nodoc? format_title! format_brainstem_keys! format_description! format_fields! format_filters! format_sort_orders! format_associations! output end
Private Instance Methods
format_associations!()
click to toggle source
# File lib/brainstem/api_docs/formatters/markdown/presenter_formatter.rb, line 160 def format_associations! return if presenter.valid_associations.empty? output << md_h5("Associations") output << "Association Name | Associated Class | Description\n" output << " -------------- | -------------- | ----------\n" output << presenter.valid_associations.inject("") do |buffer, (_, association)| link = presenter.link_for_association(association) if link link = md_a(association.target_class, link) else link = association.target_class.to_s end desc = association.description.to_s if association.options && association.options[:restrict_to_only] desc += "." unless desc =~ /\.\s*\z/ desc += " Restricted to queries using the #{md_inline_code("only")} parameter." desc.strip! end buffer << md_inline_code(association.name) + " | " + link + " | " + desc + "\n" end output << "\n" end
format_brainstem_keys!()
click to toggle source
# File lib/brainstem/api_docs/formatters/markdown/presenter_formatter.rb, line 43 def format_brainstem_keys! text = "Top-level key: " text << presenter.brainstem_keys .map(&method(:md_inline_code)) .join(" / ") output << md_p(text) end
format_description!()
click to toggle source
# File lib/brainstem/api_docs/formatters/markdown/presenter_formatter.rb, line 52 def format_description! output << md_p(presenter.description) unless presenter.description.empty? end
format_field_branch(branch, indent_level = 0)
click to toggle source
# File lib/brainstem/api_docs/formatters/markdown/presenter_formatter.rb, line 77 def format_field_branch(branch, indent_level = 0) branch.inject("") do |buffer, (name, field)| if nested_field?(field) sub_fields = format_field_leaf(field, indent_level) + "\n" sub_fields << format_field_branch(field.to_h, indent_level + 1) buffer += md_li(sub_fields, indent_level) else buffer += md_li(format_field_leaf(field, indent_level), indent_level) end end end
format_field_leaf(field, indent_level)
click to toggle source
# File lib/brainstem/api_docs/formatters/markdown/presenter_formatter.rb, line 56 def format_field_leaf(field, indent_level) text = md_inline_code(field.name.to_s) text << md_inline_type(field.type, field.options[:item_type]) text << "\n" text << md_li(field.description, indent_level + 1) if field.description if field.options[:if] conditions = field.options[:if] .reject { |cond| presenter.conditionals[cond].options[:nodoc] } .map {|cond| presenter.conditionals[cond].description || "" } .delete_if(&:empty?) .join(" and ") text << md_li("visible when #{conditions}", indent_level + 1) unless conditions.empty? end text << md_li("only returned when requested through the #{md_inline_code("optional_fields")} param") if field.optional? text.chomp! end
format_fields!()
click to toggle source
# File lib/brainstem/api_docs/formatters/markdown/presenter_formatter.rb, line 93 def format_fields! output << md_h5("Fields") if presenter.valid_fields.any? output << md_ul do format_field_branch(presenter.valid_fields) end else output << md_p("No fields were listed.") end end
format_filters!()
click to toggle source
# File lib/brainstem/api_docs/formatters/markdown/presenter_formatter.rb, line 106 def format_filters! if presenter.valid_filters.any? output << md_h5("Filters") output << md_ul do presenter.valid_filters.inject("") do |buffer, (name, opts)| text = md_inline_code(name) text << md_inline_type(opts[:type]) if opts[:info] || opts[:items] description = opts[:info].to_s if opts[:items].present? description += "." unless description =~ /\.\s*\z/ description += " Available values: #{opts[:items].join(', ')}." end text << "\n" text << md_li(description, 1) text.chomp! end buffer += md_li(text) end end end end
format_sort_orders!()
click to toggle source
# File lib/brainstem/api_docs/formatters/markdown/presenter_formatter.rb, line 133 def format_sort_orders! if presenter.valid_sort_orders.any? output << md_h5("Sort Orders") output << md_ul do sorted_orders = presenter.valid_sort_orders.sort_by { |name, _| name.to_s } # Shift the default sort_order to the top sorted_orders.unshift sorted_orders.delete_at(sorted_orders.index { |name, _| name.to_s == presenter.default_sort_field }) sorted_orders.inject("") do |buffer, (name, opts)| text = "#{md_inline_code(name.to_s)}" if presenter.default_sort_field == name.to_s text += " - #{md_strong("default")} (#{presenter.default_sort_direction})" end if opts[:info] text += "\n" + md_li(opts[:info], 1) text.chomp! end buffer += md_li(text) end end end end
format_title!()
click to toggle source
# File lib/brainstem/api_docs/formatters/markdown/presenter_formatter.rb, line 39 def format_title! output << md_h4(presenter.title) end
nested_field?(field)
click to toggle source
# File lib/brainstem/api_docs/formatters/markdown/presenter_formatter.rb, line 89 def nested_field?(field) field.respond_to?(:configuration) end