class Pandocomatic::PandocMetadata::MetadataBlockList
List of YAML metadata blocks present in some input source file
Public Class Methods
new(input, path)
click to toggle source
# File lib/pandocomatic/pandoc_metadata.rb, line 215 def initialize(input, path) blocks = extract_blocks input, path if blocks.any? { |b| !b.is_a? Hash } raise PandocMetadataError.new :found_horizontal_lines_with_three_dashes, nil, path end @metadata_blocks = blocks end
Public Instance Methods
count_pandocomatic_blocks()
click to toggle source
Count the number of metadata blocks with a “pandocomatic_” property.
# File lib/pandocomatic/pandoc_metadata.rb, line 225 def count_pandocomatic_blocks @metadata_blocks.count do |block| block.key? 'pandocomatic_' or block.key? 'pandocomatic' end end
full()
click to toggle source
Combine all metadata blocks into a single metadata block @return [Hash]
# File lib/pandocomatic/pandoc_metadata.rb, line 233 def full # According to the pandoc manual: "A document may contain multiple # metadata blocks. The metadata fields will be combined through a # left-biased union: if two metadata blocks attempt to set the # same field, the value from the first block will be taken." # # Here we do the same @metadata_blocks .reverse .reduce({}) { |metadata, block| metadata.merge!(block) } end
Private Instance Methods
extract_blocks(input, path)
click to toggle source
# File lib/pandocomatic/pandoc_metadata.rb, line 247 def extract_blocks(input, path) starts = input.scan(BLOCK_START) if starts.empty? # No YAML metadata blocks expected return [] end # Expect YAML metadata blocks input .scan(METADATA_BLOCK) .map { |match| PandocomaticYAML.load "---#{match.join}...", path } .select { |block| !block.nil? and !block.empty? } rescue StandardError => e raise PandocMetadataError.new :expected_to_find_YAML_metadata_blocks, e, path end