Class: RubyGemsRequirementsSystem::RequirementsParser

Inherits:
Object
  • Object
show all
Defined in:
lib/rubygems-requirements-system/requirements-parser.rb

Instance Method Summary collapse

Constructor Details

#initialize(gemspec_requirements, platform, ui) ⇒ RequirementsParser

Returns a new instance of RequirementsParser.



23
24
25
26
27
# File 'lib/rubygems-requirements-system/requirements-parser.rb', line 23

def initialize(gemspec_requirements, platform, ui)
  @gemspec_requirements = gemspec_requirements
  @platform = platform
  @ui = ui
end

Instance Method Details

#parseObject



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/rubygems-requirements-system/requirements-parser.rb', line 29

def parse
  all_dependencies_set = {}
  requirements = {}
  @gemspec_requirements.each do |gemspec_requirement|
    components = gemspec_requirement.split(/:\s*/, 4)
    next unless components.size == 4

    id, raw_dependencies, platform, system_package = components
    next unless id == "system"

    dependencies = parse_dependencies(raw_dependencies)
    next if dependencies.empty?

    all_dependencies_set[dependencies] = true

    next unless @platform.target?(platform)
    requirements[dependencies] ||= []
    requirements[dependencies] << system_package
  end
  (all_dependencies_set.keys - requirements.keys).each do |not_used_deps|
    not_used_packages = not_used_deps.select do |dependency|
      dependency.is_a?(Package)
    end
    next if not_used_packages.empty?
    system_packages = @platform.default_system_packages(not_used_packages)
    next if system_packages.nil?
    requirements[not_used_deps] = system_packages
  end
  requirements.collect do |dependencies, system_packages|
    system_packages = detect_system_repositories(system_packages)
    Requirement.new(dependencies, system_packages)
  end
end