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
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