class Garage::Docs::Document

Attributes

cached[RW]
pathname[R]

Public Class Methods

all() click to toggle source
# File lib/garage/docs/document.rb, line 5
def all
  application.documents
end
build_permissions(perms, other, target) click to toggle source
# File lib/garage/docs/document.rb, line 29
def build_permissions(perms, other, target)
  perms.permits! :read
end
find_by_name(name) click to toggle source
# File lib/garage/docs/document.rb, line 9
def find_by_name(name)
  all.find {|document| document.name == name }
end
new(pathname, cached = false) click to toggle source
# File lib/garage/docs/document.rb, line 50
def initialize(pathname, cached = false)
  @pathname = pathname
  @cached = cached
end
renderer() click to toggle source
# File lib/garage/docs/document.rb, line 13
def renderer
  @renderer ||= Redcarpet::Markdown.new(
    Garage::Docs::Renderer.new(with_toc_data: true),
    fenced_code_blocks: true,
    no_intra_emphasis: true,
    tables: true,
  )
end
toc_renderer() click to toggle source
# File lib/garage/docs/document.rb, line 22
def toc_renderer
  @toc_renderer ||= Redcarpet::Markdown.new(
    Garage::Docs::TocRenderer.new,
    no_intra_emphasis: true
  )
end

Private Class Methods

application() click to toggle source
# File lib/garage/docs/document.rb, line 35
def application
  Garage::Docs.application
end

Public Instance Methods

body() click to toggle source
# File lib/garage/docs/document.rb, line 89
def body
  pathname.read
end
cache_key(type) click to toggle source
# File lib/garage/docs/document.rb, line 63
def cache_key(type)
  "garage-doc-#{type}-#{pathname}"
end
examples(*args) click to toggle source
# File lib/garage/docs/document.rb, line 99
def examples(*args)
  if resource_class && resource_class.respond_to?(:garage_examples)
    resource_class.garage_examples(*args)
  else
    []
  end
end
humanized_name() click to toggle source
# File lib/garage/docs/document.rb, line 59
def humanized_name
  name.split('-').map(&:humanize).join(' / ')
end
name() click to toggle source
# File lib/garage/docs/document.rb, line 55
def name
  relative_base_name.to_s.gsub('/', '-')
end
render() click to toggle source
# File lib/garage/docs/document.rb, line 77
def render
  if cached
    Rails.cache.fetch(cache_key(:render)) do
      self.class.renderer.render(body).html_safe
    end
  else
    self.class.renderer.render(body).html_safe
  end
end
Also aliased as: rendered_body
rendered_body()
Alias for: render
resource_class() click to toggle source
# File lib/garage/docs/document.rb, line 93
def resource_class
  @resource_class ||= extract_resource_class || relative_base_name.camelize.singularize.constantize
rescue NameError
  nil
end
toc() click to toggle source
# File lib/garage/docs/document.rb, line 67
def toc
  if cached
    Rails.cache.fetch(cache_key(:toc)) do
      self.class.toc_renderer.render(body).html_safe
    end
  else
    self.class.toc_renderer.render(body).html_safe
  end
end
visible_to?(user) click to toggle source

If you need authentication logic, assign a Proc to Garage.docs.configuration.docs_authorization_method.

Example:

Garage.docs.configuration.docs_authorization_method do |args|
  if name.start_with?("admin_")
    args[:user].admin?
  else
    true
  end
end
# File lib/garage/docs/document.rb, line 120
def visible_to?(user)
  if method = Garage.configuration.docs.docs_authorization_method
    method.call(document: self, user: user)
  else
    true
  end
end

Private Instance Methods

extract_resource_class() click to toggle source
# File lib/garage/docs/document.rb, line 130
def extract_resource_class
  if /<!-- resource_class: (\S+)/ === body
    $1.constantize
  end
end
relative_base_name() click to toggle source
# File lib/garage/docs/document.rb, line 136
def relative_base_name
  pathname.relative_path_from(Pathname.new("#{Garage.configuration.docs.document_root}/resources")).to_s.sub('.md', '')
end