Sha256: 362bab8589f33832b4e1c61a621f6af76ae4917f787dc38e2cfc49dbbf0525f6

Contents?: true

Size: 877 Bytes

Versions: 3

Compression:

Stored size: 877 Bytes

Contents

# typed: true
# frozen_string_literal: true

require "singleton"

require "packwerk/parsers"

module Packwerk
  module Parsers
    class Factory
      include Singleton

      RUBY_REGEX = %r{
        # Although not important for regex, these are ordered from most likely to match to least likely.
        \.(rb|rake|builder|gemspec|ru)\Z
        |
        (Gemfile|Rakefile)\Z
      }x
      private_constant :RUBY_REGEX

      ERB_REGEX = /\.erb\Z/
      private_constant :ERB_REGEX

      def for_path(path)
        case path
        when RUBY_REGEX
          @ruby_parser ||= Ruby.new
        when ERB_REGEX
          @erb_parser ||= erb_parser_class.new
        end
      end

      def erb_parser_class
        @erb_parser_class ||= Erb
      end

      def erb_parser_class=(klass)
        @erb_parser_class = klass
        @erb_parser = nil
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
packwerk-1.1.3 lib/packwerk/parsers/factory.rb
packwerk-1.1.2 lib/packwerk/parsers/factory.rb
packwerk-1.1.1 lib/packwerk/parsers/factory.rb