Sha256: 8c134d11a206774b6cab53d6c49f093727e324be29da25bb8f1fea9b9678ba8f

Contents?: true

Size: 1022 Bytes

Versions: 1

Compression:

Stored size: 1022 Bytes

Contents

# frozen_string_literal: true

module FrontMatterParser
  module SyntaxParser
    # Parser for syntaxes which use end and finish comment delimiters
    class MultiLineComment
      extend Factorizable

      # @!attribute [r] regexp
      # A regexp that returns two groups: front_matter and content
      attr_reader :regexp

      def initialize
        @regexp = build_regexp(*self.class.delimiters)
      end

      # @see SyntaxParser
      def call(string)
        string.match(regexp)
      end

      # @see Factorizable
      # :nocov:
      def self.delimiters
        raise NotImplementedError
      end

      private

      # rubocop:disable Metrics/MethodLength
      def build_regexp(start_delimiter, end_delimiter)
        /
        \A
        [[:space:]]*
        #{start_delimiter}
        [[:space:]]*
        ---
        (?<front_matter>.*?)
        ---
        [[:space:]]*
        #{end_delimiter}
        [[:blank:]]*$[\n\r]
        (?<content>.*)
        \z
        /mx
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
front_matter_parser-0.1.1 lib/front_matter_parser/syntax_parser/multi_line_comment.rb