Class: GemXray::GemfileParser

Inherits:
Object
  • Object
show all
Defined in:
lib/gemxray/gemfile_parser.rb

Defined Under Namespace

Classes: DependencyEdge

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(gemfile_path) ⇒ GemfileParser

Returns a new instance of GemfileParser.



11
12
13
14
# File 'lib/gemxray/gemfile_parser.rb', line 11

def initialize(gemfile_path)
  @gemfile_path = File.expand_path(gemfile_path)
  @lockfile_path = "#{@gemfile_path}.lock"
end

Instance Attribute Details

#gemfile_pathObject (readonly)

Returns the value of attribute gemfile_path.



9
10
11
# File 'lib/gemxray/gemfile_parser.rb', line 9

def gemfile_path
  @gemfile_path
end

#lockfile_pathObject (readonly)

Returns the value of attribute lockfile_path.



9
10
11
# File 'lib/gemxray/gemfile_parser.rb', line 9

def lockfile_path
  @lockfile_path
end

Instance Method Details

#dependency_treeObject



31
32
33
34
35
36
37
38
39
40
# File 'lib/gemxray/gemfile_parser.rb', line 31

def dependency_tree
  parser = lockfile_parser
  return {} unless parser

  parser.specs.each_with_object({}) do |spec, tree|
    tree[spec.name] = spec.dependencies.map do |dependency|
      DependencyEdge.new(name: dependency.name, requirement: dependency.requirement)
    end
  end
end

#parseObject



16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/gemxray/gemfile_parser.rb', line 16

def parse
  @parse ||= begin
    dependencies = bundler_dependencies
     = .group_by(&:name)

    if dependencies.empty?
      .map { |entry| (entry, []) }
    else
      dependencies.map do |dependency|
        build_entry_from_dependency(dependency, )
      end
    end
  end
end

#rails_version(entries = parse) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/gemxray/gemfile_parser.rb', line 50

def rails_version(entries = parse)
  parser = lockfile_parser
  if parser
    rails_spec = parser.specs.find { |spec| spec.name == "rails" }
    return rails_spec.version.to_s if rails_spec
  end

  dependency = entries.find { |entry| entry.name == "rails" || entry.name == "railties" }
  return nil unless dependency

  dependency.version.to_s[/\d+\.\d+(?:\.\d+)?/]
end

#resolved_version(gem_name) ⇒ Object



63
64
65
66
67
68
# File 'lib/gemxray/gemfile_parser.rb', line 63

def resolved_version(gem_name)
  parser = lockfile_parser
  return nil unless parser

  parser.specs.find { |spec| spec.name == gem_name }&.version
end

#ruby_versionObject



42
43
44
45
46
47
48
# File 'lib/gemxray/gemfile_parser.rb', line 42

def ruby_version
  parser = lockfile_parser
  return RUBY_VERSION unless parser && parser.respond_to?(:ruby_version) && parser.ruby_version

  text = parser.ruby_version.to_s
  text[/\d+\.\d+(?:\.\d+)?/] || RUBY_VERSION
end