Sha256: 619acb83e276f6bfcdd54a27ea45c06034bafa278256b4a131d85094ff4179d4

Contents?: true

Size: 1.44 KB

Versions: 5

Compression:

Stored size: 1.44 KB

Contents

# frozen_string_literal: true

module Git
  module Lint
    module Parsers
      module Trailers
        class Collaborator
          DEFAULT_KEY_PATTERN = /\ACo.*Authored.*By.*\Z/i

          DEFAULT_MATCH_PATTERN = /
            (?<key>\A.+)         # Key (anchored to start of line).
            (?<delimiter>:)      # Key delimiter.
            (?<key_space>\s?)    # Space delimiter (optional).
            (?<name>.*?)         # Collaborator name (smallest possible).
            (?<name_space>\s?)   # Space delimiter (optional).
            (?<email><.+>)?      # Collaborator email (optional).
            \Z                   # End of line.
          /x

          def initialize text,
                         key_pattern: DEFAULT_KEY_PATTERN,
                         match_pattern: DEFAULT_MATCH_PATTERN

            @text = String text
            @key_pattern = key_pattern
            @match_pattern = match_pattern
            @matches = build_matches
          end

          def key = String(matches["key"])

          def name = String(matches["name"])

          def email = String(matches["email"]).delete_prefix("<").delete_suffix(">")

          def match? = text.match?(key_pattern)

          private

          attr_reader :text, :key_pattern, :match_pattern, :matches

          def build_matches
            text.match(match_pattern).then { |data| data ? data.named_captures : Hash.new }
          end
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
git-lint-2.4.0 lib/git/lint/parsers/trailers/collaborator.rb
git-lint-2.3.3 lib/git/lint/parsers/trailers/collaborator.rb
git-lint-2.3.2 lib/git/lint/parsers/trailers/collaborator.rb
git-lint-2.3.1 lib/git/lint/parsers/trailers/collaborator.rb
git-lint-2.3.0 lib/git/lint/parsers/trailers/collaborator.rb