devpack 0.4.1 → 0.4.2

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: bc62279883bef6f044e47c419b853c89b33e76f699d7106575cd87869967b36d
4
- data.tar.gz: 48a959cbd1004dce6752b6fb723905ad40f92c02cf73cd8432b969309d94f5a8
3
+ metadata.gz: a1e05e13ceb910b6601399b116f59d3b11e62af8c7e34f8f6f1fc031c1b74fc4
4
+ data.tar.gz: fbca64d53a5a5085befabca5d649b5668ebd84bed67dd1668936ae7e28e9e845
5
5
  SHA512:
6
- metadata.gz: a473937535208f922c6ceed0e137cfa758bf806bb39516e6f01906d748ef219c0fcb69fba33e195c49e95f045cf335267b7b997f300c30e6311792becba6a4ea
7
- data.tar.gz: 5e4247975b02ec3432344755432bb887ca7036cdb9792a3c8377d3a091dc5c92a464e0e8cf5dcda82248f2039e4c6ca0efedacf4761bec870d0d2fe6101cd254
6
+ metadata.gz: 9a9e01ed128597f605fbd6d0225d3535e2eb8a7d333d9bc280f8047ee6f60c27878d565337c6cded53877995f27611679fa201a6c9d9076c43b58e94d0749224
7
+ data.tar.gz: 6f251f060455124c56fb4b19adb278d505af10cc9d008a55f3bab3d2cbc23d8756231c52d9eec21cc41a372ad5cbe2bb95c3cc5759a299da39fae2f9425bf91d
data/CHANGELOG.md CHANGED
@@ -39,3 +39,8 @@ Rename `DISABLE_DEVPACK` environment variable to `DEVPACK_DISABLE` for consisten
39
39
  ## 0.2.1
40
40
 
41
41
  Fully activate gem on load: add gem spec to `Gem.loaded_specs` and set instance variables `@loaded` and `@activated` to `true`. This mimics `Gem::Specification#activate` to ensure that anything that depends on these characteristics will function as normal.
42
+
43
+ ## 0.4.2
44
+
45
+ - Add support for gems which are not required automatically
46
+ - Fix requiring gems where a hyphen in the gem name corresponds to a path slash in the require.
data/README.md CHANGED
@@ -14,6 +14,10 @@ better_errors
14
14
 
15
15
  # Optionally specify a version:
16
16
  pry:0.13.1
17
+
18
+ # Or add an asterisk at the start of a line to not require the gem automatically:
19
+ # (equivalent to adding `require: false` to the gem's entry in the Gemfile)
20
+ *brakeman
17
21
  ```
18
22
 
19
23
  Add _Devpack_ to any project's `Gemfile`:
@@ -17,6 +17,7 @@ module Devpack
17
17
  File.readlines(devpack_path)
18
18
  .map(&filter_comments)
19
19
  .compact
20
+ .map { |line| GemRef.parse(line) }
20
21
  end
21
22
 
22
23
  def devpack_path
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Devpack
4
+ # Provides extended syntax for gem definitions, allowing `require: false` semantics via an
5
+ # asterisrk prefix in `.devpack` file, e.g. `*my_gem`
6
+ class GemRef
7
+ def self.parse(line)
8
+ name, _, version = line.partition(':')
9
+ no_require = name.start_with?('*')
10
+ name = name.sub('*', '') if no_require
11
+ new(name: name, version: version.empty? ? nil : Gem::Requirement.new(version), no_require: no_require)
12
+ end
13
+
14
+ def initialize(name:, version: nil, no_require: false)
15
+ @name = name
16
+ @version = version
17
+ @no_require = no_require
18
+ end
19
+
20
+ attr_reader :name, :version
21
+
22
+ def require?
23
+ !@no_require
24
+ end
25
+
26
+ def eql?(other)
27
+ name == other.name && version == other.version && require? == other.require?
28
+ end
29
+
30
+ def to_s
31
+ "#{require? ? '*' : ''}#{@name}:#{@version}"
32
+ end
33
+ end
34
+ end
data/lib/devpack/gems.rb CHANGED
@@ -34,14 +34,14 @@ module Devpack
34
34
  end
35
35
 
36
36
  def load_devpack
37
- @config.requested_gems.map do |requested|
38
- name, _, version = requested.partition(':')
39
- load_gem(name, version.empty? ? nil : Gem::Requirement.new(version))
37
+ @config.requested_gems.map do |gem|
38
+ load_gem(gem)
40
39
  end.compact
41
40
  end
42
41
 
43
- def load_gem(name, requirement)
44
- [name, activate(name, requirement)]
42
+ def load_gem(gem)
43
+ name = gem.name
44
+ [name, activate(gem)]
45
45
  rescue LoadError => e
46
46
  deactivate(name)
47
47
  nil.tap { @failures << { name: name, message: load_error_message(e) } }
@@ -51,18 +51,27 @@ module Devpack
51
51
  nil.tap { @incompatible << e.meta }
52
52
  end
53
53
 
54
- def activate(name, version)
55
- spec = GemSpec.new(@gem_glob, name, version)
54
+ def activate(gem)
55
+ spec = GemSpec.new(@gem_glob, gem.name, gem.version)
56
56
  update_load_path(spec.require_paths)
57
57
  # NOTE: do this before we require, because some gems use the gemspec to
58
58
  # declare their version...
59
- Gem.loaded_specs[name] = spec.gemspec
60
- loaded = Kernel.require(name)
59
+ Gem.loaded_specs[gem.name] = spec.gemspec
60
+ loaded = require_gem(gem.name) if gem.require?
61
61
  spec.gemspec&.activated = true
62
62
  spec.gemspec&.instance_variable_set(:@loaded, true)
63
63
  loaded
64
64
  end
65
65
 
66
+ def require_gem(name)
67
+ Kernel.require(name)
68
+ rescue LoadError => e
69
+ raise e unless name.include?('-')
70
+
71
+ namespaced_file = name.tr('-', '/')
72
+ Kernel.require namespaced_file
73
+ end
74
+
66
75
  def deactivate(name)
67
76
  Gem.loaded_specs.delete(name)
68
77
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Devpack
4
- VERSION = '0.4.1'
4
+ VERSION = '0.4.2'
5
5
  end
data/lib/devpack.rb CHANGED
@@ -6,6 +6,7 @@ require 'set'
6
6
 
7
7
  require 'devpack/timeable'
8
8
  require 'devpack/config'
9
+ require 'devpack/gem_ref'
9
10
  require 'devpack/gems'
10
11
  require 'devpack/gem_glob'
11
12
  require 'devpack/gem_spec'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: devpack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bob Farrell
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-01-01 00:00:00.000000000 Z
11
+ date: 2024-03-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: byebug
@@ -121,6 +121,7 @@ files:
121
121
  - lib/devpack/config.rb
122
122
  - lib/devpack/exec.rb
123
123
  - lib/devpack/gem_glob.rb
124
+ - lib/devpack/gem_ref.rb
124
125
  - lib/devpack/gem_spec.rb
125
126
  - lib/devpack/gems.rb
126
127
  - lib/devpack/initializers.rb