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
- .content_type?(model) ⇒ Boolean
- .escape(title) ⇒ Object
- .resolve(title) ⇒ Object
- .resolve_element(element) ⇒ Object
- .resolve_model(model) ⇒ Object
- .text_type?(model) ⇒ Boolean
Class Method Details
.content_type?(model) ⇒ 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
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 |