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/footnote.rb,
lib/coradoc/mirror/handlers/reviewer.rb,
lib/coradoc/mirror/handlers/paragraph.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/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/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/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.5'
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 ‘type` and delegates to the matching Node subclass’s lutaml-generated ‘from_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 |
# 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::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.
165 166 167 168 169 170 171 172 173 |
# File 'lib/coradoc/mirror.rb', line 165 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.
143 144 145 146 |
# File 'lib/coradoc/mirror.rb', line 143 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.
153 154 155 156 |
# File 'lib/coradoc/mirror.rb', line 153 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.
133 134 135 |
# File 'lib/coradoc/mirror.rb', line 133 def self.transform(document, registry: default_registry, partition_structural: false) CoreModelToMirror.new(registry: registry).call(document, partition_structural: partition_structural) end |