anonymous_loader 0.1.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.
data/SECURITY.md ADDED
@@ -0,0 +1,21 @@
1
+ # Security Policy
2
+
3
+ ## Supported Versions
4
+
5
+ | Version | Supported |
6
+ |----------|-----------|
7
+ | 0.latest | ✅ |
8
+
9
+ ## Security contact information
10
+
11
+ To report a security vulnerability, please use the
12
+ [Tidelift security contact](https://tidelift.com/security).
13
+ Tidelift will coordinate the fix and disclosure.
14
+
15
+ ## Additional Support
16
+
17
+ If you are interested in support for versions older than the latest release,
18
+ please consider sponsoring the project / maintainer @ https://liberapay.com/pboling/donate,
19
+ or find other sponsorship links in the [README].
20
+
21
+ [README]: README.md
data/certs/pboling.pem ADDED
@@ -0,0 +1,27 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIEgDCCAuigAwIBAgIBATANBgkqhkiG9w0BAQsFADBDMRUwEwYDVQQDDAxwZXRl
3
+ ci5ib2xpbmcxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixkARkW
4
+ A2NvbTAeFw0yNTA1MDQxNTMzMDlaFw00NTA0MjkxNTMzMDlaMEMxFTATBgNVBAMM
5
+ DHBldGVyLmJvbGluZzEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPy
6
+ LGQBGRYDY29tMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAruUoo0WA
7
+ uoNuq6puKWYeRYiZekz/nsDeK5x/0IEirzcCEvaHr3Bmz7rjo1I6On3gGKmiZs61
8
+ LRmQ3oxy77ydmkGTXBjruJB+pQEn7UfLSgQ0xa1/X3kdBZt6RmabFlBxnHkoaGY5
9
+ mZuZ5+Z7walmv6sFD9ajhzj+oIgwWfnEHkXYTR8I6VLN7MRRKGMPoZ/yvOmxb2DN
10
+ coEEHWKO9CvgYpW7asIihl/9GMpKiRkcYPm9dGQzZc6uTwom1COfW0+ZOFrDVBuV
11
+ FMQRPswZcY4Wlq0uEBLPU7hxnCL9nKK6Y9IhdDcz1mY6HZ91WImNslOSI0S8hRpj
12
+ yGOWxQIhBT3fqCBlRIqFQBudrnD9jSNpSGsFvbEijd5ns7Z9ZMehXkXDycpGAUj1
13
+ to/5cuTWWw1JqUWrKJYoifnVhtE1o1DZ+LkPtWxHtz5kjDG/zR3MG0Ula0UOavlD
14
+ qbnbcXPBnwXtTFeZ3C+yrWpE4pGnl3yGkZj9SMTlo9qnTMiPmuWKQDatAgMBAAGj
15
+ fzB9MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBQE8uWvNbPVNRXZ
16
+ HlgPbc2PCzC4bjAhBgNVHREEGjAYgRZwZXRlci5ib2xpbmdAZ21haWwuY29tMCEG
17
+ A1UdEgQaMBiBFnBldGVyLmJvbGluZ0BnbWFpbC5jb20wDQYJKoZIhvcNAQELBQAD
18
+ ggGBAJbnUwfJQFPkBgH9cL7hoBfRtmWiCvdqdjeTmi04u8zVNCUox0A4gT982DE9
19
+ wmuN12LpdajxZONqbXuzZvc+nb0StFwmFYZG6iDwaf4BPywm2e/Vmq0YG45vZXGR
20
+ L8yMDSK1cQXjmA+ZBKOHKWavxP6Vp7lWvjAhz8RFwqF9GuNIdhv9NpnCAWcMZtpm
21
+ GUPyIWw/Cw/2wZp74QzZj6Npx+LdXoLTF1HMSJXZ7/pkxLCsB8m4EFVdb/IrW/0k
22
+ kNSfjtAfBHO8nLGuqQZVH9IBD1i9K6aSs7pT6TW8itXUIlkIUI2tg5YzW6OFfPzq
23
+ QekSkX3lZfY+HTSp/o+YvKkqWLUV7PQ7xh1ZYDtocpaHwgxe/j3bBqHE+CUPH2vA
24
+ 0V/FwdTRWcwsjVoOJTrYcff8pBZ8r2MvtAc54xfnnhGFzeRHfcltobgFxkAXdE6p
25
+ DVjBtqT23eugOqQ73umLcYDZkc36vnqGxUBSsXrzY9pzV5gGr2I8YUxMqf6ATrZt
26
+ L9nRqA==
27
+ -----END CERTIFICATE-----
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AnonymousLoader
4
+ module Version
5
+ VERSION = "0.1.0"
6
+ end
7
+ VERSION = Version::VERSION # Traditional Constant Location
8
+ end
@@ -0,0 +1,231 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "version_gem"
4
+
5
+ require_relative "anonymous_loader/version"
6
+
7
+ # Loads Ruby source under anonymous modules to avoid top-level namespace collisions.
8
+ module AnonymousLoader
9
+ # Raised for anonymous loader failures.
10
+ class Error < StandardError; end
11
+ # Raised when a requested Ruby source file cannot be resolved.
12
+ class FileNotFoundError < Error; end
13
+ # Raised when a resolved load-path candidate does not match the requested version.
14
+ class VersionMismatchError < Error; end
15
+
16
+ # Internal normalized resolver request.
17
+ # @api private
18
+ PathRequest = Struct.new(:path, :gem_name, :require_path, :requirement, :version_file)
19
+ # Internal load-path version lookup request.
20
+ # @api private
21
+ VersionRequest = Struct.new(:candidate, :version_file)
22
+
23
+ class << self
24
+ # Evaluate one or more Ruby files inside a fresh anonymous module.
25
+ #
26
+ # The source's natural constant nesting is preserved inside the anonymous
27
+ # module. For example, a file declaring `module Auth; module Sanitizer; end`
28
+ # becomes `anonymous_namespace::Auth::Sanitizer`, not `Object::Auth`.
29
+ #
30
+ # @param files [String, Array<String>] absolute paths, or paths relative to root
31
+ # @param root [String, nil] optional root for relative paths
32
+ # @return [Module] anonymous namespace containing the evaluated source
33
+ def load(files:, root: nil, **_options)
34
+ namespace = Module.new
35
+ Array(files).each do |file|
36
+ path = expand_file(file, root)
37
+ namespace.module_eval(File.read(path), path, 1)
38
+ end
39
+ namespace
40
+ end
41
+
42
+ # Resolve and anonymously load a single file.
43
+ #
44
+ # @param options [Hash] resolver options
45
+ # @option options [String, nil] :path explicit file path
46
+ # @option options [String, nil] :gem_name gem name used for RubyGems lookup
47
+ # @option options [String, nil] :require_path path under lib, also used for $LOAD_PATH lookup
48
+ # @option options [String, Gem::Requirement, nil] :version_requirement accepted gem version
49
+ # @option options [String, nil] :version_file file next to require_path's load root that declares VERSION
50
+ # @return [Module] anonymous namespace containing the evaluated source
51
+ def load_path(**options)
52
+ load(files: resolve_path(**options))
53
+ end
54
+
55
+ # Resolve a file from an explicit path, RubyGems metadata, or $LOAD_PATH.
56
+ #
57
+ # RubyGems metadata is preferred when available. The $LOAD_PATH fallback
58
+ # supports Bundler standalone setups where files are loadable but the
59
+ # dependency is absent from Gem.loaded_specs and GEM_PATH.
60
+ #
61
+ # @param options [Hash] resolver options
62
+ # @option options [String, nil] :path explicit file path
63
+ # @option options [String, nil] :gem_name gem name used for RubyGems lookup
64
+ # @option options [String, nil] :require_path path under lib, also used for $LOAD_PATH lookup
65
+ # @option options [String, Gem::Requirement, nil] :version_requirement accepted gem version
66
+ # @option options [String, nil] :version_file file next to require_path's load root that declares VERSION
67
+ # @return [String] absolute path to the resolved file
68
+ def resolve_path(**options)
69
+ request = path_request(options)
70
+ resolved = explicit_path_for(request) || resolve_from_gemspec(request) || resolve_from_load_path(request)
71
+ return resolved if resolved
72
+
73
+ raise FileNotFoundError, unresolved_message(request)
74
+ end
75
+
76
+ private
77
+
78
+ def path_request(options)
79
+ version_requirement = options[:version_requirement]
80
+ PathRequest.new(
81
+ options[:path],
82
+ options[:gem_name],
83
+ options[:require_path],
84
+ version_requirement && Gem::Requirement.create(version_requirement),
85
+ options[:version_file]
86
+ )
87
+ end
88
+
89
+ def explicit_path_for(request)
90
+ path = request.path
91
+ expand_file(path, nil) if path
92
+ end
93
+
94
+ def unresolved_message(request)
95
+ "could not resolve #{request.require_path.inspect} from #{request.gem_name || "load path"}"
96
+ end
97
+
98
+ def expand_file(file, root)
99
+ path = (root && !absolute_path?(file)) ? File.expand_path(file, root) : File.expand_path(file)
100
+ raise FileNotFoundError, "file not found: #{path}" unless File.file?(path)
101
+
102
+ path
103
+ end
104
+
105
+ def absolute_path?(path)
106
+ path.start_with?(File::SEPARATOR) || !!(File::ALT_SEPARATOR && path.start_with?(File::ALT_SEPARATOR))
107
+ end
108
+
109
+ def resolve_from_gemspec(request)
110
+ candidate = gemspec_candidate(request)
111
+ candidate if candidate && File.file?(candidate)
112
+ end
113
+
114
+ def gemspec_candidate(request)
115
+ return nil unless gemspec_request_complete?(request)
116
+
117
+ spec = matching_spec(request.gem_name, request.requirement)
118
+ spec && File.join(spec.full_gem_path, "lib", request.require_path)
119
+ end
120
+
121
+ def gemspec_request_complete?(request)
122
+ request.gem_name && request.require_path
123
+ end
124
+
125
+ def matching_spec(gem_name, requirement)
126
+ spec = Gem.loaded_specs[gem_name]
127
+ spec = find_spec(gem_name, requirement) if !spec || spec_version_mismatch?(spec, requirement)
128
+ spec
129
+ end
130
+
131
+ def spec_version_mismatch?(spec, requirement)
132
+ requirement && !requirement.satisfied_by?(spec.version)
133
+ end
134
+
135
+ def find_spec(gem_name, requirement)
136
+ if requirement
137
+ Gem::Specification.find_by_name(gem_name, requirement)
138
+ else
139
+ Gem::Specification.find_by_name(gem_name)
140
+ end
141
+ rescue Gem::MissingSpecError
142
+ nil
143
+ end
144
+
145
+ def resolve_from_load_path(request)
146
+ resolve_load_path_candidates(load_path_candidates_for(request), request)
147
+ end
148
+
149
+ def load_path_candidates_for(request)
150
+ require_path = request.require_path
151
+ return [] unless require_path
152
+
153
+ load_path_candidates(require_path)
154
+ end
155
+
156
+ def resolve_load_path_candidates(candidates, request)
157
+ return nil if candidates.empty?
158
+ return candidates.first unless request.requirement
159
+
160
+ resolve_versioned_load_path(candidates, request)
161
+ end
162
+
163
+ def load_path_candidates(require_path)
164
+ Gem.find_files(require_path).select { |candidate| File.file?(candidate) }
165
+ end
166
+
167
+ def resolve_versioned_load_path(candidates, request)
168
+ versions = load_path_versions(candidates, request.version_file)
169
+ match = versions.find { |pair| request.requirement.satisfied_by?(pair.last) }
170
+ return match.first if match
171
+
172
+ raise_load_path_version_mismatch(request, versions.map(&:last))
173
+ end
174
+
175
+ def load_path_versions(candidates, version_file)
176
+ candidates.each_with_object([]) do |candidate, versions|
177
+ version = version_for_load_path_candidate(VersionRequest.new(candidate, version_file))
178
+ versions << [candidate, version] if version
179
+ end
180
+ end
181
+
182
+ def raise_load_path_version_mismatch(request, mismatched_versions)
183
+ return nil if mismatched_versions.empty?
184
+
185
+ raise VersionMismatchError,
186
+ "#{request.require_path.inspect} did not satisfy #{request.requirement}; found #{mismatched_versions.uniq.join(", ")}"
187
+ end
188
+
189
+ def version_for_load_path_candidate(request)
190
+ version_path = existing_version_file(request)
191
+ gem_version_for(version_path) if version_path
192
+ rescue ArgumentError
193
+ nil
194
+ end
195
+
196
+ def existing_version_file(request)
197
+ return nil unless request.version_file
198
+
199
+ version_path = load_path_version_file(request)
200
+ version_path if File.file?(version_path)
201
+ end
202
+
203
+ def load_path_version_file(request)
204
+ File.expand_path(request.version_file, load_path_root(request))
205
+ end
206
+
207
+ def gem_version_for(version_path)
208
+ version_string = version_string_for(version_path)
209
+ Gem::Version.new(version_string) if version_string
210
+ end
211
+
212
+ def version_string_for(version_path)
213
+ source = File.read(version_path)
214
+ # This fallback only runs when RubyGems metadata is unavailable; the
215
+ # supported version file contract is a simple string VERSION assignment.
216
+ match = source.match(/VERSION\s*=\s*(["'])([^"']+)\1/)
217
+ match[2] if match
218
+ end
219
+
220
+ def load_path_root(request)
221
+ candidate_dir = File.dirname(request.candidate)
222
+ version_depth = request.version_file.split("/").length - 1
223
+ version_depth.times { candidate_dir = File.dirname(candidate_dir) }
224
+ candidate_dir
225
+ end
226
+ end
227
+ end
228
+
229
+ AnonymousLoader::Version.class_eval do
230
+ extend VersionGem::Basic
231
+ end
@@ -0,0 +1,6 @@
1
+ module AnonymousLoader
2
+ module Version
3
+ VERSION: String
4
+ end
5
+ VERSION: String
6
+ end
@@ -0,0 +1,14 @@
1
+ module AnonymousLoader
2
+ class Error < StandardError
3
+ end
4
+
5
+ class FileNotFoundError < Error
6
+ end
7
+
8
+ class VersionMismatchError < Error
9
+ end
10
+
11
+ def self.load: (files: String | Array[String], ?root: String?, **untyped) -> Module
12
+ def self.load_path: (?path: String?, ?gem_name: String?, ?require_path: String?, ?version_requirement: String | Gem::Requirement?, ?version_file: String?, **untyped) -> Module
13
+ def self.resolve_path: (?path: String?, ?gem_name: String?, ?require_path: String?, ?version_requirement: String | Gem::Requirement?, ?version_file: String?, **untyped) -> String
14
+ end
data.tar.gz.sig ADDED
Binary file
metadata ADDED
@@ -0,0 +1,314 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: anonymous_loader
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Peter H. Boling
8
+ bindir: exe
9
+ cert_chain:
10
+ - |
11
+ -----BEGIN CERTIFICATE-----
12
+ MIIEgDCCAuigAwIBAgIBATANBgkqhkiG9w0BAQsFADBDMRUwEwYDVQQDDAxwZXRl
13
+ ci5ib2xpbmcxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixkARkW
14
+ A2NvbTAeFw0yNTA1MDQxNTMzMDlaFw00NTA0MjkxNTMzMDlaMEMxFTATBgNVBAMM
15
+ DHBldGVyLmJvbGluZzEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPy
16
+ LGQBGRYDY29tMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAruUoo0WA
17
+ uoNuq6puKWYeRYiZekz/nsDeK5x/0IEirzcCEvaHr3Bmz7rjo1I6On3gGKmiZs61
18
+ LRmQ3oxy77ydmkGTXBjruJB+pQEn7UfLSgQ0xa1/X3kdBZt6RmabFlBxnHkoaGY5
19
+ mZuZ5+Z7walmv6sFD9ajhzj+oIgwWfnEHkXYTR8I6VLN7MRRKGMPoZ/yvOmxb2DN
20
+ coEEHWKO9CvgYpW7asIihl/9GMpKiRkcYPm9dGQzZc6uTwom1COfW0+ZOFrDVBuV
21
+ FMQRPswZcY4Wlq0uEBLPU7hxnCL9nKK6Y9IhdDcz1mY6HZ91WImNslOSI0S8hRpj
22
+ yGOWxQIhBT3fqCBlRIqFQBudrnD9jSNpSGsFvbEijd5ns7Z9ZMehXkXDycpGAUj1
23
+ to/5cuTWWw1JqUWrKJYoifnVhtE1o1DZ+LkPtWxHtz5kjDG/zR3MG0Ula0UOavlD
24
+ qbnbcXPBnwXtTFeZ3C+yrWpE4pGnl3yGkZj9SMTlo9qnTMiPmuWKQDatAgMBAAGj
25
+ fzB9MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBQE8uWvNbPVNRXZ
26
+ HlgPbc2PCzC4bjAhBgNVHREEGjAYgRZwZXRlci5ib2xpbmdAZ21haWwuY29tMCEG
27
+ A1UdEgQaMBiBFnBldGVyLmJvbGluZ0BnbWFpbC5jb20wDQYJKoZIhvcNAQELBQAD
28
+ ggGBAJbnUwfJQFPkBgH9cL7hoBfRtmWiCvdqdjeTmi04u8zVNCUox0A4gT982DE9
29
+ wmuN12LpdajxZONqbXuzZvc+nb0StFwmFYZG6iDwaf4BPywm2e/Vmq0YG45vZXGR
30
+ L8yMDSK1cQXjmA+ZBKOHKWavxP6Vp7lWvjAhz8RFwqF9GuNIdhv9NpnCAWcMZtpm
31
+ GUPyIWw/Cw/2wZp74QzZj6Npx+LdXoLTF1HMSJXZ7/pkxLCsB8m4EFVdb/IrW/0k
32
+ kNSfjtAfBHO8nLGuqQZVH9IBD1i9K6aSs7pT6TW8itXUIlkIUI2tg5YzW6OFfPzq
33
+ QekSkX3lZfY+HTSp/o+YvKkqWLUV7PQ7xh1ZYDtocpaHwgxe/j3bBqHE+CUPH2vA
34
+ 0V/FwdTRWcwsjVoOJTrYcff8pBZ8r2MvtAc54xfnnhGFzeRHfcltobgFxkAXdE6p
35
+ DVjBtqT23eugOqQ73umLcYDZkc36vnqGxUBSsXrzY9pzV5gGr2I8YUxMqf6ATrZt
36
+ L9nRqA==
37
+ -----END CERTIFICATE-----
38
+ date: 1980-01-02 00:00:00.000000000 Z
39
+ dependencies:
40
+ - !ruby/object:Gem::Dependency
41
+ name: version_gem
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '1.1'
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: 1.1.12
50
+ type: :runtime
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - "~>"
55
+ - !ruby/object:Gem::Version
56
+ version: '1.1'
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: 1.1.12
60
+ - !ruby/object:Gem::Dependency
61
+ name: kettle-dev
62
+ requirement: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - "~>"
65
+ - !ruby/object:Gem::Version
66
+ version: '2.2'
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: 2.2.12
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: '2.2'
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: 2.2.12
80
+ - !ruby/object:Gem::Dependency
81
+ name: bundler-audit
82
+ requirement: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - "~>"
85
+ - !ruby/object:Gem::Version
86
+ version: 0.9.3
87
+ type: :development
88
+ prerelease: false
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - "~>"
92
+ - !ruby/object:Gem::Version
93
+ version: 0.9.3
94
+ - !ruby/object:Gem::Dependency
95
+ name: rake
96
+ requirement: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - "~>"
99
+ - !ruby/object:Gem::Version
100
+ version: '13.0'
101
+ type: :development
102
+ prerelease: false
103
+ version_requirements: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - "~>"
106
+ - !ruby/object:Gem::Version
107
+ version: '13.0'
108
+ - !ruby/object:Gem::Dependency
109
+ name: require_bench
110
+ requirement: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - "~>"
113
+ - !ruby/object:Gem::Version
114
+ version: '1.0'
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: 1.0.4
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '1.0'
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: 1.0.4
128
+ - !ruby/object:Gem::Dependency
129
+ name: appraisal2
130
+ requirement: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - "~>"
133
+ - !ruby/object:Gem::Version
134
+ version: '3.1'
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: 3.1.2
138
+ type: :development
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - "~>"
143
+ - !ruby/object:Gem::Version
144
+ version: '3.1'
145
+ - - ">="
146
+ - !ruby/object:Gem::Version
147
+ version: 3.1.2
148
+ - !ruby/object:Gem::Dependency
149
+ name: kettle-test
150
+ requirement: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - "~>"
153
+ - !ruby/object:Gem::Version
154
+ version: '2.0'
155
+ - - ">="
156
+ - !ruby/object:Gem::Version
157
+ version: 2.0.5
158
+ type: :development
159
+ prerelease: false
160
+ version_requirements: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - "~>"
163
+ - !ruby/object:Gem::Version
164
+ version: '2.0'
165
+ - - ">="
166
+ - !ruby/object:Gem::Version
167
+ version: 2.0.5
168
+ - !ruby/object:Gem::Dependency
169
+ name: turbo_tests2
170
+ requirement: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - "~>"
173
+ - !ruby/object:Gem::Version
174
+ version: '3.1'
175
+ - - ">="
176
+ - !ruby/object:Gem::Version
177
+ version: 3.1.4
178
+ type: :development
179
+ prerelease: false
180
+ version_requirements: !ruby/object:Gem::Requirement
181
+ requirements:
182
+ - - "~>"
183
+ - !ruby/object:Gem::Version
184
+ version: '3.1'
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: 3.1.4
188
+ - !ruby/object:Gem::Dependency
189
+ name: ruby-progressbar
190
+ requirement: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: '1.13'
195
+ type: :development
196
+ prerelease: false
197
+ version_requirements: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - "~>"
200
+ - !ruby/object:Gem::Version
201
+ version: '1.13'
202
+ - !ruby/object:Gem::Dependency
203
+ name: stone_checksums
204
+ requirement: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - "~>"
207
+ - !ruby/object:Gem::Version
208
+ version: '1.0'
209
+ - - ">="
210
+ - !ruby/object:Gem::Version
211
+ version: 1.0.3
212
+ type: :development
213
+ prerelease: false
214
+ version_requirements: !ruby/object:Gem::Requirement
215
+ requirements:
216
+ - - "~>"
217
+ - !ruby/object:Gem::Version
218
+ version: '1.0'
219
+ - - ">="
220
+ - !ruby/object:Gem::Version
221
+ version: 1.0.3
222
+ - !ruby/object:Gem::Dependency
223
+ name: gitmoji-regex
224
+ requirement: !ruby/object:Gem::Requirement
225
+ requirements:
226
+ - - "~>"
227
+ - !ruby/object:Gem::Version
228
+ version: '2.0'
229
+ - - ">="
230
+ - !ruby/object:Gem::Version
231
+ version: 2.0.2
232
+ type: :development
233
+ prerelease: false
234
+ version_requirements: !ruby/object:Gem::Requirement
235
+ requirements:
236
+ - - "~>"
237
+ - !ruby/object:Gem::Version
238
+ version: '2.0'
239
+ - - ">="
240
+ - !ruby/object:Gem::Version
241
+ version: 2.0.2
242
+ description: "\U0001F48E AnonymousLoader resolves Ruby files from paths, gem metadata,
243
+ or $LOAD_PATH and evaluates them inside anonymous modules to avoid top-level namespace
244
+ collisions."
245
+ email:
246
+ - floss@galtzo.com
247
+ executables: []
248
+ extensions: []
249
+ extra_rdoc_files:
250
+ - CHANGELOG.md
251
+ - CITATION.cff
252
+ - CODE_OF_CONDUCT.md
253
+ - CONTRIBUTING.md
254
+ - FUNDING.md
255
+ - LICENSE.md
256
+ - README.md
257
+ - RUBOCOP.md
258
+ - SECURITY.md
259
+ files:
260
+ - CHANGELOG.md
261
+ - CITATION.cff
262
+ - CODE_OF_CONDUCT.md
263
+ - CONTRIBUTING.md
264
+ - FUNDING.md
265
+ - LICENSE.md
266
+ - README.md
267
+ - RUBOCOP.md
268
+ - SECURITY.md
269
+ - certs/pboling.pem
270
+ - lib/anonymous_loader.rb
271
+ - lib/anonymous_loader/version.rb
272
+ - sig/anonymous_loader.rbs
273
+ - sig/anonymous_loader/version.rbs
274
+ homepage: https://github.com/ruby-oauth/anonymous_loader
275
+ licenses:
276
+ - MIT
277
+ metadata:
278
+ homepage_uri: https://anonymous-loader.galtzo.com
279
+ source_code_uri: https://github.com/ruby-oauth/anonymous_loader/tree/v0.1.0
280
+ changelog_uri: https://github.com/ruby-oauth/anonymous_loader/blob/v0.1.0/CHANGELOG.md
281
+ bug_tracker_uri: https://github.com/ruby-oauth/anonymous_loader/issues
282
+ documentation_uri: https://www.rubydoc.info/gems/anonymous_loader/0.1.0
283
+ funding_uri: https://github.com/sponsors/pboling
284
+ wiki_uri: https://github.com/ruby-oauth/anonymous_loader/wiki
285
+ news_uri: https://www.railsbling.com/tags/anonymous_loader
286
+ discord_uri: https://discord.gg/3qme4XHNKN
287
+ rubygems_mfa_required: 'true'
288
+ rdoc_options:
289
+ - "--title"
290
+ - "anonymous_loader - \U0001F48E Load Ruby source files inside anonymous namespaces."
291
+ - "--main"
292
+ - README.md
293
+ - "--exclude"
294
+ - "^sig/"
295
+ - "--line-numbers"
296
+ - "--inline-source"
297
+ - "--quiet"
298
+ require_paths:
299
+ - lib
300
+ required_ruby_version: !ruby/object:Gem::Requirement
301
+ requirements:
302
+ - - ">="
303
+ - !ruby/object:Gem::Version
304
+ version: 2.2.0
305
+ required_rubygems_version: !ruby/object:Gem::Requirement
306
+ requirements:
307
+ - - ">="
308
+ - !ruby/object:Gem::Version
309
+ version: '0'
310
+ requirements: []
311
+ rubygems_version: 4.0.10
312
+ specification_version: 4
313
+ summary: "\U0001F48E Load Ruby source files inside anonymous namespaces."
314
+ test_files: []
metadata.gz.sig ADDED
Binary file