dependabot-bundler 0.95.61 → 0.95.62

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c66d8c28b018f895d5e81b2633342c693b62bc4c1a55ef25cd007cc4686ba8e2
4
- data.tar.gz: '08623cfe93e8508023f3050b36d1d247ad824eceec86bd9631df3f7165859781'
3
+ metadata.gz: a627101cc876da4ddd7df8218d3ae98cb434994a9d7a16fc102067480402f70a
4
+ data.tar.gz: 22953a12618c3aafc332cb74beb71241d8f5b297edb500f59f63b79a1256aa4b
5
5
  SHA512:
6
- metadata.gz: 2cf02dee04b1c25e5100a7e849cce3bb7d42000ac443f5e48a608e4203da6b650cea013e7b95924eb7531a9fc1c729c7ae6d37195559c0c22018c58560e93f33
7
- data.tar.gz: 3bbfa7fe9414c7c6eb1095e42fe1c5d442f7a6ef4b820b8041bd5f09f57f574a6fff7a8ade00afd80edcc9ff8c9a5216b8086624c8918a7e95ab34e4aceb0223
6
+ metadata.gz: a659094c763912880f7bca1d420ac4eae188bcaaf2ae8d0226094a0b3803e3f8abc761db8921877096fd15b2ed3387640778ad320177d450bfd6e156147a759a
7
+ data.tar.gz: '0483ca332310a927231ae7aebb540b152955d6fa4eac2a867a33831f68942c1346e63909b20b4dd5767fd5bd4c205c372831fb84122e981a3ed18768ca8f2898'
@@ -13,7 +13,7 @@ module Dependabot
13
13
  class FileParser < Dependabot::FileParsers::Base
14
14
  require "dependabot/file_parsers/base/dependency_set"
15
15
  require "dependabot/bundler/file_parser/file_preparer"
16
- require "dependabot/bundler/file_parser/gemfile_checker"
16
+ require "dependabot/bundler/file_parser/gemfile_declaration_finder"
17
17
 
18
18
  def parse
19
19
  dependency_set = DependencySet.new
@@ -45,14 +45,16 @@ module Dependabot
45
45
 
46
46
  [gemfile, *evaled_gemfiles].each do |file|
47
47
  parsed_gemfile.each do |dep|
48
- next unless dependency_in_gemfile?(gemfile: file, dependency: dep)
48
+ gemfile_declaration_finder =
49
+ GemfileDeclarationFinder.new(dependency: dep, gemfile: file)
50
+ next unless gemfile_declaration_finder.gemfile_includes_dependency?
49
51
 
50
52
  dependencies <<
51
53
  Dependency.new(
52
54
  name: dep.name,
53
55
  version: dependency_version(dep.name)&.to_s,
54
56
  requirements: [{
55
- requirement: dep.requirement.to_s,
57
+ requirement: gemfile_declaration_finder.enhanced_req_string,
56
58
  groups: dep.groups,
57
59
  source: source_for(dep),
58
60
  file: file.name
@@ -240,13 +242,6 @@ module Dependabot
240
242
  parsed_lockfile.specs.find { |s| s.name == dependency_name }&.source
241
243
  end
242
244
 
243
- def dependency_in_gemfile?(gemfile:, dependency:)
244
- GemfileChecker.new(
245
- dependency: dependency,
246
- gemfile: gemfile
247
- ).includes_dependency?
248
- end
249
-
250
245
  def gemfile
251
246
  @gemfile ||= get_original_file("Gemfile") ||
252
247
  get_original_file("gems.rb")
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "parser/current"
4
+ require "dependabot/bundler/file_parser"
5
+
6
+ module Dependabot
7
+ module Bundler
8
+ class FileParser
9
+ # Checks whether a dependency is declared in a Gemfile
10
+ class GemfileDeclarationFinder
11
+ def initialize(dependency:, gemfile:)
12
+ @dependency = dependency
13
+ @gemfile = gemfile
14
+ end
15
+
16
+ def gemfile_includes_dependency?
17
+ !declaration_node.nil?
18
+ end
19
+
20
+ def enhanced_req_string
21
+ return unless gemfile_includes_dependency?
22
+
23
+ fallback_string = dependency.requirement.to_s
24
+ req_nodes = declaration_node.children[3..-1]
25
+ req_nodes = req_nodes.reject { |child| child.type == :hash }
26
+
27
+ return fallback_string if req_nodes.none?
28
+ return fallback_string unless req_nodes.all? { |n| n.type == :str }
29
+
30
+ original_req_string = req_nodes.map { |n| n.children.last }
31
+ if dependency.requirement == Gem::Requirement.new(original_req_string)
32
+ original_req_string.join(", ")
33
+ else
34
+ fallback_string
35
+ end
36
+ end
37
+
38
+ private
39
+
40
+ attr_reader :dependency, :gemfile
41
+
42
+ def declaration_node
43
+ return @declaration_node if defined?(@declaration_node)
44
+ return unless Parser::CurrentRuby.parse(gemfile.content)
45
+
46
+ @declaration_node = nil
47
+ Parser::CurrentRuby.parse(gemfile.content).children.any? do |node|
48
+ @declaration_node = deep_search_for_gem(node)
49
+ end
50
+ @declaration_node
51
+ end
52
+
53
+ def deep_search_for_gem(node)
54
+ return node if declares_targeted_gem?(node)
55
+ return unless node.is_a?(Parser::AST::Node)
56
+
57
+ declaration_node = nil
58
+ node.children.find do |child_node|
59
+ declaration_node = deep_search_for_gem(child_node)
60
+ end
61
+ declaration_node
62
+ end
63
+
64
+ def declares_targeted_gem?(node)
65
+ return false unless node.is_a?(Parser::AST::Node)
66
+ return false unless node.children[1] == :gem
67
+
68
+ node.children[2].children.first == dependency.name
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dependabot-bundler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.95.61
4
+ version: 0.95.62
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dependabot
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-02-23 00:00:00.000000000 Z
11
+ date: 2019-02-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dependabot-common
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 0.95.61
19
+ version: 0.95.62
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 0.95.61
26
+ version: 0.95.62
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: byebug
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -151,7 +151,7 @@ files:
151
151
  - lib/dependabot/bundler/file_fetcher/require_relative_finder.rb
152
152
  - lib/dependabot/bundler/file_parser.rb
153
153
  - lib/dependabot/bundler/file_parser/file_preparer.rb
154
- - lib/dependabot/bundler/file_parser/gemfile_checker.rb
154
+ - lib/dependabot/bundler/file_parser/gemfile_declaration_finder.rb
155
155
  - lib/dependabot/bundler/file_updater.rb
156
156
  - lib/dependabot/bundler/file_updater/gemfile_updater.rb
157
157
  - lib/dependabot/bundler/file_updater/gemspec_dependency_name_finder.rb
@@ -1,46 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "parser/current"
4
- require "dependabot/bundler/file_parser"
5
-
6
- module Dependabot
7
- module Bundler
8
- class FileParser
9
- # Checks whether a dependency is declared in a Gemfile
10
- class GemfileChecker
11
- def initialize(dependency:, gemfile:)
12
- @dependency = dependency
13
- @gemfile = gemfile
14
- end
15
-
16
- def includes_dependency?
17
- return false unless Parser::CurrentRuby.parse(gemfile.content)
18
-
19
- Parser::CurrentRuby.parse(gemfile.content).children.any? do |node|
20
- deep_check_for_gem(node)
21
- end
22
- end
23
-
24
- private
25
-
26
- attr_reader :dependency, :gemfile
27
-
28
- def deep_check_for_gem(node)
29
- return true if declares_targeted_gem?(node)
30
- return false unless node.is_a?(Parser::AST::Node)
31
-
32
- node.children.any? do |child_node|
33
- deep_check_for_gem(child_node)
34
- end
35
- end
36
-
37
- def declares_targeted_gem?(node)
38
- return false unless node.is_a?(Parser::AST::Node)
39
- return false unless node.children[1] == :gem
40
-
41
- node.children[2].children.first == dependency.name
42
- end
43
- end
44
- end
45
- end
46
- end