pluggability 0.4.3 → 0.8.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.
@@ -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
- end
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( Plugin ).to receive( :require ).with( 'plugins/dazzle_plugin' ) do |*args|
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( Plugin ).to receive( :require ).at_least(6).times.
114
- and_raise( LoadError.new("path") )
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
- # at least 6 -> 3 variants * 2 paths
124
- expect( Plugin ).to receive( :require ).and_return( true )
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 "will re-raise the first exception raised when attempting to load a " +
133
- "derivative if none of the paths work" do
134
-
135
- # at least 6 -> 3 variants * 2 paths
136
- expect( Plugin ).to receive( :require ).at_least(6).times.
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( Plugin ).to receive( :require ).with( 'plugins/first.rb' ).
172
+ expect( Kernel ).to receive( :require ).with( 'plugins/first.rb' ).
152
173
  and_return( true )
153
- expect( Plugin ).to receive( :require ).with( 'plugins/private/second.rb' ).
174
+ expect( Kernel ).to receive( :require ).with( 'plugins/private/second.rb' ).
154
175
  and_return( true )
155
- expect( Plugin ).to receive( :require ).with( 'plugins/private/third.rb' ).
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( Plugin ).to receive( :require ).with( 'plugins/first.rb' ).
189
+ expect( Kernel ).to receive( :require ).with( '/path/to/plugins/first.rb' ).
169
190
  and_return( true )
170
- expect( Plugin ).to_not receive( :require ).with( 'plugins/private/second.rb' )
171
- expect( Plugin ).to_not receive( :require ).with( 'plugins/private/third.rb' )
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( Plugin ).to receive( :require ).with( 'plugins/first.rb' ).
205
+ expect( Kernel ).to receive( :require ).with( 'plugins/first.rb' ).
185
206
  and_return( true )
186
- expect( Plugin ).to receive( :require ).with( 'plugins/private/second.rb' ).
207
+ expect( Kernel ).to receive( :require ).with( 'plugins/private/second.rb' ).
187
208
  and_return( true )
188
- expect( Plugin ).to_not receive( :require ).with( 'plugins/private/third.rb' )
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.3
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
- - Martin Chase
8
7
  - Michael Granger
9
- autorequire:
8
+ - Martin Chase
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain:
12
12
  - |
13
13
  -----BEGIN CERTIFICATE-----
14
- MIIDbDCCAlSgAwIBAgIBATANBgkqhkiG9w0BAQUFADA+MQwwCgYDVQQDDANnZWQx
15
- GTAXBgoJkiaJk/IsZAEZFglGYWVyaWVNVUQxEzARBgoJkiaJk/IsZAEZFgNvcmcw
16
- HhcNMTQwMzE5MDQzNTI2WhcNMTUwMzE5MDQzNTI2WjA+MQwwCgYDVQQDDANnZWQx
17
- GTAXBgoJkiaJk/IsZAEZFglGYWVyaWVNVUQxEzARBgoJkiaJk/IsZAEZFgNvcmcw
18
- ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDb92mkyYwuGBg1oRxt2tkH
19
- +Uo3LAsaL/APBfSLzy8o3+B3AUHKCjMUaVeBoZdWtMHB75X3VQlvXfZMyBxj59Vo
20
- cDthr3zdao4HnyrzAIQf7BO5Y8KBwVD+yyXCD/N65TTwqsQnO3ie7U5/9ut1rnNr
21
- OkOzAscMwkfQxBkXDzjvAWa6UF4c5c9kR/T79iA21kDx9+bUMentU59aCJtUcbxa
22
- 7kcKJhPEYsk4OdxR9q2dphNMFDQsIdRO8rywX5FRHvcb+qnXC17RvxLHtOjysPtp
23
- EWsYoZMxyCDJpUqbwoeiM+tAHoz2ABMv3Ahie3Qeb6+MZNAtMmaWfBx3dg2u+/WN
24
- AgMBAAGjdTBzMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBSZ0hCV
25
- qoHr122fGKelqffzEQBhszAcBgNVHREEFTATgRFnZWRARmFlcmllTVVELm9yZzAc
26
- BgNVHRIEFTATgRFnZWRARmFlcmllTVVELm9yZzANBgkqhkiG9w0BAQUFAAOCAQEA
27
- TuL1Bzl6TBs1YEzEubFHb9XAPgehWzzUudjDKzTRd+uyZmxnomBqTCQjT5ucNRph
28
- 3jZ6bhLNooLQxTjIuHodeGcEMHZdt4Yi7SyPmw5Nry12z6wrDp+5aGps3HsE5WsQ
29
- Zq2EuyEOc96g31uoIvjNdieKs+1kE+K+dJDjtw+wTH2i63P7r6N/NfPPXpxsFquo
30
- wcYRRrHdR7GhdJeT+V8Q8Bi5bglCUGdx+8scMgkkePc98k9osQHypbACmzO+Bqkv
31
- c7ZKPJcWBv0sm81+FCZXNACn2f9jfF8OQinxVs0O052KbGuEQaaiGIYeuuwQE2q6
32
- ggcrPfcYeTwWlfZPu2LrBg==
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: 2015-03-04 00:00:00.000000000 Z
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.8'
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.8'
52
+ version: '0.15'
50
53
  - !ruby/object:Gem::Dependency
51
- name: hoe-mercurial
54
+ name: rake-deveiate
52
55
  requirement: !ruby/object:Gem::Requirement
53
56
  requirements:
54
57
  - - "~>"
55
58
  - !ruby/object:Gem::Version
56
- version: '1.4'
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: '1.4'
66
+ version: '0.21'
64
67
  - !ruby/object:Gem::Dependency
65
- name: hoe-deveiate
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
- - !ruby/object:Gem::Dependency
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
- - stillflame@FaerieMUD.org
157
- - ged@FaerieMUD.org
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
- - ".gemtest"
166
- - ChangeLog
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://bitbucket.org/ged/pluggability
94
+ homepage: https://hg.sr.ht/~ged/Pluggability
175
95
  licenses:
176
- - BSD
177
- metadata: {}
178
- post_install_message:
179
- rdoc_options:
180
- - "-t"
181
- - Pluggability Toolkit
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
- rubyforge_project:
196
- rubygems_version: 2.4.5
197
- signing_key:
118
+ rubygems_version: 3.3.7
119
+ signing_key:
198
120
  specification_version: 4
199
- summary: Pluggability is a mixin module that turns an including class into a factory
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