Sha256: e79434ce9e728367e21cc1afb4fd42b66fed180325ab40f1141e058eaebef08d

Contents?: true

Size: 1.44 KB

Versions: 134

Compression:

Stored size: 1.44 KB

Contents

# frozen_string_literal: true

require "parser/current"
require "dependabot/file_updaters/ruby/bundler"

module Dependabot
  module FileUpdaters
    module Ruby
      class Bundler
        class GemspecDependencyNameFinder
          attr_reader :gemspec_content

          def initialize(gemspec_content:)
            @gemspec_content = gemspec_content
          end

          # rubocop:disable Security/Eval
          def dependency_name
            ast = Parser::CurrentRuby.parse(gemspec_content)
            dependency_name_node = find_dependency_name_node(ast)
            return unless dependency_name_node

            begin
              eval(dependency_name_node.children[2].loc.expression.source)
            rescue StandardError
              nil # If we can't evaluate the expression just return nil
            end
          end
          # rubocop:enable Security/Eval

          private

          def find_dependency_name_node(node)
            return unless node.is_a?(Parser::AST::Node)
            return node if declares_dependency_name?(node)

            node.children.find do |cn|
              dependency_name_node = find_dependency_name_node(cn)
              break dependency_name_node if dependency_name_node
            end
          end

          def declares_dependency_name?(node)
            return false unless node.is_a?(Parser::AST::Node)

            node.children[1] == :name=
          end
        end
      end
    end
  end
end

Version data entries

134 entries across 134 versions & 1 rubygems

Version Path
dependabot-core-0.93.17 lib/dependabot/file_updaters/ruby/bundler/gemspec_dependency_name_finder.rb
dependabot-core-0.93.16 lib/dependabot/file_updaters/ruby/bundler/gemspec_dependency_name_finder.rb
dependabot-core-0.93.15 lib/dependabot/file_updaters/ruby/bundler/gemspec_dependency_name_finder.rb
dependabot-core-0.93.14 lib/dependabot/file_updaters/ruby/bundler/gemspec_dependency_name_finder.rb
dependabot-core-0.93.13 lib/dependabot/file_updaters/ruby/bundler/gemspec_dependency_name_finder.rb
dependabot-core-0.93.12 lib/dependabot/file_updaters/ruby/bundler/gemspec_dependency_name_finder.rb
dependabot-core-0.93.11 lib/dependabot/file_updaters/ruby/bundler/gemspec_dependency_name_finder.rb
dependabot-core-0.93.10 lib/dependabot/file_updaters/ruby/bundler/gemspec_dependency_name_finder.rb
dependabot-core-0.93.9 lib/dependabot/file_updaters/ruby/bundler/gemspec_dependency_name_finder.rb
dependabot-core-0.93.8 lib/dependabot/file_updaters/ruby/bundler/gemspec_dependency_name_finder.rb
dependabot-core-0.93.7 lib/dependabot/file_updaters/ruby/bundler/gemspec_dependency_name_finder.rb
dependabot-core-0.93.6 lib/dependabot/file_updaters/ruby/bundler/gemspec_dependency_name_finder.rb
dependabot-core-0.93.5 lib/dependabot/file_updaters/ruby/bundler/gemspec_dependency_name_finder.rb
dependabot-core-0.93.4 lib/dependabot/file_updaters/ruby/bundler/gemspec_dependency_name_finder.rb
dependabot-core-0.93.3 lib/dependabot/file_updaters/ruby/bundler/gemspec_dependency_name_finder.rb
dependabot-core-0.93.2 lib/dependabot/file_updaters/ruby/bundler/gemspec_dependency_name_finder.rb
dependabot-core-0.93.1 lib/dependabot/file_updaters/ruby/bundler/gemspec_dependency_name_finder.rb
dependabot-core-0.93.0 lib/dependabot/file_updaters/ruby/bundler/gemspec_dependency_name_finder.rb
dependabot-core-0.92.8 lib/dependabot/file_updaters/ruby/bundler/gemspec_dependency_name_finder.rb
dependabot-core-0.92.7 lib/dependabot/file_updaters/ruby/bundler/gemspec_dependency_name_finder.rb