class Brainstem::ApiDocs::Presenter

Attributes

atlas[RW]
const[RW]
document_empty_associations[RW]
document_empty_associations?[RW]
document_empty_filters[RW]
document_empty_filters?[RW]
filename_pattern[W]
include_internal[RW]
target_class[RW]

Public Class Methods

new(atlas, options = {}) { |self| ... } click to toggle source
Calls superclass method Brainstem::Concerns::Optional::new
# File lib/brainstem/api_docs/presenter.rb, line 41
def initialize(atlas, options = {})
  self.atlas = atlas
  self.document_empty_associations = Brainstem::ApiDocs.document_empty_presenter_associations
  self.document_empty_filters      = Brainstem::ApiDocs.document_empty_presenter_filters

  super options
  yield self if block_given?
end

Public Instance Methods

brainstem_keys() click to toggle source
# File lib/brainstem/api_docs/presenter.rb, line 87
def brainstem_keys
  const.possible_brainstem_keys.to_a.sort
end
conditionals() click to toggle source
# File lib/brainstem/api_docs/presenter.rb, line 180
def conditionals
  configuration[:conditionals]
end
contextual_documentation(key) click to toggle source

Returns a key if it exists and is documentable.

# File lib/brainstem/api_docs/presenter.rb, line 199
def contextual_documentation(key)
  configuration.has_key?(key) &&
    !nodoc_for?(configuration[key]) &&
    configuration[key][:info]
end
default_sort_direction() click to toggle source
# File lib/brainstem/api_docs/presenter.rb, line 192
def default_sort_direction
  @default_sort_direction ||= (default_sort_order.split(":")[1] || nil)
end
default_sort_field() click to toggle source
# File lib/brainstem/api_docs/presenter.rb, line 188
def default_sort_field
  @default_sort_field ||= (default_sort_order.split(":")[0] || nil)
end
default_sort_order() click to toggle source
# File lib/brainstem/api_docs/presenter.rb, line 184
def default_sort_order
  configuration[:default_sort_order] || ""
end
description() click to toggle source
# File lib/brainstem/api_docs/presenter.rb, line 91
def description
  contextual_documentation(:description) || ""
end
documentable_association?(_, association) click to toggle source

Returns whether this association should be documented based on nodoc and empty description.

@return [Bool] document this association?

# File lib/brainstem/api_docs/presenter.rb, line 172
def documentable_association?(_, association)
  !nodoc_for?(association.options) && # not marked nodoc and
    (
      document_empty_associations? || # document empty associations or
      !(association.description.nil? || association.description.empty?) # has description
    )
end
documentable_filter?(_, filter) click to toggle source
# File lib/brainstem/api_docs/presenter.rb, line 135
def documentable_filter?(_, filter)
  !nodoc_for?(filter) &&
    (
      document_empty_filters? || # document empty filters or
      !(filter[:info] || "").empty? # has info string
    )
end
extension() click to toggle source
# File lib/brainstem/api_docs/presenter.rb, line 64
def extension
  @extension ||= Brainstem::ApiDocs.output_extension
end
filename_pattern() click to toggle source
# File lib/brainstem/api_docs/presenter.rb, line 68
def filename_pattern
  @filename_pattern ||= Brainstem::ApiDocs.presenter_filename_pattern
end
invalid_field?(field) click to toggle source
# File lib/brainstem/api_docs/presenter.rb, line 102
def invalid_field?(field)
  nodoc_for?(field.options)
end
nested_field?(field) click to toggle source
# File lib/brainstem/api_docs/presenter.rb, line 106
def nested_field?(field)
  field.respond_to?(:configuration)
end
nodoc?() click to toggle source
# File lib/brainstem/api_docs/presenter.rb, line 79
def nodoc?
  nodoc_for?(configuration)
end
optional_field?(field) click to toggle source
# File lib/brainstem/api_docs/presenter.rb, line 110
def optional_field?(field)
  field.options[:optional]
end
optional_field_names(fields = configuration[:fields], buffer = []) click to toggle source
# File lib/brainstem/api_docs/presenter.rb, line 114
def optional_field_names(fields = configuration[:fields], buffer = [])
  fields.to_h.each do |field_name, field_config|
    next if invalid_field?(field_config)

    if optional_field?(field_config)
      buffer << field_name
    elsif nested_field?(field_config)
      optional_field_names_in(field_config.configuration, buffer)
    end
  end

  buffer
end
Also aliased as: optional_field_names_in
optional_field_names_in(fields = configuration[:fields], buffer = [])
relative_path_to_presenter(presenter, format) click to toggle source

Returns the relative path between this presenter and another given presenter.

# File lib/brainstem/api_docs/presenter.rb, line 209
def relative_path_to_presenter(presenter, format)
  my_path        = Pathname.new(File.dirname(suggested_filename_link(format)))
  presenter_path = Pathname.new(presenter.suggested_filename_link(format))

  presenter_path.relative_path_from(my_path).to_s
end
searchable?() click to toggle source
# File lib/brainstem/api_docs/presenter.rb, line 143
def searchable?
  configuration[:search].present?
end
suggested_filename(format) click to toggle source
# File lib/brainstem/api_docs/presenter.rb, line 50
def suggested_filename(format)
  filename_pattern
    .gsub('{{name}}', target_class.to_s.underscore)
    .gsub('{{extension}}', extension)
end
title() click to toggle source
# File lib/brainstem/api_docs/presenter.rb, line 83
def title
  contextual_documentation(:title) || const.to_s.demodulize
end
valid_associations() click to toggle source
# File lib/brainstem/api_docs/presenter.rb, line 151
def valid_associations
  configuration[:associations]
    .to_h
    .keep_if(&method(:documentable_association?))
end
valid_fields(fields = configuration[:fields]) click to toggle source
# File lib/brainstem/api_docs/presenter.rb, line 95
def valid_fields(fields = configuration[:fields])
  fields.to_h.reject do |_, field|
    invalid_field?(field) || (nested_field?(field) && valid_fields_in(field).none?)
  end
end
Also aliased as: valid_fields_in
valid_fields_in(fields = configuration[:fields])
Alias for: valid_fields
valid_filters() click to toggle source
# File lib/brainstem/api_docs/presenter.rb, line 129
def valid_filters
  configuration[:filters]
    .to_h
    .keep_if(&method(:documentable_filter?))
end
valid_options() click to toggle source
# File lib/brainstem/api_docs/presenter.rb, line 17
def valid_options
  super | [
    :const,
    :target_class,
    :filename_pattern,
    :filename_link_pattern,
    :document_empty_associations,
    :document_empty_filters,
    :include_internal
  ]
end
valid_sort_orders() click to toggle source
# File lib/brainstem/api_docs/presenter.rb, line 147
def valid_sort_orders
  configuration[:sort_orders].to_h.reject {|_k, v| nodoc_for?(v) }
end

Private Instance Methods

nodoc_for?(config) click to toggle source
# File lib/brainstem/api_docs/presenter.rb, line 218
def nodoc_for?(config)
  !!(config[:nodoc] || (config[:internal] && !include_internal))
end