Class: Dependabot::Bundler::FileParser::GemfileDeclarationFinder
- Inherits:
-
Object
- Object
- Dependabot::Bundler::FileParser::GemfileDeclarationFinder
- Extended by:
- T::Sig
- Defined in:
- lib/dependabot/bundler/file_parser/gemfile_declaration_finder.rb
Overview
Checks whether a dependency is declared in a Gemfile
Instance Method Summary collapse
- #enhanced_req_string(dependency) ⇒ Object
- #gemfile_includes_dependency?(dependency) ⇒ Boolean
-
#initialize(gemfile:) ⇒ GemfileDeclarationFinder
constructor
A new instance of GemfileDeclarationFinder.
Constructor Details
#initialize(gemfile:) ⇒ GemfileDeclarationFinder
Returns a new instance of GemfileDeclarationFinder.
17 18 19 20 |
# File 'lib/dependabot/bundler/file_parser/gemfile_declaration_finder.rb', line 17 def initialize(gemfile:) @gemfile = gemfile @declaration_nodes = T.let({}, T::Hash[T::Hash[String, String], T.nilable(Prism::Node)]) end |
Instance Method Details
#enhanced_req_string(dependency) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/dependabot/bundler/file_parser/gemfile_declaration_finder.rb', line 29 def enhanced_req_string(dependency) return unless gemfile_includes_dependency?(dependency) fallback_string = dependency.fetch("requirement") call_node = declaration_node(dependency) return fallback_string unless call_node.is_a?(Prism::CallNode) req_nodes = call_node.arguments&.arguments&.[](1..-1) || [] req_nodes = req_nodes.reject { |child| child.is_a?(Prism::HashNode) || child.is_a?(Prism::KeywordHashNode) } return fallback_string if req_nodes.none? return fallback_string unless req_nodes.all?(Prism::StringNode) original_req_string = T.cast(req_nodes, T::Array[Prism::StringNode]).map(&:unescaped) 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?(dependency) ⇒ Boolean
23 24 25 |
# File 'lib/dependabot/bundler/file_parser/gemfile_declaration_finder.rb', line 23 def gemfile_includes_dependency?(dependency) !declaration_node(dependency).nil? end |