pluginfactory 1.0.7 → 1.0.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,46 @@
1
+ == v1.0.8 [2012-02-20] Michael Granger <ged@FaerieMUD.org>
2
+
3
+ Gem update (no code changes).
4
+
5
+
6
+ == v1.0.7 [2010-09-27] Michael Granger <ged@FaerieMUD.org>
7
+
8
+ Gemspec update.
9
+
10
+ == v1.0.6 [2010-03-23] Michael Granger <ged@FaerieMUD.org>
11
+
12
+ Gemspec fixes.
13
+
14
+ == v1.0.5 [2009-11-06] Michael Granger <ged@FaerieMUD.org>
15
+
16
+ * Fixes for Ruby 1.9.1.
17
+ * Replace home-grown logger stuff with Logger library
18
+
19
+ == v1.0.3 [2008-03-26] Michael Granger <ged@FaerieMUD.org>
20
+
21
+ * More packaging/publishing fixes.
22
+ * Updated documentation.
23
+ * Converted test::unit tests to RSpec
24
+
25
+ == v1.0.2 [2007-03-13] Michael Granger <ged@FaerieMUD.org>
26
+
27
+ * Logging enhancements
28
+ * Converted camelCased methods to under_barred ones.
29
+ * Fixed tests.
30
+
31
+ == v1.0.1 [2005-03-05] Michael Granger <ged@FaerieMUD.org>
32
+
33
+ * Made load failures raise FactoryErrors as intended instead of
34
+ RuntimeErrors.
35
+ * Gemified
36
+
37
+ == v1.0.0 [2004-09-08] Michael Granger <ged@FaerieMUD.org>
38
+
39
+ * Stable release
40
+ * Fixed String =~ String warning
41
+ * Bugfixes
42
+
43
+ == v0.01 [2004-03-10] Michael Granger <ged@FaerieMUD.org>
44
+
45
+ First release.
46
+
@@ -0,0 +1,8 @@
1
+ ChangeLog
2
+ History.rdoc
3
+ Manifest.txt
4
+ README.rdoc
5
+ Rakefile
6
+ lib/pluginfactory.rb
7
+ spec/lib/helpers.rb
8
+ spec/pluginfactory_spec.rb
@@ -0,0 +1,237 @@
1
+ = pluginfactory
2
+
3
+ * http://deveiate.org/projects/PluginFactory
4
+
5
+
6
+ == Description
7
+
8
+ PluginFactory is a mixin module that turns an including class into a factory for
9
+ its derivatives, capable of searching for and loading them by name. This is
10
+ useful when you have an abstract base class which defines an interface and basic
11
+ functionality for a part of a larger system, and a collection of subclasses
12
+ which implement the interface for different underlying functionality.
13
+
14
+ An example of where this might be useful is in a program which talks to a
15
+ database. To avoid coupling it to a specific database, you use a Driver class
16
+ which encapsulates your program's interaction with the database behind a useful
17
+ interface. Now you can create a concrete implementation of the Driver class for
18
+ each kind of database you wish to talk to. If you make the base Driver class a
19
+ PluginFactory, too, you can add new drivers simply by dropping them in a
20
+ directory and using the Driver's `create` method to instantiate them:
21
+
22
+ === Synopsis
23
+
24
+ in driver.rb:
25
+
26
+ require "PluginFactory"
27
+
28
+ class Driver
29
+ include PluginFactory
30
+ def self::derivative_dirs
31
+ ["drivers"]
32
+ end
33
+ end
34
+
35
+ in drivers/mysql.rb:
36
+
37
+ require 'driver'
38
+
39
+ class MysqlDriver < Driver
40
+ ...implementation...
41
+ end
42
+
43
+ in /usr/lib/ruby/1.8/PostgresDriver.rb:
44
+
45
+ require 'driver'
46
+
47
+ class PostgresDriver < Driver
48
+ ...implementation...
49
+ end
50
+
51
+ elsewhere
52
+
53
+ require 'driver'
54
+
55
+ config[:driver_type] #=> "mysql"
56
+ driver = Driver.create( config[:driver_type] )
57
+ driver.class #=> MysqlDriver
58
+ pgdriver = Driver.create( "PostGresDriver" )
59
+
60
+ === How Plugins Are Loaded
61
+
62
+ The +create+ class method added to your class by PluginFactory searches for your
63
+ module using several different strategies. It tries various permutations of the
64
+ base class's name in combination with the derivative requested. For example,
65
+ assume we want to make a +DataDriver+ base class, and then use plugins to define
66
+ drivers for different kinds of data sources:
67
+
68
+ require 'pluginfactory'
69
+
70
+ class DataDriver
71
+ include PluginFactory
72
+ end
73
+
74
+ When you attempt to load the 'socket' data-driver class like so:
75
+
76
+ DataDriver.create( 'socket' )
77
+
78
+ PluginFactory searches for modules with the following names:
79
+
80
+ 'socketdatadriver'
81
+ 'socket_datadriver'
82
+ 'socketDataDriver'
83
+ 'socket_DataDriver'
84
+ 'SocketDataDriver'
85
+ 'Socket_DataDriver'
86
+ 'socket'
87
+ 'Socket'
88
+
89
+ Obviously the last one will load something other than what is intended, so you
90
+ can also tell PluginFactory that plugins should be loaded from a subdirectory by
91
+ declaring a class method called `derivative_dirs` in the base class. It should
92
+ return an Array that contains a list of subdirectories to try:
93
+
94
+ class DataDriver
95
+ include PluginFactory
96
+
97
+ def self::derivative_dirs
98
+ ['drivers']
99
+ end
100
+ end
101
+
102
+ This will change the list that is required to:
103
+
104
+ 'drivers/socketdatadriver'
105
+ 'drivers/socket_datadriver'
106
+ 'drivers/socketDataDriver'
107
+ 'drivers/socket_DataDriver'
108
+ 'drivers/SocketDataDriver'
109
+ 'drivers/Socket_DataDriver'
110
+ 'drivers/socket'
111
+ 'drivers/Socket'
112
+
113
+ If you return more than one subdirectory, each of them will be tried in turn:
114
+
115
+ class DataDriver
116
+ include PluginFactory
117
+
118
+ def self::derivative_dirs
119
+ ['drivers', 'datadriver']
120
+ end
121
+ end
122
+
123
+ will change the search to include:
124
+
125
+ 'drivers/socketdatadriver'
126
+ 'drivers/socket_datadriver'
127
+ 'drivers/socketDataDriver'
128
+ 'drivers/socket_DataDriver'
129
+ 'drivers/SocketDataDriver'
130
+ 'drivers/Socket_DataDriver'
131
+ 'drivers/socket'
132
+ 'drivers/Socket'
133
+ 'datadriver/socketdatadriver'
134
+ 'datadriver/socket_datadriver'
135
+ 'datadriver/socketDataDriver'
136
+ 'datadriver/socket_DataDriver'
137
+ 'datadriver/SocketDataDriver'
138
+ 'datadriver/Socket_DataDriver'
139
+ 'datadriver/socket'
140
+ 'datadriver/Socket'
141
+
142
+ If the plugin is not found, a FactoryError is raised, and the message will list
143
+ all the permutations that were tried.
144
+
145
+ === Logging
146
+
147
+ If you need a little more insight into what's going on, PluginFactory uses
148
+ 'Logger' from the standard library. Just set its logger to your own to include
149
+ log messages about plugins being loaded:
150
+
151
+
152
+ require 'pluginfactory'
153
+ require 'logger'
154
+
155
+ class DataDriver
156
+ include PluginFactory
157
+
158
+ end
159
+
160
+ $logger = Logger.new( $stderr )
161
+ $logger.level = Logger::DEBUG
162
+ PluginFactory.logger = $logger
163
+
164
+ DataDriver.create( 'ringbuffer' )
165
+
166
+ this might generate a log that looks like:
167
+
168
+ D, [...] DEBUG -- : Loading derivative ringbuffer
169
+ D, [...] DEBUG -- : Subdirs are: [""]
170
+ D, [...] DEBUG -- : Path is: ["ringbufferdatadriver", "ringbufferDataDriver",
171
+ "ringbuffer"]...
172
+ D, [...] DEBUG -- : Trying ringbufferdatadriver...
173
+ D, [...] DEBUG -- : No module at 'ringbufferdatadriver', trying the next
174
+ alternative: 'no such file to load -- ringbufferdatadriver'
175
+ D, [...] DEBUG -- : Trying ringbufferDataDriver...
176
+ D, [...] DEBUG -- : No module at 'ringbufferDataDriver', trying the next
177
+ alternative: 'no such file to load -- ringbufferDataDriver'
178
+ D, [...] DEBUG -- : Trying ringbuffer...
179
+ D, [...] DEBUG -- : No module at 'ringbuffer', trying the next alternative:
180
+ 'no such file to load -- ringbuffer'
181
+ D, [...] DEBUG -- : fatals = []
182
+ E, [...] ERROR -- : Couldn't find a DataDriver named 'ringbuffer':
183
+ tried ["ringbufferdatadriver", "ringbufferDataDriver", "ringbuffer"]
184
+
185
+
186
+
187
+ == Installation
188
+
189
+ gem install pluginfactory
190
+
191
+
192
+ == Contributing
193
+
194
+ You can check out the current development source with Mercurial via its
195
+ {Mercurial repo}[http://repo.deveiate.org/PluginFactory]. Or if you prefer
196
+ Git, via {its Github mirror}[https://github.com/ged/pluginfactory].
197
+
198
+ After checking out the source, run:
199
+
200
+ $ rake newb
201
+
202
+ This task will install any missing dependencies, run the tests/specs,
203
+ and generate the API documentation.
204
+
205
+
206
+ == License
207
+
208
+ Copyright (c) 2008-2012, Michael Granger and Martin Chase
209
+ All rights reserved.
210
+
211
+ Redistribution and use in source and binary forms, with or without
212
+ modification, are permitted provided that the following conditions are met:
213
+
214
+ * Redistributions of source code must retain the above copyright notice,
215
+ this list of conditions and the following disclaimer.
216
+
217
+ * Redistributions in binary form must reproduce the above copyright notice,
218
+ this list of conditions and the following disclaimer in the documentation
219
+ and/or other materials provided with the distribution.
220
+
221
+ * Neither the name of the author/s, nor the names of the project's
222
+ contributors may be used to endorse or promote products derived from this
223
+ software without specific prior written permission.
224
+
225
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
226
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
227
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
228
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
229
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
230
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
231
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
232
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
233
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
234
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
235
+
236
+
237
+
data/Rakefile CHANGED
@@ -1,358 +1,28 @@
1
- #!rake -*- ruby -*-
2
- #
3
- # PluginFactory rakefile
4
- #
5
- # Based on various other Rakefiles, especially one by Ben Bleything
6
- #
7
- # Copyright (c) 2007-2010 The FaerieMUD Consortium
8
- #
9
- # Authors:
10
- # * Michael Granger <ged@FaerieMUD.org>
11
- #
1
+ #!/usr/bin/env rake
12
2
 
13
- BEGIN {
14
- require 'rbconfig'
15
- require 'pathname'
16
- basedir = Pathname.new( __FILE__ ).dirname
3
+ require 'hoe'
17
4
 
18
- libdir = basedir + "lib"
19
- extdir = libdir + Config::CONFIG['sitearch']
5
+ Hoe.plugin :deveiate
6
+ Hoe.plugin :mercurial
7
+ Hoe.plugin :signing
20
8
 
21
- $LOAD_PATH.unshift( basedir.to_s ) unless $LOAD_PATH.include?( basedir.to_s )
22
- $LOAD_PATH.unshift( libdir.to_s ) unless $LOAD_PATH.include?( libdir.to_s )
23
- $LOAD_PATH.unshift( extdir.to_s ) unless $LOAD_PATH.include?( extdir.to_s )
24
- }
9
+ Hoe.plugins.delete :rubyforge
25
10
 
26
- begin
27
- require 'readline'
28
- include Readline
29
- rescue LoadError
30
- # Fall back to a plain prompt
31
- def readline( text )
32
- $stderr.print( text.chomp )
33
- return $stdin.gets
34
- end
35
- end
36
-
37
- begin
38
- require 'rubygems'
39
- rescue LoadError
40
- module Gem
41
- class Specification; end
42
- end
43
- end
44
-
45
- require 'rbconfig'
46
- require 'rake'
47
- require 'rake/testtask'
48
- require 'rake/packagetask'
49
- require 'rake/clean'
50
- # require 'rake/191_compat.rb'
51
-
52
- $dryrun = false
53
-
54
- ### Config constants
55
- BASEDIR = Pathname.new( __FILE__ ).dirname.relative_path_from( Pathname.getwd )
56
- BINDIR = BASEDIR + 'bin'
57
- LIBDIR = BASEDIR + 'lib'
58
- EXTDIR = BASEDIR + 'ext'
59
- DOCSDIR = BASEDIR + 'docs'
60
- PKGDIR = BASEDIR + 'pkg'
61
- DATADIR = BASEDIR + 'data'
62
-
63
- MANUALDIR = DOCSDIR + 'manual'
64
-
65
- PROJECT_NAME = 'PluginFactory'
66
- PKG_NAME = PROJECT_NAME.downcase
67
- PKG_SUMMARY = 'A mixin for making plugin classes'
68
-
69
- # Cruisecontrol stuff
70
- CC_BUILD_LABEL = ENV['CC_BUILD_LABEL']
71
- CC_BUILD_ARTIFACTS = ENV['CC_BUILD_ARTIFACTS'] || 'artifacts'
72
-
73
- VERSION_FILE = LIBDIR + 'pluginfactory.rb'
74
- if VERSION_FILE.exist? && buildrev = ENV['CC_BUILD_LABEL']
75
- PKG_VERSION = VERSION_FILE.read[ /VERSION\s*=\s*['"](\d+\.\d+\.\d+)['"]/, 1 ] + '.' + buildrev
76
- elsif VERSION_FILE.exist?
77
- PKG_VERSION = VERSION_FILE.read[ /VERSION\s*=\s*['"](\d+\.\d+\.\d+)['"]/, 1 ]
78
- end
79
-
80
- PKG_VERSION = '0.0.0' unless defined?( PKG_VERSION ) && !PKG_VERSION.nil?
81
-
82
- PKG_FILE_NAME = "#{PKG_NAME.downcase}-#{PKG_VERSION}"
83
- GEM_FILE_NAME = "#{PKG_FILE_NAME}.gem"
84
-
85
- # Universal VCS constants
86
- DEFAULT_EDITOR = 'vi'
87
- COMMIT_MSG_FILE = 'commit-msg.txt'
88
- FILE_INDENT = " " * 12
89
- LOG_INDENT = " " * 3
90
-
91
- EXTCONF = EXTDIR + 'extconf.rb'
92
-
93
- ARTIFACTS_DIR = Pathname.new( CC_BUILD_ARTIFACTS )
94
-
95
- TEXT_FILES = Rake::FileList.new( %w[Rakefile ChangeLog README* LICENSE] )
96
- BIN_FILES = Rake::FileList.new( "#{BINDIR}/*" )
97
- LIB_FILES = Rake::FileList.new( "#{LIBDIR}/**/*.rb" )
98
- EXT_FILES = Rake::FileList.new( "#{EXTDIR}/**/*.{c,h,rb}" )
99
- DATA_FILES = Rake::FileList.new( "#{DATADIR}/**/*" )
100
-
101
- SPECDIR = BASEDIR + 'spec'
102
- SPECLIBDIR = SPECDIR + 'lib'
103
- SPEC_FILES = Rake::FileList.new( "#{SPECDIR}/**/*_spec.rb", "#{SPECLIBDIR}/**/*.rb" )
104
-
105
- TESTDIR = BASEDIR + 'tests'
106
- TEST_FILES = Rake::FileList.new( "#{TESTDIR}/**/*.tests.rb" )
107
-
108
- RAKE_TASKDIR = BASEDIR + 'rake'
109
- RAKE_TASKLIBS = Rake::FileList.new( "#{RAKE_TASKDIR}/*.rb" )
110
- PKG_TASKLIBS = Rake::FileList.new( "#{RAKE_TASKDIR}/{191_compat,helpers,packaging,rdoc,testing}.rb" )
111
- PKG_TASKLIBS.include( "#{RAKE_TASKDIR}/manual.rb" ) if MANUALDIR.exist?
112
-
113
- RAKE_TASKLIBS_URL = 'http://repo.deveiate.org/rake-tasklibs'
114
-
115
- LOCAL_RAKEFILE = BASEDIR + 'Rakefile.local'
116
-
117
- EXTRA_PKGFILES = Rake::FileList.new
118
-
119
- RELEASE_FILES = TEXT_FILES +
120
- SPEC_FILES +
121
- TEST_FILES +
122
- BIN_FILES +
123
- LIB_FILES +
124
- EXT_FILES +
125
- DATA_FILES +
126
- RAKE_TASKLIBS +
127
- EXTRA_PKGFILES
128
-
129
-
130
- RELEASE_FILES << LOCAL_RAKEFILE.to_s if LOCAL_RAKEFILE.exist?
131
-
132
- RELEASE_ANNOUNCE_ADDRESSES = [
133
- ]
134
-
135
- COVERAGE_MINIMUM = ENV['COVERAGE_MINIMUM'] ? Float( ENV['COVERAGE_MINIMUM'] ) : 85.0
136
- RCOV_EXCLUDES = 'spec,tests,/Library/Ruby,/var/lib,/usr/local/lib'
137
- RCOV_OPTS = [
138
- '--exclude', RCOV_EXCLUDES,
139
- '--xrefs',
140
- '--save',
141
- '--callsites',
142
- #'--aggregate', 'coverage.data' # <- doesn't work as of 0.8.1.2.0
143
- ]
144
-
145
-
146
- ### Load some task libraries that need to be loaded early
147
- if !RAKE_TASKDIR.exist?
148
- $stderr.puts "It seems you don't have the build task directory. Shall I fetch it "
149
- ans = readline( "for you? [y]" )
150
- ans = 'y' if !ans.nil? && ans.empty?
151
-
152
- if ans =~ /^y/i
153
- $stderr.puts "Okay, fetching #{RAKE_TASKLIBS_URL} into #{RAKE_TASKDIR}..."
154
- system 'hg', 'clone', RAKE_TASKLIBS_URL, "./#{RAKE_TASKDIR}"
155
- if ! $?.success?
156
- fail "Damn. That didn't work. Giving up; maybe try manually fetching?"
157
- end
158
- else
159
- $stderr.puts "Then I'm afraid I can't continue. Best of luck."
160
- fail "Rake tasklibs not present."
161
- end
162
-
163
- RAKE_TASKLIBS.include( "#{RAKE_TASKDIR}/*.rb" )
164
- end
165
-
166
- require RAKE_TASKDIR + 'helpers.rb'
167
- include RakefileHelpers
11
+ hoespec = Hoe.spec 'pluginfactory' do
12
+ self.readme_file = 'README.rdoc'
13
+ self.history_file = 'History.rdoc'
14
+ self.extra_rdoc_files = Rake::FileList[ '*.rdoc' ]
168
15
 
169
- # Set the build ID if the mercurial executable is available
170
- if hg = which( 'hg' )
171
- id = `#{hg} id -n`.chomp
172
- PKG_BUILD = "pre%03d" % [(id.chomp[ /^[[:xdigit:]]+/ ] || '1')]
173
- else
174
- PKG_BUILD = 'pre000'
175
- end
176
- SNAPSHOT_PKG_NAME = "#{PKG_FILE_NAME}.#{PKG_BUILD}"
177
- SNAPSHOT_GEM_NAME = "#{SNAPSHOT_PKG_NAME}.gem"
178
-
179
- # Documentation constants
180
- API_DOCSDIR = DOCSDIR + 'api'
181
- README_FILE = TEXT_FILES.find {|path| path =~ /^README/ } || 'README'
182
- RDOC_OPTIONS = [
183
- '--tab-width=4',
184
- '--show-hash',
185
- '--include', BASEDIR.to_s,
186
- "--main=#{README_FILE}",
187
- "--title=#{PKG_NAME}",
188
- ]
189
- YARD_OPTIONS = [
190
- '--use-cache',
191
- '--no-private',
192
- '--protected',
193
- '-r', README_FILE,
194
- '--exclude', 'extconf\\.rb',
195
- '--files', 'ChangeLog,LICENSE',
196
- '--output-dir', API_DOCSDIR.to_s,
197
- '--title', "#{PKG_NAME} #{PKG_VERSION}",
198
- ]
199
-
200
- # Release constants
201
- SMTP_HOST = "mail.faeriemud.org"
202
- SMTP_PORT = 465 # SMTP + SSL
203
-
204
- # Project constants
205
- PROJECT_HOST = 'deveiate'
206
- PROJECT_PUBDIR = '/usr/local/www/public/code'
207
- PROJECT_DOCDIR = "#{PROJECT_PUBDIR}/#{PKG_NAME}"
208
- PROJECT_SCPPUBURL = "#{PROJECT_HOST}:#{PROJECT_PUBDIR}"
209
- PROJECT_SCPDOCURL = "#{PROJECT_HOST}:#{PROJECT_DOCDIR}"
210
-
211
- GEM_PUBHOST = 'rubygems.org'
212
-
213
- # Gem dependencies: gemname => version
214
- DEPENDENCIES = {
215
- }
216
-
217
- # Developer Gem dependencies: gemname => version
218
- DEVELOPMENT_DEPENDENCIES = {
219
- 'rake' => '>= 0.8.7',
220
- 'rcodetools' => '>= 0.7.0.0',
221
- 'rcov' => '>= 0.8.1.2.0',
222
- 'rdoc' => '>= 2.4.3',
223
- 'RedCloth' => '>= 4.0.3',
224
- 'rspec' => '>= 1.2.6',
225
- 'ruby-termios' => '>= 0.9.6',
226
- 'text-format' => '>= 1.0.0',
227
- 'tmail' => '>= 1.2.3.1',
228
- 'diff-lcs' => '>= 1.1.2',
229
- }
230
-
231
- # Non-gem requirements: packagename => version
232
- REQUIREMENTS = {
233
- }
234
-
235
- # RubyGem specification
236
- GEMSPEC = Gem::Specification.new do |gem|
237
- gem.name = PKG_NAME.downcase
238
- gem.version = PKG_VERSION
239
-
240
- gem.summary = PKG_SUMMARY
241
- gem.description = [
242
- "PluginFactory is a mixin module that turns an including class into a factory for",
243
- "its derivatives, capable of searching for and loading them by name. This is",
244
- "useful when you have an abstract base class which defines an interface and basic",
245
- "functionality for a part of a larger system, and a collection of subclasses",
246
- "which implement the interface for different underlying functionality.",
247
- ].join( "\n" )
248
-
249
- gem.authors = "Martin Chase, Michael Granger"
250
- gem.email = ["stillflame@FaerieMUD.org", "ged@FaerieMUD.org"]
251
- gem.homepage = 'http://deveiate.org/projects/PluginFactory/'
252
-
253
- gem.has_rdoc = true
254
- gem.rdoc_options = RDOC_OPTIONS
255
- gem.extra_rdoc_files = TEXT_FILES - [ 'Rakefile' ]
256
-
257
- gem.bindir = BINDIR.relative_path_from(BASEDIR).to_s
258
- gem.executables = BIN_FILES.select {|pn| File.executable?(pn) }.
259
- collect {|pn| File.basename(pn) }
260
- gem.require_paths << EXTDIR.relative_path_from( BASEDIR ).to_s if EXTDIR.exist?
261
-
262
- if EXTCONF.exist?
263
- gem.extensions << EXTCONF.relative_path_from( BASEDIR ).to_s
264
- end
265
-
266
- gem.files = RELEASE_FILES
267
- gem.test_files = SPEC_FILES
268
-
269
- # signing key and certificate chain
270
- gem.signing_key = '/Volumes/Keys/ged-private_gem_key.pem'
271
- gem.cert_chain = [File.expand_path('~/.gem/ged-public_gem_cert.pem')]
272
-
273
- DEPENDENCIES.each do |name, version|
274
- version = '>= 0' if version.length.zero?
275
- gem.add_runtime_dependency( name, version )
276
- end
16
+ self.developer 'Martin Chase', 'stillflame@FaerieMUD.org'
17
+ self.developer 'Michael Granger', 'ged@FaerieMUD.org'
277
18
 
278
- REQUIREMENTS.each do |name, version|
279
- gem.requirements << [ name, version ].compact.join(' ')
280
- end
281
- end
282
-
283
- $trace = Rake.application.options.trace ? true : false
284
- $dryrun = Rake.application.options.dryrun ? true : false
285
- $include_dev_dependencies = false
19
+ self.dependency 'hoe-deveiate', '~> 0.0', :development
286
20
 
287
- # Load any remaining task libraries
288
- RAKE_TASKLIBS.each do |tasklib|
289
- next if tasklib.to_s =~ %r{/helpers\.rb$}
290
- begin
291
- trace " loading tasklib %s" % [ tasklib ]
292
- import tasklib
293
- rescue ScriptError => err
294
- fail "Task library '%s' failed to load: %s: %s" %
295
- [ tasklib, err.class.name, err.message ]
296
- trace "Backtrace: \n " + err.backtrace.join( "\n " )
297
- rescue => err
298
- log "Task library '%s' failed to load: %s: %s. Some tasks may not be available." %
299
- [ tasklib, err.class.name, err.message ]
300
- trace "Backtrace: \n " + err.backtrace.join( "\n " )
301
- end
21
+ self.spec_extras[:licenses] = ["BSD"]
22
+ self.rdoc_locations << "deveiate:/usr/local/www/public/code/#{remote_rdoc_dir}"
302
23
  end
303
24
 
304
- # Load any project-specific rules defined in 'Rakefile.local' if it exists
305
- import LOCAL_RAKEFILE if LOCAL_RAKEFILE.exist?
306
-
307
-
308
- #####################################################################
309
- ### T A S K S
310
- #####################################################################
311
-
312
- ### Default task
313
- task :default => [:clean, :local, :spec, :apidocs, :package]
25
+ ENV['VERSION'] ||= hoespec.spec.version.to_s
314
26
 
315
- ### Task the local Rakefile can append to -- no-op by default
316
- task :local
317
-
318
- ### Task: clean
319
- CLEAN.include 'coverage', '**/*.orig', '**/*.rej'
320
- CLOBBER.include 'artifacts', 'coverage.info', 'ChangeLog', PKGDIR
321
-
322
- ### Task: changelog
323
- file 'ChangeLog' do |task|
324
- log "Updating #{task.name}"
325
-
326
- changelog = make_changelog()
327
- File.open( task.name, 'w' ) do |fh|
328
- fh.print( changelog )
329
- end
330
- end
331
-
332
-
333
- ### Task: cruise (Cruisecontrol task)
334
- desc "Cruisecontrol build"
335
- task :cruise => [:clean, 'spec:quiet', :package] do |task|
336
- raise "Artifacts dir not set." if ARTIFACTS_DIR.to_s.empty?
337
- artifact_dir = ARTIFACTS_DIR.cleanpath + (CC_BUILD_LABEL || Time.now.strftime('%Y%m%d-%T'))
338
- artifact_dir.mkpath
339
-
340
- coverage = BASEDIR + 'coverage'
341
- if coverage.exist? && coverage.directory?
342
- $stderr.puts "Copying coverage stats..."
343
- FileUtils.cp_r( 'coverage', artifact_dir )
344
- end
345
-
346
- $stderr.puts "Copying packages..."
347
- FileUtils.cp_r( FileList['pkg/*'].to_a, artifact_dir )
348
- end
349
-
350
-
351
- desc "Update the build system to the latest version"
352
- task :update_build do
353
- log "Updating the build system"
354
- run 'hg', '-R', RAKE_TASKDIR, 'pull', '-u'
355
- log "Updating the Rakefile"
356
- sh 'rake', '-f', RAKE_TASKDIR + 'Metarakefile'
357
- end
27
+ task 'hg:precheckin' => [ :check_history, :check_manifest, :spec ]
358
28