subbundle 0.2.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 726e14f9510deedaea1a529dd32a8ec0ba1ae10efd502e7e148b7803638fc984
4
- data.tar.gz: b347b4c8c564ca9a94dc264c2f7d1f0f3724b612ae66ffff7184a57c9ac56213
3
+ metadata.gz: f314bee2a82122f608dd196ca7d585040228d34a6384cd91fb241bd5f8a26024
4
+ data.tar.gz: 86bfe4f35f803cf3ccad15033180799a7651b7b9857e1ee87adecf3195a09ddd
5
5
  SHA512:
6
- metadata.gz: fdca9e85eb4c59004c87b9a5a93c383b707a7e77492fd9a82bf4605c94783fae3a67bbb755c257f3f9173f23751013322b364dfcf8245156005a34e2e8422f4b
7
- data.tar.gz: 87b2bbe5704e534f4326ca60d1c0ae679e388389cc384556d9d391d386e710c7264cb7aacee4d3c7ff53897e98dd0ef1644e9d0e8438a707b8a2bdcb465ee07d
6
+ metadata.gz: d873244bbed04592e5820e85f3087479cb474b65668f17ac5617fc17797d8ea6621b561b06b9e316dfea893704c576586371f856f34d26a412d43be2300e90d9
7
+ data.tar.gz: 5f744728a2e2aabb5f574fe3c5a2ba041feb84e5de4ba99c82ac45586e7497d124db0c594361cb52d4f9f079f0f2b8cf846bca6fdbd717ba57532a4e308e7eea
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Subbundle
4
- VERSION = "0.2.0"
4
+ VERSION = "0.5.0"
5
5
  end
data/lib/subbundle.rb CHANGED
@@ -1,73 +1,22 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "subbundle/version"
4
+ require "bundler"
4
5
 
5
6
  module Subbundle
6
- def self.setup(*gems, name: nil)
7
- require "bundler"
8
- require "digest/md5"
7
+ def self.setup(*gems)
8
+ # Don't write to the lockfile.
9
+ Bundler::Definition.no_lock = true
9
10
 
10
- name ||= File.basename($PROGRAM_NAME)
11
- gems = gems.map(&:to_s)
11
+ Bundler.definition.tap do |definition|
12
+ definition.dependencies.keep_if { |dependency| gems.include?(dependency.name) }
13
+ definition.locked_deps.keep_if { |name, _| gems.include?(name) }
12
14
 
13
- digest = Digest::MD5.new
14
- digest << Bundler.default_lockfile.to_s
15
- digest.file(Bundler.default_lockfile)
16
- gems.sort.each { |dep| digest << dep }
17
-
18
- subbundle_lockfile_path = Bundler.app_config_path.join("subbundles/#{name}.#{digest.hexdigest}.lock")
19
-
20
- if subbundle_lockfile_path.exist?
21
- return if setup_from_subbundle(gems, subbundle_lockfile_path)
15
+ # Overrides the specs
16
+ spec_set = Bundler::SpecSet.new(definition.instance_variable_get(:@locked_specs).for(definition.dependencies, false, true))
17
+ definition.instance_variable_set(:@locked_specs, spec_set)
22
18
  end
23
19
 
24
- default_lockfile = Bundler::LockfileParser.new(Bundler.read_file(Bundler.default_lockfile))
25
- required_dependencies = default_lockfile.dependencies.slice(*gems).values
26
- spec_set = Bundler::SpecSet.new(default_lockfile.specs)
27
- specs = spec_set.for(required_dependencies, false, true)
28
- dependencies = default_lockfile.dependencies.slice(*specs.map(&:name)).values
29
- source_list = build_source_list(specs.map(&:source).uniq)
30
- definition = Bundler::Definition.new(Bundler.default_lockfile, dependencies, source_list, {})
31
- subbundle_lockfile_path.dirname.mkpath
32
- subbundle_lockfile_path.write(Bundler.ui.silence { definition.to_lock })
33
-
34
- setup_from_subbundle(gems, subbundle_lockfile_path)
35
- end
36
-
37
- def self.setup_from_subbundle(gems, subbundle_lockfile_path)
38
- subbundle_lockfile = Bundler::LockfileParser.new(Bundler.read_file(subbundle_lockfile_path))
39
- dependencies = subbundle_lockfile.dependencies.slice(*gems).values
40
- source_list = build_source_list(subbundle_lockfile.sources)
41
- definition = Bundler::Definition.new(subbundle_lockfile_path, dependencies, source_list, {})
42
- if definition.nothing_changed?
43
- setup_runtime(definition)
44
- true
45
- else
46
- subbundle_lockfile_path.delete
47
- false
48
- end
49
- end
50
-
51
- def self.build_source_list(sources)
52
- sources.compact.each_with_object(Bundler::SourceList.new) do |source, source_list|
53
- case source
54
- when Bundler::Source::Git
55
- source_list.add_git_source(source.options)
56
- when Bundler::Source::Path, Bundler::Source::Gemspec
57
- source_list.add_path_source(source.options)
58
- when Bundler::Source::Rubygems
59
- next if source.remotes.empty?
60
- source_list.add_rubygems_source(source.options)
61
- else
62
- raise "unhandled: #{source.inspect}"
63
- end
64
- end
65
- end
66
-
67
- def self.setup_runtime(definition)
68
- runtime = Bundler::Runtime.new(Bundler.root, definition)
69
- # This is not ideal, let's revisit later.
70
- Bundler.instance_variable_set(:@load, runtime)
71
- Bundler.ui.silence { runtime.setup }
20
+ Bundler.require
72
21
  end
73
22
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: subbundle
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ngan Pham
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-04-14 00:00:00.000000000 Z
11
+ date: 2022-04-18 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email: