subbundle 0.2.0 → 0.5.0

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: 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: