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 +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +4 -0
- data/lib/devpack/config.rb +1 -0
- 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 +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a1e05e13ceb910b6601399b116f59d3b11e62af8c7e34f8f6f1fc031c1b74fc4
|
4
|
+
data.tar.gz: fbca64d53a5a5085befabca5d649b5668ebd84bed67dd1668936ae7e28e9e845
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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`:
|
data/lib/devpack/config.rb
CHANGED
@@ -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.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:
|
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
|