devpack 0.4.1 → 0.4.3
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 +4 -4
- data/CHANGELOG.md +9 -0
- data/README.md +4 -0
- data/lib/devpack/config.rb +1 -0
- data/lib/devpack/gem_glob.rb +7 -11
- data/lib/devpack/gem_ref.rb +34 -0
- data/lib/devpack/gems.rb +18 -9
- data/lib/devpack/version.rb +1 -1
- data/lib/devpack.rb +1 -0
- metadata +4 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2019c7650f694b42f7b6dc248cab53d227b3818aa126d91b64375ca305592622
|
|
4
|
+
data.tar.gz: a0084d6a265e4a30a36baf09f16f20c2665bae572b36af660dcd54a0ca7193b5
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 78ecad5e11f27adcff1493669277001bf655457eb3eb30de370880efe6105f5dc0e0cb21efbbdd6c7a2a2981edf4db429ba67f00c6fc999310985aa04fa7eeca
|
|
7
|
+
data.tar.gz: f9a8f213d55ed153fdbc3c63adcb09b223a951e01a53cc01709135b58388c45bb718f565dfa1895ea69ab199d9f232d3e0e30b75fcb0022db5df05e68b8136b5
|
data/CHANGELOG.md
CHANGED
|
@@ -39,3 +39,12 @@ 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.
|
|
47
|
+
|
|
48
|
+
## 0.4.3
|
|
49
|
+
|
|
50
|
+
Locate gems via `Gem.path` instead of reading the `GEM_PATH`/`GEM_HOME` environment variables directly. When `BUNDLE_PATH` is configured (e.g. in Docker images), Bundler sets `GEM_PATH` to an empty string so that RubyGems searches only the bundle path — read literally, that meant no search path at all, so installed gems were never found. `Gem.path` resolves the same variables the way RubyGems does.
|
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`:
|
data/lib/devpack/config.rb
CHANGED
data/lib/devpack/gem_glob.rb
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Devpack
|
|
4
|
-
# Locates gems by searching in
|
|
4
|
+
# Locates gems by searching in RubyGems' effective search path (Gem.path)
|
|
5
5
|
class GemGlob
|
|
6
6
|
def find(name)
|
|
7
7
|
matched_paths(name)
|
|
@@ -15,10 +15,13 @@ module Devpack
|
|
|
15
15
|
@glob ||= gem_paths.map { |path| Dir.glob(path.join('gems', '*')) }.flatten
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
+
# Gem.path rather than the GEM_PATH/GEM_HOME environment variables:
|
|
19
|
+
# Bundler sets GEM_PATH to an empty string when BUNDLE_PATH is configured
|
|
20
|
+
# (so RubyGems searches only the bundle path), which read literally is no
|
|
21
|
+
# search path at all. Gem.path resolves the same variables the way
|
|
22
|
+
# RubyGems does.
|
|
18
23
|
def gem_paths
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
gem_path.split(':').map { |path| Pathname.new(path) }
|
|
24
|
+
Gem.path.map { |path| Pathname.new(path) }
|
|
22
25
|
end
|
|
23
26
|
|
|
24
27
|
def match?(name_with_version, basename)
|
|
@@ -42,12 +45,5 @@ module Devpack
|
|
|
42
45
|
def version(path)
|
|
43
46
|
Gem::Version.new(File.split(path).last.rpartition('-').last)
|
|
44
47
|
end
|
|
45
|
-
|
|
46
|
-
def gem_path
|
|
47
|
-
return ENV.fetch('GEM_PATH', nil) if ENV.key?('GEM_PATH')
|
|
48
|
-
return ENV.fetch('GEM_HOME', nil) if ENV.key?('GEM_HOME')
|
|
49
|
-
|
|
50
|
-
nil
|
|
51
|
-
end
|
|
52
48
|
end
|
|
53
49
|
end
|
|
@@ -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 |
|
|
38
|
-
|
|
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(
|
|
44
|
-
|
|
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(
|
|
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 =
|
|
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
|
data/lib/devpack/version.rb
CHANGED
data/lib/devpack.rb
CHANGED
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.
|
|
4
|
+
version: 0.4.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Bob Farrell
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2026-08-11 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
|
|
@@ -152,7 +153,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
152
153
|
- !ruby/object:Gem::Version
|
|
153
154
|
version: '0'
|
|
154
155
|
requirements: []
|
|
155
|
-
rubygems_version: 3.
|
|
156
|
+
rubygems_version: 3.5.22
|
|
156
157
|
signing_key:
|
|
157
158
|
specification_version: 4
|
|
158
159
|
summary: Conveniently tailor your development environment
|