ruby_workspace_manager 0.4.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: 12c7c3a3f727bda561d67cc8ec9892663a61678cd50ca37e0cd236f90b7cd9c7
4
- data.tar.gz: e72a42cee147558fb709c4fff8216ac3ce029d8284e4fc0f85f165c084bf7542
3
+ metadata.gz: dab8a0ae74fbf4b09e06f997a9b88d3d80e535b16c290eca3d7429fc67c1e3cd
4
+ data.tar.gz: dec2cd0382c7613fa43f62294a7ed32254355046ce33e903d023bde7cc6a2cc9
5
5
  SHA512:
6
- metadata.gz: 1b947c3056778412444e3a0b135902bbd2e00241d8ba284fc4f8434865de9ca232aa0b23d526e9a1da3e5a71f661d2df51b2c45c1f5bff9910051c50809535e8
7
- data.tar.gz: fe2b3e0ebc4267ce1c7a66d9d0e3eced4d673fe1bd489da85bd19c3b32a7c60ef4096890612eafb0787fedd69c4a095e380271b1760515ab5e158a95d12d2aa9
6
+ metadata.gz: 228e51efcfe4f4ec0a230eb1fd2d7c56f67464d961d6427c7df81f2da3648573920bb84b24b73d9874e461ab34ba35d1f3c2de6e8bdc442139509887ee5b50f9
7
+ data.tar.gz: 391aa7d70d6c236a99a79c02832ffc3dc22b5d897c1c6b83b3ab8d22efae9be9214c673015a69a8273ff743df85053c0b721e8fd5b607bf3424a485ebd0716bb
data/lib/rwm/gemfile.rb CHANGED
@@ -13,8 +13,15 @@
13
13
 
14
14
  require "bundler"
15
15
  require "open3"
16
+ require "set"
16
17
 
17
18
  module Rwm
19
+ @resolved_libs = Set.new
20
+
21
+ def self.resolved_libs
22
+ @resolved_libs
23
+ end
24
+
18
25
  module GemfileDsl
19
26
  def rwm_workspace_root
20
27
  @rwm_workspace_root ||= begin
@@ -26,8 +33,41 @@ module Rwm
26
33
  end
27
34
 
28
35
  def rwm_lib(name, **opts)
29
- path = File.join(rwm_workspace_root, "libs", name.to_s)
30
- gem(name.to_s, **opts, path: path)
36
+ name = name.to_s
37
+ @rwm_resolved ||= Set.new
38
+ return if @rwm_resolved.include?(name)
39
+
40
+ @rwm_resolved.add(name)
41
+ Rwm.resolved_libs.add(name)
42
+
43
+ path = File.join(rwm_workspace_root, "libs", name)
44
+ gem(name, **opts, path: path)
45
+
46
+ # Resolve transitive workspace deps from the target lib's Gemfile
47
+ target_gemfile = File.join(path, "Gemfile")
48
+ return unless File.exist?(target_gemfile)
49
+
50
+ scan_transitive_deps(target_gemfile).each { |dep_name| rwm_lib(dep_name) }
51
+ end
52
+
53
+ private
54
+
55
+ def scan_transitive_deps(gemfile_path)
56
+ sandbox = Bundler::Dsl.new
57
+ sandbox.eval_gemfile(gemfile_path)
58
+
59
+ libs_prefix = File.join(rwm_workspace_root, "libs") + "/"
60
+ gemfile_dir = File.dirname(gemfile_path)
61
+
62
+ sandbox.dependencies.each_with_object([]) do |dep, result|
63
+ source = dep.source
64
+ next unless source.is_a?(Bundler::Source::Path)
65
+
66
+ dep_path = File.expand_path(source.path.to_s, gemfile_dir)
67
+ next unless dep_path.start_with?(libs_prefix)
68
+
69
+ result << File.basename(dep_path)
70
+ end
31
71
  end
32
72
 
33
73
  end
data/lib/rwm/rails.rb ADDED
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Rails integration for RWM workspaces.
4
+ #
5
+ # Usage in config/application.rb:
6
+ #
7
+ # require_relative "boot"
8
+ # require "rwm/rails"
9
+ # Rwm.require_libs
10
+ # require "rails"
11
+
12
+ require "rwm/gemfile"
13
+
14
+ module Rwm
15
+ def self.require_libs
16
+ self.resolved_libs.each { |name| require name }
17
+ end
18
+ end
data/lib/rwm/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Rwm
4
- VERSION = "0.4.0"
4
+ VERSION = "0.5.0"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_workspace_manager
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Siddharth Bhatt
@@ -43,6 +43,7 @@ files:
43
43
  - lib/rwm/git_hooks.rb
44
44
  - lib/rwm/overcommit.rb
45
45
  - lib/rwm/package.rb
46
+ - lib/rwm/rails.rb
46
47
  - lib/rwm/rake.rb
47
48
  - lib/rwm/task_cache.rb
48
49
  - lib/rwm/task_runner.rb