Module: Coradoc::Mirror
- Defined in:
- lib/coradoc/mirror.rb,
lib/coradoc/mirror/mark.rb,
lib/coradoc/mirror/mark.rb,
lib/coradoc/mirror/mark.rb,
lib/coradoc/mirror/node.rb,
lib/coradoc/mirror/node.rb,
lib/coradoc/mirror/node.rb,
lib/coradoc/mirror/version.rb,
lib/coradoc/mirror/handlers.rb,
lib/coradoc/mirror/partitioner.rb,
lib/coradoc/mirror/transformer.rb,
lib/coradoc/mirror/handlers/toc.rb,
lib/coradoc/mirror/handlers/list.rb,
lib/coradoc/mirror/handlers/image.rb,
lib/coradoc/mirror/handlers/table.rb,
lib/coradoc/mirror/handlers/verse.rb,
lib/coradoc/mirror/handlers/inline.rb,
lib/coradoc/mirror/reverse_builder.rb,
lib/coradoc/mirror/handler_registry.rb,
lib/coradoc/mirror/handlers/comment.rb,
lib/coradoc/mirror/handlers/example.rb,
lib/coradoc/mirror/handlers/include.rb,
lib/coradoc/mirror/handlers/sidebar.rb,
lib/coradoc/mirror/frontmatter_query.rb,
lib/coradoc/mirror/handlers/abstract.rb,
lib/coradoc/mirror/handlers/footnote.rb,
lib/coradoc/mirror/handlers/reviewer.rb,
lib/coradoc/mirror/handlers/paragraph.rb,
lib/coradoc/mirror/handlers/partintro.rb,
lib/coradoc/mirror/mirror_json_format.rb,
lib/coradoc/mirror/mirror_yaml_format.rb,
lib/coradoc/mirror/handlers/admonition.rb,
lib/coradoc/mirror/handlers/blockquote.rb,
lib/coradoc/mirror/handlers/code_block.rb,
lib/coradoc/mirror/handlers/open_block.rb,
lib/coradoc/mirror/handlers/structural.rb,
lib/coradoc/mirror/reverse_builder/toc.rb,
lib/coradoc/mirror/core_model_to_mirror.rb,
lib/coradoc/mirror/handlers/frontmatter.rb,
lib/coradoc/mirror/mark_reverse_builder.rb,
lib/coradoc/mirror/mirror_to_core_model.rb,
lib/coradoc/mirror/reverse_builder/base.rb,
lib/coradoc/mirror/reverse_builder/text.rb,
lib/coradoc/mirror/handlers/bibliography.rb,
lib/coradoc/mirror/reverse_builder/image.rb,
lib/coradoc/mirror/reverse_builder/table.rb,
lib/coradoc/mirror/reverse_builder/verse.rb,
lib/coradoc/mirror/handlers/generic_block.rb,
lib/coradoc/mirror/reverse_builder/figure.rb,
lib/coradoc/mirror/reverse_builder/header.rb,
lib/coradoc/mirror/reverse_builder/caption.rb,
lib/coradoc/mirror/reverse_builder/example.rb,
lib/coradoc/mirror/reverse_builder/include.rb,
lib/coradoc/mirror/reverse_builder/section.rb,
lib/coradoc/mirror/reverse_builder/sidebar.rb,
lib/coradoc/mirror/frontmatter_tree_to_hash.rb,
lib/coradoc/mirror/handlers/definition_list.rb,
lib/coradoc/mirror/handlers/horizontal_rule.rb,
lib/coradoc/mirror/reverse_builder/abstract.rb,
lib/coradoc/mirror/reverse_builder/document.rb,
lib/coradoc/mirror/reverse_builder/preamble.rb,
lib/coradoc/mirror/reverse_builder/sections.rb,
lib/coradoc/mirror/reverse_builder/footnotes.rb,
lib/coradoc/mirror/reverse_builder/list_item.rb,
lib/coradoc/mirror/reverse_builder/paragraph.rb,
lib/coradoc/mirror/reverse_builder/partintro.rb,
lib/coradoc/mirror/reverse_builder/table_row.rb,
lib/coradoc/mirror/reverse_builder/toc_entry.rb,
lib/coradoc/mirror/reverse_builder/admonition.rb,
lib/coradoc/mirror/reverse_builder/blockquote.rb,
lib/coradoc/mirror/reverse_builder/code_block.rb,
lib/coradoc/mirror/reverse_builder/hard_break.rb,
lib/coradoc/mirror/reverse_builder/open_block.rb,
lib/coradoc/mirror/reverse_builder/pass_block.rb,
lib/coradoc/mirror/reverse_builder/raw_inline.rb,
lib/coradoc/mirror/reverse_builder/soft_break.rb,
lib/coradoc/mirror/reverse_builder/stem_block.rb,
lib/coradoc/mirror/reverse_builder/table_body.rb,
lib/coradoc/mirror/reverse_builder/table_cell.rb,
lib/coradoc/mirror/reverse_builder/table_head.rb,
lib/coradoc/mirror/reverse_builder/bullet_list.rb,
lib/coradoc/mirror/reverse_builder/frontmatter.rb,
lib/coradoc/mirror/reverse_builder/inline_text.rb,
lib/coradoc/mirror/reverse_builder/biblio_entry.rb,
lib/coradoc/mirror/reverse_builder/bibliography.rb,
lib/coradoc/mirror/reverse_builder/ordered_list.rb,
lib/coradoc/mirror/reverse_builder/generic_block.rb,
lib/coradoc/mirror/reverse_builder/literal_block.rb,
lib/coradoc/mirror/reverse_builder/footnote_entry.rb,
lib/coradoc/mirror/reverse_builder/definition_list.rb,
lib/coradoc/mirror/reverse_builder/footnote_marker.rb,
lib/coradoc/mirror/reverse_builder/horizontal_rule.rb
Defined Under Namespace
Modules: FrontmatterQuery, FrontmatterTreeToHash, Handlers, MarkReverseBuilder, MirrorJsonFormat, MirrorYamlFormat, Partitioner, ReverseBuilder Classes: CoreModelToMirror, Error, HandlerRegistry, Mark, MirrorToCoreModel, Node, Transformer
Constant Summary collapse
- VERSION =
'0.1.9'
Class Method Summary collapse
-
.default_registry ⇒ HandlerRegistry
Build the default handler registry with all built-in handlers.
-
.from_hash(hash) ⇒ Node?
Top-level hash dispatcher: reads
typeand delegates to the matching Node subclass's lutaml-generatedfrom_hash. -
.to_json(document, pretty: false, registry: default_registry) ⇒ String
Convenience: transform and serialize to JSON string.
-
.to_yaml(document, registry: default_registry) ⇒ String
Convenience: transform and serialize to YAML string.
-
.transform(document, registry: default_registry, partition_structural: false) ⇒ Node::Document
Convenience: transform a CoreModel document to Mirror JSON in one call.
Class Method Details
.default_registry ⇒ HandlerRegistry
Build the default handler registry with all built-in handlers.
Third-party code can add handlers to extend the registry without modifying this method (OCP). Each handler maps a CoreModel class to a handler module/class that produces Mirror nodes.
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
# File 'lib/coradoc/mirror.rb', line 46 def self.default_registry registry = HandlerRegistry.new # ── Structural ── registry.register(CoreModel::DocumentElement, Handlers::Structural, method_name: :document) registry.register(CoreModel::SectionElement, Handlers::Structural, method_name: :section) registry.register(CoreModel::PreambleElement, Handlers::Structural, method_name: :preamble) registry.register(CoreModel::HeaderElement, Handlers::Structural, method_name: :header) # ── Paragraphs ── registry.register(CoreModel::ParagraphBlock, Handlers::Paragraph) # ── Code / Preformatted ── registry.register(CoreModel::SourceBlock, Handlers::CodeBlock, method_name: :source) registry.register(CoreModel::ListingBlock, Handlers::CodeBlock, method_name: :listing) registry.register(CoreModel::LiteralBlock, Handlers::CodeBlock, method_name: :literal) registry.register(CoreModel::PassBlock, Handlers::CodeBlock, method_name: :pass) registry.register(CoreModel::StemBlock, Handlers::CodeBlock, method_name: :stem) # ── Blocks ── registry.register(CoreModel::QuoteBlock, Handlers::Blockquote) registry.register(CoreModel::ExampleBlock, Handlers::Example) registry.register(CoreModel::SidebarBlock, Handlers::Sidebar) registry.register(CoreModel::AbstractBlock, Handlers::Abstract) registry.register(CoreModel::PartintroBlock, Handlers::Partintro) registry.register(CoreModel::OpenBlock, Handlers::OpenBlock) registry.register(CoreModel::VerseBlock, Handlers::Verse) registry.register(CoreModel::CommentBlock, Handlers::Comment) registry.register(CoreModel::HorizontalRuleBlock, Handlers::HorizontalRule) registry.register(CoreModel::ReviewerBlock, Handlers::Reviewer) # ── Annotations / Admonitions ── registry.register(CoreModel::AnnotationBlock, Handlers::Admonition) # ── Lists ── registry.register(CoreModel::ListBlock, Handlers::List) registry.register(CoreModel::DefinitionList, Handlers::DefinitionList) # ── Tables ── registry.register(CoreModel::Table, Handlers::Table) # ── Images ── registry.register(CoreModel::Image, Handlers::Image) # ── Inline ── registry.register(CoreModel::InlineElement, Handlers::Inline) registry.register(CoreModel::TextContent, Handlers::Inline, method_name: :text_content) # ── Bibliography ── registry.register(CoreModel::Bibliography, Handlers::Bibliography) # ── Footnotes ── registry.register(CoreModel::Footnote, Handlers::Footnote) registry.register(CoreModel::FootnoteReference, Handlers::Footnote, method_name: :reference) # ── TOC ── registry.register(CoreModel::Toc, Handlers::Toc) # ── Frontmatter ── registry.register(CoreModel::FrontmatterBlock, Handlers::Frontmatter) # ── Include directive (text-graph edge) ── registry.register(CoreModel::Include, Handlers::Include) # ── Generic Block (catch-all for unrecognized block types) ── registry.register(CoreModel::Block, Handlers::GenericBlock) registry end |
.from_hash(hash) ⇒ Node?
Top-level hash dispatcher: reads type and delegates to the
matching Node subclass's lutaml-generated from_hash. This is a
module-level factory — the actual deserialization is done by
lutaml on the resolved subclass. Unknown types raise.
167 168 169 170 171 172 173 174 175 |
# File 'lib/coradoc/mirror.rb', line 167 def self.from_hash(hash) return nil if hash.nil? type = hash.is_a?(Hash) ? hash['type'] : nil klass_name = Node::TYPE_TO_CLASS[type] raise Error, "Unknown mirror node type: #{type.inspect}" unless klass_name Object.const_get(klass_name).from_hash(hash) end |
.to_json(document, pretty: false, registry: default_registry) ⇒ String
Convenience: transform and serialize to JSON string.
145 146 147 148 |
# File 'lib/coradoc/mirror.rb', line 145 def self.to_json(document, pretty: false, registry: default_registry) node = transform(document, registry: registry) pretty ? JSON.pretty_generate(node.to_hash) : JSON.generate(node.to_hash) end |
.to_yaml(document, registry: default_registry) ⇒ String
Convenience: transform and serialize to YAML string.
155 156 157 158 |
# File 'lib/coradoc/mirror.rb', line 155 def self.to_yaml(document, registry: default_registry) node = transform(document, registry: registry) YAML.dump(node.to_hash) end |
.transform(document, registry: default_registry, partition_structural: false) ⇒ Node::Document
Convenience: transform a CoreModel document to Mirror JSON in one call.
135 136 137 |
# File 'lib/coradoc/mirror.rb', line 135 def self.transform(document, registry: default_registry, partition_structural: false) CoreModelToMirror.new(registry: registry).call(document, partition_structural: partition_structural) end |