Module: Uprb::GemspecMetadata

Defined in:
lib/uprb/gemspec_metadata.rb

Defined Under Namespace

Classes: Result

Constant Summary collapse

KNOWN_KEYS =
%w[uprb.requires].freeze
REQUIRES_KEY =
"uprb.requires"
REQUIRE_ENTRY_PATTERN =
%r{\A[A-Za-z0-9_.][A-Za-z0-9_./-]*\z}

Class Method Summary collapse

Class Method Details

.parse_requires(value) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/uprb/gemspec_metadata.rb', line 34

def self.parse_requires(value)
  warnings = []
  entries = value.to_s.split(",").map(&:strip).reject(&:empty?)
  kept = entries.select do |entry|
    if REQUIRE_ENTRY_PATTERN.match?(entry)
      true
    else
      warnings << "uprb: ignoring gemspec metadata #{REQUIRES_KEY} entry #{entry.inspect}"
      false
    end
  end
  [kept, warnings]
end

.read(spec) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/uprb/gemspec_metadata.rb', line 11

def self.read(spec)
   = spec. || {}
  warnings = []
  requires = []

  .each do |key, value|
    next unless key.start_with?("uprb.")

    unless KNOWN_KEYS.include?(key)
      warnings << "uprb: ignoring unknown gemspec metadata key #{key.inspect}"
      next
    end

    if key == REQUIRES_KEY
      parsed, entry_warnings = parse_requires(value)
      requires.concat(parsed)
      warnings.concat(entry_warnings)
    end
  end

  Result.new(requires:, warnings:)
end