class Dependabot::Bundler::FileParser::GemfileDeclarationFinder
Checks whether a dependency is declared in a Gemfile
Attributes
dependency[R]
gemfile[R]
Public Class Methods
new(dependency:, gemfile:)
click to toggle source
# File lib/dependabot/bundler/file_parser/gemfile_declaration_finder.rb, line 11 def initialize(dependency:, gemfile:) @dependency = dependency @gemfile = gemfile end
Public Instance Methods
enhanced_req_string()
click to toggle source
# File lib/dependabot/bundler/file_parser/gemfile_declaration_finder.rb, line 20 def enhanced_req_string return unless gemfile_includes_dependency? fallback_string = dependency.fetch("requirement") req_nodes = declaration_node.children[3..-1] req_nodes = req_nodes.reject { |child| child.type == :hash } return fallback_string if req_nodes.none? return fallback_string unless req_nodes.all? { |n| n.type == :str } original_req_string = req_nodes.map { |n| n.children.last } fallback_requirement = Gem::Requirement.new(fallback_string.split(", ")) if fallback_requirement == Gem::Requirement.new(original_req_string) original_req_string.join(", ") else fallback_string end end
gemfile_includes_dependency?()
click to toggle source
# File lib/dependabot/bundler/file_parser/gemfile_declaration_finder.rb, line 16 def gemfile_includes_dependency? !declaration_node.nil? end
Private Instance Methods
declaration_node()
click to toggle source
# File lib/dependabot/bundler/file_parser/gemfile_declaration_finder.rb, line 44 def declaration_node return @declaration_node if defined?(@declaration_node) return unless Parser::CurrentRuby.parse(gemfile.content) @declaration_node = nil Parser::CurrentRuby.parse(gemfile.content).children.any? do |node| @declaration_node = deep_search_for_gem(node) end @declaration_node end
declares_targeted_gem?(node)
click to toggle source
# File lib/dependabot/bundler/file_parser/gemfile_declaration_finder.rb, line 66 def declares_targeted_gem?(node) return false unless node.is_a?(Parser::AST::Node) return false unless node.children[1] == :gem node.children[2].children.first == dependency.fetch("name") end
deep_search_for_gem(node)
click to toggle source
# File lib/dependabot/bundler/file_parser/gemfile_declaration_finder.rb, line 55 def deep_search_for_gem(node) return node if declares_targeted_gem?(node) return unless node.is_a?(Parser::AST::Node) declaration_node = nil node.children.find do |child_node| declaration_node = deep_search_for_gem(child_node) end declaration_node end