Module: Trifle::Docs::AppHelpers

Defined in:
lib/trifle/docs/app.rb

Instance Method Summary collapse

Instance Method Details

#handle_request(params, request) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
# File 'lib/trifle/docs/app.rb', line 21

def handle_request(params, request)
  url = params['splat'].first.chomp('/')
  meta = Trifle::Docs.meta(url: url)
  halt(404, 'Not Found') if meta.nil?

  set_vary_header unless file_meta?(meta)
  return render_markdown(meta, url) if render_markdown?(meta, request, params)
  return send_file(meta['path']) if file_meta?(meta)

  render_html(meta, url)
end

#markdown_content_type(request) ⇒ Object



60
61
62
63
64
# File 'lib/trifle/docs/app.rb', line 60

def markdown_content_type(request)
  return 'text/plain' if Trifle::Docs::Helper::AiDetection.ai_scraper?(request.user_agent)

  'text/markdown'
end

#markdown_requested?(request, params) ⇒ Boolean

Returns:

  • (Boolean)


8
9
10
11
12
# File 'lib/trifle/docs/app.rb', line 8

def markdown_requested?(request, params)
  return true if params['format'].to_s.downcase == 'md'

  request.env['HTTP_ACCEPT'].to_s.include?('text/markdown')
end

#render_generated_sitemapObject



51
52
53
54
55
56
57
58
# File 'lib/trifle/docs/app.rb', line 51

def render_generated_sitemap
  base_url = Trifle::Docs.default.sitemap_base_url || request.base_url
  content = Trifle::Docs::Helper::Sitemap.xml(base_url: base_url)
  halt(404, 'Not Found') if content.nil? || content.strip.empty?

  content_type 'application/xml'
  content
end

#render_html(meta, url) ⇒ Object



41
42
43
44
45
46
47
48
49
# File 'lib/trifle/docs/app.rb', line 41

def render_html(meta, url)
  erb (meta['template'] || 'page').to_sym, {}, {
    sitemap: Trifle::Docs.sitemap,
    collection: Trifle::Docs.collection(url: url),
    content: Trifle::Docs.content(url: url),
    meta: meta,
    url: url
  }
end

#render_llms_for(base_url, full:) ⇒ Object



71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/trifle/docs/app.rb', line 71

def render_llms_for(base_url, full:)
  base_url = normalize_base_url(base_url)
  url = llms_url(base_url, full: full)
  meta = Trifle::Docs.meta(url: url)
  return send_file(meta['path']) if file_meta?(meta)

  content = llms_content(full: full, base_url: base_url)
  halt(404, 'Not Found') if llms_missing?(content, full: full)

  content_type 'text/plain'
  content
end

#render_markdown(meta, url) ⇒ Object



33
34
35
36
37
38
39
# File 'lib/trifle/docs/app.rb', line 33

def render_markdown(meta, url)
  content_type markdown_content_type(request)
  Trifle::Docs::Helper::MarkdownLayout.render(
    meta: meta,
    raw_content: Trifle::Docs.raw_content(url: url)
  )
end

#render_markdown?(meta, request, params) ⇒ Boolean

Returns:

  • (Boolean)


14
15
16
17
18
19
# File 'lib/trifle/docs/app.rb', line 14

def render_markdown?(meta, request, params)
  return false if meta['type'] == 'file'

  markdown_requested?(request, params) ||
    Trifle::Docs::Helper::AiDetection.ai_scraper?(request.user_agent)
end

#set_vary_headerObject



66
67
68
69
# File 'lib/trifle/docs/app.rb', line 66

def set_vary_header
  headers['Vary'] = append_vary(headers['Vary'], 'User-Agent')
  headers['Vary'] = append_vary(headers['Vary'], 'Accept')
end