pluggability 0.4.3 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- checksums.yaml.gz.sig +0 -0
- data/History.md +87 -0
- data/{README.rdoc → README.md} +64 -48
- data/lib/pluggability.rb +47 -58
- data/spec/helpers.rb +1 -0
- data/spec/pluggability_spec.rb +65 -31
- data.tar.gz.sig +0 -0
- metadata +51 -130
- metadata.gz.sig +0 -0
- data/.gemtest +0 -0
- data/ChangeLog +0 -868
- data/History.rdoc +0 -54
- data/Manifest.txt +0 -8
- data/Rakefile +0 -86
data/spec/pluggability_spec.rb
CHANGED
@@ -17,6 +17,7 @@ end
|
|
17
17
|
class SubPlugin < Plugin; end
|
18
18
|
class TestingPlugin < Plugin; end
|
19
19
|
class BlackSheep < Plugin; end
|
20
|
+
class Carbon14Robot < Plugin; end
|
20
21
|
module Test
|
21
22
|
class LoadablePlugin < Plugin; end
|
22
23
|
end
|
@@ -29,16 +30,9 @@ class SubSubPlugin < SubPlugin; end
|
|
29
30
|
#
|
30
31
|
describe Pluggability do
|
31
32
|
|
32
|
-
before( :all ) do
|
33
|
-
setup_logging()
|
34
|
-
end
|
35
|
-
|
36
33
|
before( :each ) do
|
37
34
|
Plugin.plugin_exclusions = []
|
38
|
-
|
39
|
-
|
40
|
-
after( :all ) do
|
41
|
-
reset_logging()
|
35
|
+
allow( File ).to receive( :file? ).and_return( true )
|
42
36
|
end
|
43
37
|
|
44
38
|
|
@@ -47,7 +41,6 @@ describe Pluggability do
|
|
47
41
|
end
|
48
42
|
|
49
43
|
|
50
|
-
|
51
44
|
context "-extended class" do
|
52
45
|
|
53
46
|
it "knows about all of its derivatives" do
|
@@ -55,6 +48,7 @@ describe Pluggability do
|
|
55
48
|
to include( 'sub', 'subplugin', 'SubPlugin', SubPlugin )
|
56
49
|
end
|
57
50
|
|
51
|
+
|
58
52
|
it "returns derivatives directly if they're already loaded" do
|
59
53
|
class AlreadyLoadedPlugin < Plugin; end
|
60
54
|
expect( Kernel ).to_not receive( :require )
|
@@ -64,6 +58,7 @@ describe Pluggability do
|
|
64
58
|
expect( Plugin.create(AlreadyLoadedPlugin) ).to be_an_instance_of( AlreadyLoadedPlugin )
|
65
59
|
end
|
66
60
|
|
61
|
+
|
67
62
|
it "filters errors that happen when creating an instance of derivatives so they " +
|
68
63
|
"point to the right place" do
|
69
64
|
class PugilistPlugin < Plugin
|
@@ -84,6 +79,7 @@ describe Pluggability do
|
|
84
79
|
expect( exception.backtrace.first ).to match(/#{__FILE__}/)
|
85
80
|
end
|
86
81
|
|
82
|
+
|
87
83
|
it "will refuse to create an object other than one of its derivatives" do
|
88
84
|
class Doppelgaenger; end
|
89
85
|
expect {
|
@@ -95,7 +91,10 @@ describe Pluggability do
|
|
95
91
|
it "will load new plugins from the require path if they're not loaded yet" do
|
96
92
|
loaded_class = nil
|
97
93
|
|
98
|
-
expect(
|
94
|
+
expect( Gem ).to receive( :find_latest_files ).
|
95
|
+
at_least( :once ).
|
96
|
+
and_return( ['/some/path/to/plugins/dazzle.rb'] )
|
97
|
+
expect( Kernel ).to receive( :require ).with( '/some/path/to/plugins/dazzle.rb' ) do |*args|
|
99
98
|
loaded_class = Class.new( Plugin )
|
100
99
|
# Simulate a named class, since we're not really requiring
|
101
100
|
Plugin.derivatives['dazzle'] = loaded_class
|
@@ -110,8 +109,8 @@ describe Pluggability do
|
|
110
109
|
"derivative fails" do
|
111
110
|
|
112
111
|
# at least 6 -> 3 variants * 2 paths
|
113
|
-
expect(
|
114
|
-
|
112
|
+
expect( Gem ).to receive( :find_latest_files ).at_least( 6 ).times.
|
113
|
+
and_return( [] )
|
115
114
|
|
116
115
|
expect {
|
117
116
|
Plugin.create('scintillating')
|
@@ -120,8 +119,12 @@ describe Pluggability do
|
|
120
119
|
|
121
120
|
|
122
121
|
it "will output a sensible description when a require succeeds, but it loads something unintended" do
|
123
|
-
|
124
|
-
|
122
|
+
expect( Gem ).to receive( :find_latest_files ).
|
123
|
+
at_least( :once ).
|
124
|
+
and_return( ['/some/path/to/corruscating.rb'] )
|
125
|
+
expect( Kernel ).to receive( :require ).
|
126
|
+
with( '/some/path/to/corruscating.rb' ).
|
127
|
+
and_return( true )
|
125
128
|
|
126
129
|
expect {
|
127
130
|
Plugin.create('corruscating')
|
@@ -129,30 +132,48 @@ describe Pluggability do
|
|
129
132
|
end
|
130
133
|
|
131
134
|
|
132
|
-
it "
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
expect(
|
135
|
+
it "doesn't rescue LoadErrors raised when loading the plugin" do
|
136
|
+
expect( Gem ).to receive( :find_latest_files ).
|
137
|
+
at_least( :once ).
|
138
|
+
and_return( ['/some/path/to/portable.rb'] )
|
139
|
+
expect( Kernel ).to receive( :require ).
|
140
|
+
with( '/some/path/to/portable.rb' ).
|
137
141
|
and_raise( ScriptError.new("error while parsing path") )
|
138
142
|
|
139
143
|
expect {
|
140
|
-
Plugin.create('portable')
|
144
|
+
Plugin.create( 'portable' )
|
141
145
|
}.to raise_error( ScriptError, /error while parsing/ )
|
142
146
|
end
|
143
147
|
|
144
148
|
|
149
|
+
it "ignores directories when finding derivatives" do
|
150
|
+
expect( Gem ).to receive( :find_latest_files ).
|
151
|
+
at_least( :once ).
|
152
|
+
and_return( ['/some/path/to/portable', '/some/path/to/portable.rb'] )
|
153
|
+
expect( File ).to receive( :file? ).and_return( false )
|
154
|
+
|
155
|
+
expect( Kernel ).to_not receive( :require ).with( '/some/path/to/portable' )
|
156
|
+
expect( Kernel ).to receive( :require ).
|
157
|
+
with( '/some/path/to/portable.rb' ).
|
158
|
+
and_return( true )
|
159
|
+
|
160
|
+
expect {
|
161
|
+
Plugin.create( 'portable' )
|
162
|
+
}.to raise_error( Pluggability::PluginError, /Require of '\S+' succeeded, but didn't load a Plugin/i )
|
163
|
+
end
|
164
|
+
|
165
|
+
|
145
166
|
it "can preload all of its derivatives" do
|
146
167
|
expect( Gem ).to receive( :find_latest_files ).with( 'plugins/*.rb' ).
|
147
168
|
and_return([ 'plugins/first.rb' ])
|
148
169
|
expect( Gem ).to receive( :find_latest_files ).with( 'plugins/private/*.rb' ).
|
149
170
|
and_return([ 'plugins/private/second.rb', 'plugins/private/third.rb' ])
|
150
171
|
|
151
|
-
expect(
|
172
|
+
expect( Kernel ).to receive( :require ).with( 'plugins/first.rb' ).
|
152
173
|
and_return( true )
|
153
|
-
expect(
|
174
|
+
expect( Kernel ).to receive( :require ).with( 'plugins/private/second.rb' ).
|
154
175
|
and_return( true )
|
155
|
-
expect(
|
176
|
+
expect( Kernel ).to receive( :require ).with( 'plugins/private/third.rb' ).
|
156
177
|
and_return( true )
|
157
178
|
|
158
179
|
Plugin.load_all
|
@@ -161,14 +182,14 @@ describe Pluggability do
|
|
161
182
|
|
162
183
|
it "doesn't preload derivatives whose path matches a Regexp exclusion" do
|
163
184
|
expect( Gem ).to receive( :find_latest_files ).with( 'plugins/*.rb' ).
|
164
|
-
and_return([ 'plugins/first.rb' ])
|
185
|
+
and_return([ '/path/to/plugins/first.rb' ])
|
165
186
|
expect( Gem ).to receive( :find_latest_files ).with( 'plugins/private/*.rb' ).
|
166
|
-
and_return([ 'plugins/private/second.rb', 'plugins/private/third.rb' ])
|
187
|
+
and_return([ '/path/to/plugins/private/second.rb', '/path/to/plugins/private/third.rb' ])
|
167
188
|
|
168
|
-
expect(
|
189
|
+
expect( Kernel ).to receive( :require ).with( '/path/to/plugins/first.rb' ).
|
169
190
|
and_return( true )
|
170
|
-
expect(
|
171
|
-
expect(
|
191
|
+
expect( Kernel ).to_not receive( :require ).with( '/path/to/plugins/private/second.rb' )
|
192
|
+
expect( Kernel ).to_not receive( :require ).with( '/path/to/plugins/private/third.rb' )
|
172
193
|
|
173
194
|
Plugin.plugin_exclusions( %r{/private} )
|
174
195
|
Plugin.load_all
|
@@ -181,11 +202,11 @@ describe Pluggability do
|
|
181
202
|
expect( Gem ).to receive( :find_latest_files ).with( 'plugins/private/*.rb' ).
|
182
203
|
and_return([ 'plugins/private/second.rb', 'plugins/private/third.rb' ])
|
183
204
|
|
184
|
-
expect(
|
205
|
+
expect( Kernel ).to receive( :require ).with( 'plugins/first.rb' ).
|
185
206
|
and_return( true )
|
186
|
-
expect(
|
207
|
+
expect( Kernel ).to receive( :require ).with( 'plugins/private/second.rb' ).
|
187
208
|
and_return( true )
|
188
|
-
expect(
|
209
|
+
expect( Kernel ).to_not receive( :require ).with( 'plugins/private/third.rb' )
|
189
210
|
|
190
211
|
Plugin.plugin_exclusions( '**/third.rb' )
|
191
212
|
Plugin.load_all
|
@@ -200,6 +221,7 @@ describe Pluggability do
|
|
200
221
|
expect( TestingPlugin.plugin_type ).to eq( 'Plugin' )
|
201
222
|
end
|
202
223
|
|
224
|
+
|
203
225
|
it "raises a PluginError if it can't figure out what type of factory loads it" do
|
204
226
|
allow( TestingPlugin ).to receive( :ancestors ).and_return( [] )
|
205
227
|
expect {
|
@@ -207,6 +229,7 @@ describe Pluggability do
|
|
207
229
|
}.to raise_error( Pluggability::PluginError, /couldn't find plugin base/i )
|
208
230
|
end
|
209
231
|
|
232
|
+
|
210
233
|
it "knows what the simplest version of its plugin name is" do
|
211
234
|
expect( TestingPlugin.plugin_name ).to eq( 'testing' )
|
212
235
|
end
|
@@ -219,10 +242,17 @@ describe Pluggability do
|
|
219
242
|
expect( Plugin.create('blacksheep') ).to be_an_instance_of( BlackSheep )
|
220
243
|
end
|
221
244
|
|
245
|
+
|
222
246
|
it "is loadable via its underbarred name" do
|
223
247
|
expect( Plugin.create('black_sheep') ).to be_an_instance_of( BlackSheep )
|
224
248
|
end
|
225
249
|
|
250
|
+
|
251
|
+
it "works for classes with numbers in them too" do
|
252
|
+
expect( Plugin.create('carbon14_robot') ).to be_an_instance_of( Carbon14Robot )
|
253
|
+
end
|
254
|
+
|
255
|
+
|
226
256
|
it "knows what the simplest version of its plugin name is" do
|
227
257
|
expect( BlackSheep.plugin_name ).to eq( 'black_sheep' )
|
228
258
|
end
|
@@ -235,9 +265,11 @@ describe Pluggability do
|
|
235
265
|
expect( Plugin.create('loadable') ).to be_an_instance_of( Test::LoadablePlugin )
|
236
266
|
end
|
237
267
|
|
268
|
+
|
238
269
|
it "still knows what the simplest version of its plugin name is" do
|
239
270
|
expect( Test::LoadablePlugin.plugin_name ).to eq( 'loadable' )
|
240
271
|
end
|
272
|
+
|
241
273
|
end
|
242
274
|
|
243
275
|
|
@@ -247,9 +279,11 @@ describe Pluggability do
|
|
247
279
|
expect( Plugin.derivatives['subsub'] ).to eq( SubSubPlugin )
|
248
280
|
end
|
249
281
|
|
282
|
+
|
250
283
|
it "still knows what the simplest version of its plugin name is" do
|
251
284
|
expect( SubSubPlugin.plugin_name ).to eq( 'subsub' )
|
252
285
|
end
|
286
|
+
|
253
287
|
end
|
254
288
|
|
255
289
|
end
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,37 +1,40 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pluggability
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
- Martin Chase
|
8
7
|
- Michael Granger
|
9
|
-
|
8
|
+
- Martin Chase
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain:
|
12
12
|
- |
|
13
13
|
-----BEGIN CERTIFICATE-----
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
+
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
14
|
+
MIID+DCCAmCgAwIBAgIBBDANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdnZWQv
|
15
|
+
REM9RmFlcmllTVVEL0RDPW9yZzAeFw0yMjAxMDcyMzU4MTRaFw0yMzAxMDcyMzU4
|
16
|
+
MTRaMCIxIDAeBgNVBAMMF2dlZC9EQz1GYWVyaWVNVUQvREM9b3JnMIIBojANBgkq
|
17
|
+
hkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAvyVhkRzvlEs0fe7145BYLfN6njX9ih5H
|
18
|
+
L60U0p0euIurpv84op9CNKF9tx+1WKwyQvQP7qFGuZxkSUuWcP/sFhDXL1lWUuIl
|
19
|
+
M4uHbGCRmOshDrF4dgnBeOvkHr1fIhPlJm5FO+Vew8tSQmlDsosxLUx+VB7DrVFO
|
20
|
+
5PU2AEbf04GGSrmqADGWXeaslaoRdb1fu/0M5qfPTRn5V39sWD9umuDAF9qqil/x
|
21
|
+
Sl6phTvgBrG8GExHbNZpLARd3xrBYLEFsX7RvBn2UPfgsrtvpdXjsHGfpT3IPN+B
|
22
|
+
vQ66lts4alKC69TE5cuKasWBm+16A4aEe3XdZBRNmtOu/g81gvwA7fkJHKllJuaI
|
23
|
+
dXzdHqq+zbGZVSQ7pRYHYomD0IiDe1DbIouFnPWmagaBnGHwXkDT2bKKP+s2v21m
|
24
|
+
ozilJg4aar2okb/RA6VS87o+d7g6LpDDMMQjH4G9OPnJENLdhu8KnPw/ivSVvQw7
|
25
|
+
N2I4L/ZOIe2DIVuYH7aLHfjZDQv/mNgpAgMBAAGjOTA3MAkGA1UdEwQCMAAwCwYD
|
26
|
+
VR0PBAQDAgSwMB0GA1UdDgQWBBRyjf55EbrHagiRLqt5YAd3yb8k4DANBgkqhkiG
|
27
|
+
9w0BAQsFAAOCAYEASrm1AbEoxACZ9WXJH3R5axV3U0CA4xaETlL2YT+2nOfVBMQ9
|
28
|
+
0ZlkPx6j4ghKJgAIi1TMfDM2JyPJsppQh8tiNccDjWc62UZRY/dq26cMqf/lcI+a
|
29
|
+
6YBuEYvzZfearwVs8tHnXtwYV3WSCoCOQaB+nq2lA1O+nkKNl41WOsVbNama5jx3
|
30
|
+
8cQtVSEEmZy6jIDJ8c5TmBJ7BQUDEUEWA/A3V42Xyctoj7DvUXWE0lP+X6ypAVSr
|
31
|
+
lFh3TS64D7NTvxkmg7natUoCvobl6kGl4yMaqE4YRTlfuzhpf91TSOntClqrAOsS
|
32
|
+
K1s56WndQj3IoBocdY9mQhDZLtLHofSkymoP8btBlj5SsN24TiF0VMSZlctSCYZg
|
33
|
+
GKyHim/MMlIfGOWsgfioq5jzwmql7W4CDubbb8Lkg70v+hN2E/MnNVAcNE3gyaGc
|
34
|
+
P5YP5BAbNW+gvd3QHRiWTTuhgHrdDnGdXg93N2M5KHn1ug8BtPLQwlcFwEpKnlLn
|
35
|
+
btEP+7EplFuoiMfd
|
33
36
|
-----END CERTIFICATE-----
|
34
|
-
date:
|
37
|
+
date: 2022-12-01 00:00:00.000000000 Z
|
35
38
|
dependencies:
|
36
39
|
- !ruby/object:Gem::Dependency
|
37
40
|
name: loggability
|
@@ -39,44 +42,30 @@ dependencies:
|
|
39
42
|
requirements:
|
40
43
|
- - "~>"
|
41
44
|
- !ruby/object:Gem::Version
|
42
|
-
version: '0.
|
45
|
+
version: '0.15'
|
43
46
|
type: :runtime
|
44
47
|
prerelease: false
|
45
48
|
version_requirements: !ruby/object:Gem::Requirement
|
46
49
|
requirements:
|
47
50
|
- - "~>"
|
48
51
|
- !ruby/object:Gem::Version
|
49
|
-
version: '0.
|
52
|
+
version: '0.15'
|
50
53
|
- !ruby/object:Gem::Dependency
|
51
|
-
name:
|
54
|
+
name: rake-deveiate
|
52
55
|
requirement: !ruby/object:Gem::Requirement
|
53
56
|
requirements:
|
54
57
|
- - "~>"
|
55
58
|
- !ruby/object:Gem::Version
|
56
|
-
version: '
|
59
|
+
version: '0.21'
|
57
60
|
type: :development
|
58
61
|
prerelease: false
|
59
62
|
version_requirements: !ruby/object:Gem::Requirement
|
60
63
|
requirements:
|
61
64
|
- - "~>"
|
62
65
|
- !ruby/object:Gem::Version
|
63
|
-
version: '
|
66
|
+
version: '0.21'
|
64
67
|
- !ruby/object:Gem::Dependency
|
65
|
-
name:
|
66
|
-
requirement: !ruby/object:Gem::Requirement
|
67
|
-
requirements:
|
68
|
-
- - "~>"
|
69
|
-
- !ruby/object:Gem::Version
|
70
|
-
version: '0.6'
|
71
|
-
type: :development
|
72
|
-
prerelease: false
|
73
|
-
version_requirements: !ruby/object:Gem::Requirement
|
74
|
-
requirements:
|
75
|
-
- - "~>"
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version: '0.6'
|
78
|
-
- !ruby/object:Gem::Dependency
|
79
|
-
name: hoe-highline
|
68
|
+
name: rdoc-generator-sixfish
|
80
69
|
requirement: !ruby/object:Gem::Requirement
|
81
70
|
requirements:
|
82
71
|
- - "~>"
|
@@ -89,96 +78,30 @@ dependencies:
|
|
89
78
|
- - "~>"
|
90
79
|
- !ruby/object:Gem::Version
|
91
80
|
version: '0.2'
|
92
|
-
|
93
|
-
name: rdoc
|
94
|
-
requirement: !ruby/object:Gem::Requirement
|
95
|
-
requirements:
|
96
|
-
- - "~>"
|
97
|
-
- !ruby/object:Gem::Version
|
98
|
-
version: '4.0'
|
99
|
-
type: :development
|
100
|
-
prerelease: false
|
101
|
-
version_requirements: !ruby/object:Gem::Requirement
|
102
|
-
requirements:
|
103
|
-
- - "~>"
|
104
|
-
- !ruby/object:Gem::Version
|
105
|
-
version: '4.0'
|
106
|
-
- !ruby/object:Gem::Dependency
|
107
|
-
name: hoe-bundler
|
108
|
-
requirement: !ruby/object:Gem::Requirement
|
109
|
-
requirements:
|
110
|
-
- - "~>"
|
111
|
-
- !ruby/object:Gem::Version
|
112
|
-
version: '1.2'
|
113
|
-
type: :development
|
114
|
-
prerelease: false
|
115
|
-
version_requirements: !ruby/object:Gem::Requirement
|
116
|
-
requirements:
|
117
|
-
- - "~>"
|
118
|
-
- !ruby/object:Gem::Version
|
119
|
-
version: '1.2'
|
120
|
-
- !ruby/object:Gem::Dependency
|
121
|
-
name: hoe
|
122
|
-
requirement: !ruby/object:Gem::Requirement
|
123
|
-
requirements:
|
124
|
-
- - "~>"
|
125
|
-
- !ruby/object:Gem::Version
|
126
|
-
version: '3.13'
|
127
|
-
type: :development
|
128
|
-
prerelease: false
|
129
|
-
version_requirements: !ruby/object:Gem::Requirement
|
130
|
-
requirements:
|
131
|
-
- - "~>"
|
132
|
-
- !ruby/object:Gem::Version
|
133
|
-
version: '3.13'
|
134
|
-
description: "Pluggability is a mixin module that turns an including class into a\nfactory
|
135
|
-
for its derivatives, capable of searching for and loading them\nby name. This is
|
136
|
-
useful when you have an abstract base class which\ndefines an interface and basic
|
137
|
-
functionality for a part of a larger\nsystem, and a collection of subclasses which
|
138
|
-
implement the interface for\ndifferent underlying functionality.\n\nAn example of
|
139
|
-
where this might be useful is in a program which generates\noutput with a 'driver'
|
140
|
-
object, which provides a unified interface but\ngenerates different kinds of output.\n\nFirst
|
141
|
-
the abstract base class, which is extended with Pluggability:\n\n # in mygem/driver.rb:\n
|
142
|
-
\ require 'pluggability'\n require 'mygem' unless defined?( MyGem )\n \n
|
143
|
-
\ class MyGem::Driver\n extend Pluggability\n plugin_prefixes \"drivers\",
|
144
|
-
\"drivers/compat\"\n end\n\nWe can have one driver that outputs PDF documents:\n\n
|
145
|
-
\ # mygem/drivers/pdf.rb:\n require 'mygem/driver' unless defined?( MyGem::Driver
|
146
|
-
)\n \n class MyGem::Driver::PDF < Driver\n ...implementation...\n end\n\nand
|
147
|
-
another that outputs plain ascii text:\n\n #mygem/drivers/ascii.rb:\n require
|
148
|
-
'mygem/driver' unless defined?( MyGem::Driver )\n \n class MyGem::Driver::ASCII
|
149
|
-
< Driver\n ...implementation...\n end\n\nNow the driver is configurable
|
150
|
-
by the end-user, who can just set\nit by its short name:\n\n require 'mygem'\n
|
151
|
-
\ \n config[:driver_type] #=> \"pdf\"\n driver = MyGem::Driver.create( config[:driver_type]
|
152
|
-
)\n driver.class #=> MyGem::Driver::PDF\n\n # You can also pass arguments
|
153
|
-
to the constructor, too:\n ascii_driver = MyGem::Driver.create( :ascii, :columns
|
154
|
-
=> 80 )"
|
81
|
+
description: Pluggability is a toolkit for creating plugins.
|
155
82
|
email:
|
156
|
-
-
|
157
|
-
-
|
83
|
+
- ged@faeriemud.org
|
84
|
+
- outofculture@gmail.com
|
158
85
|
executables: []
|
159
86
|
extensions: []
|
160
|
-
extra_rdoc_files:
|
161
|
-
- History.rdoc
|
162
|
-
- Manifest.txt
|
163
|
-
- README.rdoc
|
87
|
+
extra_rdoc_files: []
|
164
88
|
files:
|
165
|
-
-
|
166
|
-
-
|
167
|
-
- History.rdoc
|
168
|
-
- Manifest.txt
|
169
|
-
- README.rdoc
|
170
|
-
- Rakefile
|
89
|
+
- History.md
|
90
|
+
- README.md
|
171
91
|
- lib/pluggability.rb
|
172
92
|
- spec/helpers.rb
|
173
93
|
- spec/pluggability_spec.rb
|
174
|
-
homepage: https://
|
94
|
+
homepage: https://hg.sr.ht/~ged/Pluggability
|
175
95
|
licenses:
|
176
|
-
- BSD
|
177
|
-
metadata:
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
96
|
+
- BSD-3-Clause
|
97
|
+
metadata:
|
98
|
+
homepage_uri: https://hg.sr.ht/~ged/Pluggability
|
99
|
+
documentation_uri: https://deveiate.org/code/pluggability
|
100
|
+
changelog_uri: https://deveiate.org/code/pluggability/History_md.html
|
101
|
+
source_uri: https://hg.sr.ht/~ged/Pluggability/browse
|
102
|
+
bug_tracker_uri: https://todo.sr.ht/~ged/Pluggability/browse
|
103
|
+
post_install_message:
|
104
|
+
rdoc_options: []
|
182
105
|
require_paths:
|
183
106
|
- lib
|
184
107
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -192,10 +115,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
192
115
|
- !ruby/object:Gem::Version
|
193
116
|
version: '0'
|
194
117
|
requirements: []
|
195
|
-
|
196
|
-
|
197
|
-
signing_key:
|
118
|
+
rubygems_version: 3.3.7
|
119
|
+
signing_key:
|
198
120
|
specification_version: 4
|
199
|
-
summary: Pluggability is a
|
200
|
-
for its derivatives, capable of searching for and loading them by name
|
121
|
+
summary: Pluggability is a toolkit for creating plugins.
|
201
122
|
test_files: []
|
metadata.gz.sig
CHANGED
Binary file
|
data/.gemtest
DELETED
File without changes
|