@@ -20,15 +20,15 @@ def message
2020 end
2121 end
2222
23- attr_reader :config , :lockfile , :gemfile_lock , :existing_lockfile
23+ attr_reader :config , :lockfile , :definition , :existing_lockfile , :gem_hash
2424
25- def self . generate ( config :, gemfile_lock_path :, with_lockfile : true )
26- generator = new ( config : config , gemfile_lock_path : gemfile_lock_path , with_lockfile : with_lockfile )
25+ def self . generate ( config :, definition :, with_lockfile : true )
26+ generator = new ( config : config , definition : definition , with_lockfile : with_lockfile )
2727 generator . generate
2828 generator . lockfile
2929 end
3030
31- def initialize ( config :, gemfile_lock_path :, with_lockfile :)
31+ def initialize ( config :, definition :, with_lockfile :)
3232 @config = config
3333
3434 lockfile_path = Config . to_lockfile_path ( config . config_path )
@@ -37,7 +37,7 @@ def initialize(config:, gemfile_lock_path:, with_lockfile:)
3737 @lockfile = Lockfile . new (
3838 lockfile_path : lockfile_path ,
3939 path : config . repo_path_data ,
40- gemfile_lock_path : gemfile_lock_path . relative_path_from ( lockfile_dir )
40+ gemfile_lock_path : definition . lockfile . relative_path_from ( lockfile_dir )
4141 )
4242 config . sources . each do |source |
4343 case source
@@ -48,10 +48,13 @@ def initialize(config:, gemfile_lock_path:, with_lockfile:)
4848
4949 if with_lockfile && lockfile_path . file?
5050 @existing_lockfile = Lockfile . from_lockfile ( lockfile_path : lockfile_path , data : YAML . load_file ( lockfile_path . to_s ) )
51- validate_gemfile_lock_path! ( lock : @existing_lockfile , gemfile_lock_path : gemfile_lock_path )
51+ validate_gemfile_lock_path! ( lock : @existing_lockfile , gemfile_lock_path : definition . lockfile )
5252 end
5353
54- @gemfile_lock = Bundler ::LockfileParser . new ( gemfile_lock_path . read )
54+ @definition = definition
55+ @gem_hash = definition . locked_gems . specs . each . with_object ( { } ) do |spec , hash | #$ Hash[String, Bundler::LazySpecification]
56+ hash [ spec . name ] = spec
57+ end
5558 end
5659
5760 def generate
@@ -67,8 +70,13 @@ def generate
6770 end
6871 end
6972
70- gemfile_lock_gems do |spec |
71- assign_gem ( name : spec . name , version : spec . version , ignored_gems : ignored_gems , src_data : nil )
73+ definition . dependencies . each do |dep |
74+ if dep . autorequire && dep . autorequire . empty?
75+ next
76+ end
77+
78+ spec = gem_hash [ dep . name ] or raise "Cannot find `#{ dep . name } ` in bundler context"
79+ assign_gem ( name : dep . name , version : spec . version , ignored_gems : ignored_gems , src_data : nil )
7280 end
7381
7482 lockfile . lockfile_path . write ( YAML . dump ( lockfile . to_lockfile ) )
@@ -82,7 +90,7 @@ def generate
8290 end
8391 end
8492
85- private def assign_gem ( name :, version :, ignored_gems :, src_data :)
93+ private def assign_gem ( name :, version :, src_data :, ignored_gems :)
8694 return if ignored_gems . include? ( name )
8795 return if lockfile . gems . key? ( name )
8896
@@ -99,9 +107,8 @@ def generate
99107 if src_data
100108 Sources . from_config_entry ( src_data )
101109 else
102- find_source ( name : name )
110+ find_source ( name : name ) or return
103111 end
104- return unless source
105112
106113 installed_version = version
107114 best_version = find_best_version ( version : installed_version , versions : source . versions ( name ) )
@@ -116,11 +123,15 @@ def generate
116123 locked or raise
117124
118125 lockfile . gems [ name ] = locked
119- source = locked [ :source ]
120126
121- source . dependencies_of ( locked [ :name ] , locked [ :version ] ) &.each do |dep |
127+ locked [ : source] . dependencies_of ( locked [ :name ] , locked [ :version ] ) &.each do |dep |
122128 assign_stdlib ( name : dep [ "name" ] , from_gem : name )
123129 end
130+
131+ gem_hash [ name ] . dependencies . each do |dep |
132+ spec = gem_hash [ dep . name ]
133+ assign_gem ( name : dep . name , version : spec . version , src_data : nil , ignored_gems : ignored_gems )
134+ end
124135 end
125136
126137 private def assign_stdlib ( name :, from_gem :)
@@ -150,12 +161,6 @@ def generate
150161 end
151162 end
152163
153- private def gemfile_lock_gems ( &block )
154- gemfile_lock . specs . each do |spec |
155- yield spec
156- end
157- end
158-
159164 private def find_source ( name :)
160165 sources = config . sources
161166
0 commit comments