class Neo4j::AsciidoctorExtensions::DocumentMetadataGeneratorPostProcessor
A postprocess that generates a metadata file (in YAML format) from a list of document attributes.
Usage:
# .file.adoc #:document-metadata-attrs-include: author,slug,parent-path,tags*,taxonomies*<> #:tags: intro,course #:taxonomies: os=linux,programming_language=java,neo4j_version=3-5;3-6 #:slug: intro-neo4j-4-0 #:parent_path: /intro # .file.yml # --- # slug: intro-neo4j-4-0 # parent_path: /intro # author: # name: Michael Hunger # first_name: Michael # last_name: Hunger # email: michael.hunger@neotechnology.com # tags: # - intro # - course # taxonomies: # - key: os # values: # - linux # - key: programming_language # values: # - java # - key: neo4j_version # values: # - 3-5 # - 3-6
Public Instance Methods
process(document, output)
click to toggle source
# File lib/neo4j/asciidoctor/extensions/document_metadata_generator/extension.rb, line 57 def process(document, output) if (attrs_include = document.attr 'document-metadata-attrs-include') if (outfile = document.attr 'outfile') require 'yaml' metadata = {} attrs_include = attrs_include .split(',') .map(&:strip) .reject(&:empty?) attrs_include.each do |attr_include| value_type = resolve_value_type(attr_include) attr_name = resolve_attr_name(attr_include) if document.attr? attr_name attr_value = resolve_attribute_value(attr_name, document, value_type) metadata[attr_name.gsub('-', '_')] = attr_value end end metadata['title'] = document.doctitle write(metadata, outfile) end end output end
Private Instance Methods
resolve_attr_name(attr_include)
click to toggle source
# File lib/neo4j/asciidoctor/extensions/document_metadata_generator/extension.rb, line 94 def resolve_attr_name(attr_include) attr_include .gsub(/\*$/, '') .gsub(/\*<>$/, '') .gsub(/\*<>$/, '') end
resolve_attribute_value(attr_name, document, value_type)
click to toggle source
# File lib/neo4j/asciidoctor/extensions/document_metadata_generator/extension.rb, line 107 def resolve_attribute_value(attr_name, document, value_type) if attr_name == 'author' author = {} author['name'] = document.attr 'author' author['first_name'] = document.attr 'firstname' author['last_name'] = document.attr 'lastname' author['email'] = document.attr 'email' author elsif value_type == ValueType::LIST_STRING split_values(attr_name, document) elsif value_type == ValueType::LIST_TUPLES split_values(attr_name, document) .map do |tuple| key, value = tuple.split('=') { 'key' => key.strip, 'values' => (value && value.strip.split(';').map(&:strip).reject(&:empty?)) || [] } end else document.attr attr_name end end
resolve_value_type(attr_include)
click to toggle source
# File lib/neo4j/asciidoctor/extensions/document_metadata_generator/extension.rb, line 84 def resolve_value_type(attr_include) if attr_include.end_with? '*' ValueType::LIST_STRING elsif (attr_include.end_with? '*<>') || (attr_include.end_with? '*<>') ValueType::LIST_TUPLES else ValueType::STRING end end
split_values(attr_name, document)
click to toggle source
# File lib/neo4j/asciidoctor/extensions/document_metadata_generator/extension.rb, line 128 def split_values(attr_name, document) (document.attr attr_name) .split(',') .map(&:strip) .reject(&:empty?) end
write(metadata, outfile)
click to toggle source
# File lib/neo4j/asciidoctor/extensions/document_metadata_generator/extension.rb, line 101 def write(metadata, outfile) outputdir = File.dirname(outfile) filename = File.basename(outfile, File.extname(outfile)) File.open("#{outputdir}/#{filename}.yml", 'w') { |file| file.write(metadata.to_yaml) } end