Module: Coradoc::Html::TitleText

Defined in:
lib/coradoc/html/title_text.rb

Overview

Resolves CoreModel title attributes to plain-text strings.

CoreModel titles can be String, CoreModel::Base (with .text), Array of mixed types, or nil. This utility provides a single resolution path used by TocBuilder, TocSerializer, Renderer, LayoutRenderer, and Drop classes.

Constant Summary collapse

TEXT_TYPES =
[CoreModel::TextContent, CoreModel::Term].freeze

Class Method Summary collapse

Class Method Details

.content_type?(model) ⇒ Boolean

Returns:

  • (Boolean)


52
53
54
# File 'lib/coradoc/html/title_text.rb', line 52

def content_type?(model)
  model.is_a?(CoreModel::InlineElement) || model.is_a?(CoreModel::StructuralElement)
end

.escape(title) ⇒ Object



26
27
28
29
# File 'lib/coradoc/html/title_text.rb', line 26

def escape(title)
  resolved = resolve(title)
  resolved ? Escape.escape_html(resolved) : nil
end

.resolve(title) ⇒ Object



16
17
18
19
20
21
22
23
24
# File 'lib/coradoc/html/title_text.rb', line 16

def resolve(title)
  case title
  when nil then nil
  when String then title
  when CoreModel::Base then resolve_model(title)
  when Array then title.map { |t| resolve_element(t) }.join
  else title.to_s
  end
end

.resolve_element(element) ⇒ Object



41
42
43
44
45
46
# File 'lib/coradoc/html/title_text.rb', line 41

def resolve_element(element)
  case element
  when CoreModel::Base then resolve_model(element)
  else element.to_s
  end
end

.resolve_model(model) ⇒ Object



31
32
33
34
35
36
37
38
39
# File 'lib/coradoc/html/title_text.rb', line 31

def resolve_model(model)
  if text_type?(model) && model.text
    model.text
  elsif content_type?(model) && model.content
    model.content.to_s
  else
    model.to_s
  end
end

.text_type?(model) ⇒ Boolean

Returns:

  • (Boolean)


48
49
50
# File 'lib/coradoc/html/title_text.rb', line 48

def text_type?(model)
  TEXT_TYPES.any? { |t| model.is_a?(t) }
end