41 lines
1.1 KiB
Ruby
41 lines
1.1 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module Gitlab
|
||
|
module DependencyLinker
|
||
|
module Parser
|
||
|
class Gemfile < MethodLinker
|
||
|
GIT_REGEX = Gitlab::DependencyLinker::GemfileLinker::GIT_REGEX
|
||
|
GITHUB_REGEX = Gitlab::DependencyLinker::GemfileLinker::GITHUB_REGEX
|
||
|
|
||
|
def initialize(plain_text)
|
||
|
@plain_text = plain_text
|
||
|
end
|
||
|
|
||
|
# Returns a list of Gitlab::DependencyLinker::Package
|
||
|
#
|
||
|
# keyword - The package definition keyword, e.g. `:gem` for
|
||
|
# Gemfile parsing, `:pod` for Podfile.
|
||
|
def parse(keyword:)
|
||
|
plain_lines.each_with_object([]) do |line, packages|
|
||
|
name = fetch(line, method_call_regex(keyword))
|
||
|
|
||
|
next unless name
|
||
|
|
||
|
git_ref = fetch(line, GIT_REGEX)
|
||
|
github_ref = fetch(line, GITHUB_REGEX)
|
||
|
|
||
|
packages << Gitlab::DependencyLinker::Package.new(name, git_ref, github_ref)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def fetch(line, regex, group: :name)
|
||
|
match = line.match(regex)
|
||
|
match[group] if match
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|