Class: FrontMatterParser::Parser

Inherits:
Object
  • Object
show all
Defined in:
lib/front_matter_parser/parser.rb

Overview

Entry point to parse a front matter from a string or file.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(syntax_parser, loader: Loader::Yaml.new) ⇒ Parser

details.

Parameters:

  • syntax_parser (Object)

    Syntax parser to use. It can be one of two things:

    • An actual object which acts like a parser. See SyntaxParser for details.

    • A symbol, in which case it refers to a parser FrontMatterParser::SyntaxParser::#{symbol.capitalize} which can be initialized without arguments

  • loader (Object) (defaults to: Loader::Yaml.new)

    Front matter loader to use. See Loader for



53
54
55
56
# File 'lib/front_matter_parser/parser.rb', line 53

def initialize(syntax_parser, loader: Loader::Yaml.new)
  @syntax_parser = infer_syntax_parser(syntax_parser)
  @loader = loader
end

Instance Attribute Details

#loaderObject (readonly)

Current loader in use. See Loader for details



12
13
14
# File 'lib/front_matter_parser/parser.rb', line 12

def loader
  @loader
end

#syntax_parserObject (readonly)

Current syntax parser in use. See SyntaxParser



8
9
10
# File 'lib/front_matter_parser/parser.rb', line 8

def syntax_parser
  @syntax_parser
end

Class Method Details

.parse_file(pathname, syntax_parser: nil, loader: nil) ⇒ Parsed

Parses front matter and content from given pathname, inferring syntax from the extension or, otherwise, using syntax_parser argument.

Parameters:

  • pathname (String)
  • syntax_parser (Object) (defaults to: nil)
  • loader (Object) (defaults to: nil)

    see Loader

Returns:

  • (Parsed)

    parsed front matter and content



21
22
23
24
25
26
27
# File 'lib/front_matter_parser/parser.rb', line 21

def self.parse_file(pathname, syntax_parser: nil, loader: nil)
  syntax_parser ||= syntax_from_pathname(pathname)
  loader ||= Loader::Yaml.new
  File.open(pathname) do |file|
    new(syntax_parser, loader: loader).call(file.read)
  end
end

Instance Method Details

#call(string) ⇒ Parsed

Parses front matter and content from given string

:reek:FeatureEnvy

Parameters:

  • string (String)

Returns:

  • (Parsed)

    parsed front matter and content



63
64
65
66
67
68
69
70
71
72
# File 'lib/front_matter_parser/parser.rb', line 63

def call(string)
  match = syntax_parser.call(string)
  front_matter, content =
    if match
      [loader.call(match[:front_matter]), match[:content]]
    else
      [{}, string]
    end
  Parsed.new(front_matter: front_matter, content: content)
end