class FrontMatterParser::SyntaxParser::SingleLineComment

Parser for syntaxes which each comment is for a single line

Attributes

regexp[R]

@!attribute [r] regexp A regexp that returns two groups: front_matter (with comment delimiter in it) and content

Public Class Methods

delimiters() click to toggle source

@see Factorizable :nocov:

# File lib/front_matter_parser/syntax_parser/single_line_comment.rb, line 34
def self.delimiters
  raise NotImplementedError
end
new() click to toggle source
# File lib/front_matter_parser/syntax_parser/single_line_comment.rb, line 14
def initialize
  @regexp = build_regexp(*self.class.delimiters)
end
remove_delimiter(front_matter) click to toggle source

@!visibility private

# File lib/front_matter_parser/syntax_parser/single_line_comment.rb, line 39
def self.remove_delimiter(front_matter)
  delimiter = delimiters.first
  front_matter.gsub(/^[\s\t]*#{delimiter}/, '')
end

Public Instance Methods

call(string) click to toggle source

@see SyntaxParser

# File lib/front_matter_parser/syntax_parser/single_line_comment.rb, line 19
def call(string)
  match = string.match(regexp)
  if match
    front_matter = self.class.remove_delimiter(match[:front_matter])
    {
      front_matter: front_matter,
      content: match[:content]
    }
  else
    match
  end
end

Private Instance Methods

build_regexp(delimiter) click to toggle source

rubocop:disable Metrics/MethodLength

# File lib/front_matter_parser/syntax_parser/single_line_comment.rb, line 47
def build_regexp(delimiter)
  /
  \A
  [[:space:]]*
  #{delimiter}[[:blank:]]*
  ---
  (?<front_matter>.*?)
  ^[[:blank:]]*#{delimiter}[[:blank:]]*
  ---
  [[:blank:]]*$[\n\r]
  (?<content>.*)
  \z
  /mx
end