pluginfactory 1.0.6 → 1.0.7

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.
Binary file
data/Rakefile CHANGED
@@ -7,7 +7,6 @@
7
7
  # Copyright (c) 2007-2010 The FaerieMUD Consortium
8
8
  #
9
9
  # Authors:
10
- # * Martin Chase <stillflame@FaerieMUD.org>
11
10
  # * Michael Granger <ged@FaerieMUD.org>
12
11
  #
13
12
 
@@ -19,6 +18,7 @@ BEGIN {
19
18
  libdir = basedir + "lib"
20
19
  extdir = libdir + Config::CONFIG['sitearch']
21
20
 
21
+ $LOAD_PATH.unshift( basedir.to_s ) unless $LOAD_PATH.include?( basedir.to_s )
22
22
  $LOAD_PATH.unshift( libdir.to_s ) unless $LOAD_PATH.include?( libdir.to_s )
23
23
  $LOAD_PATH.unshift( extdir.to_s ) unless $LOAD_PATH.include?( extdir.to_s )
24
24
  }
@@ -77,7 +77,7 @@ elsif VERSION_FILE.exist?
77
77
  PKG_VERSION = VERSION_FILE.read[ /VERSION\s*=\s*['"](\d+\.\d+\.\d+)['"]/, 1 ]
78
78
  end
79
79
 
80
- PKG_VERSION ||= '0.0.0'
80
+ PKG_VERSION = '0.0.0' unless defined?( PKG_VERSION ) && !PKG_VERSION.nil?
81
81
 
82
82
  PKG_FILE_NAME = "#{PKG_NAME.downcase}-#{PKG_VERSION}"
83
83
  GEM_FILE_NAME = "#{PKG_FILE_NAME}.gem"
@@ -92,7 +92,7 @@ EXTCONF = EXTDIR + 'extconf.rb'
92
92
 
93
93
  ARTIFACTS_DIR = Pathname.new( CC_BUILD_ARTIFACTS )
94
94
 
95
- TEXT_FILES = Rake::FileList.new( %w[Rakefile ChangeLog README LICENSE] )
95
+ TEXT_FILES = Rake::FileList.new( %w[Rakefile ChangeLog README* LICENSE] )
96
96
  BIN_FILES = Rake::FileList.new( "#{BINDIR}/*" )
97
97
  LIB_FILES = Rake::FileList.new( "#{LIBDIR}/**/*.rb" )
98
98
  EXT_FILES = Rake::FileList.new( "#{EXTDIR}/**/*.{c,h,rb}" )
@@ -168,34 +168,37 @@ include RakefileHelpers
168
168
 
169
169
  # Set the build ID if the mercurial executable is available
170
170
  if hg = which( 'hg' )
171
- id = IO.read('|-') or exec hg.to_s, 'id', '-n'
172
- PKG_BUILD = 'pre' + (id.chomp[ /^[[:xdigit:]]+/ ] || '1')
171
+ id = `#{hg} id -n`.chomp
172
+ PKG_BUILD = "pre%03d" % [(id.chomp[ /^[[:xdigit:]]+/ ] || '1')]
173
173
  else
174
- PKG_BUILD = 'pre0'
174
+ PKG_BUILD = 'pre000'
175
175
  end
176
176
  SNAPSHOT_PKG_NAME = "#{PKG_FILE_NAME}.#{PKG_BUILD}"
177
177
  SNAPSHOT_GEM_NAME = "#{SNAPSHOT_PKG_NAME}.gem"
178
178
 
179
179
  # Documentation constants
180
180
  API_DOCSDIR = DOCSDIR + 'api'
181
+ README_FILE = TEXT_FILES.find {|path| path =~ /^README/ } || 'README'
181
182
  RDOC_OPTIONS = [
182
- '-w', '4',
183
- '-HN',
184
- '-i', '.',
185
- '-m', 'README',
186
- '-t', PKG_NAME,
187
- '-W', 'http://deveiate.org/projects/PluginFactory/browser/'
183
+ '--tab-width=4',
184
+ '--show-hash',
185
+ '--include', BASEDIR.to_s,
186
+ "--main=#{README_FILE}",
187
+ "--title=#{PKG_NAME}",
188
188
  ]
189
189
  YARD_OPTIONS = [
190
- '--protected',
191
- '-r', 'README',
190
+ '--use-cache',
191
+ '--no-private',
192
+ '--protected',
193
+ '-r', README_FILE,
192
194
  '--exclude', 'extconf\\.rb',
193
- '--files', 'ChangeLog,LICENSE',
195
+ '--files', 'ChangeLog,LICENSE',
194
196
  '--output-dir', API_DOCSDIR.to_s,
197
+ '--title', "#{PKG_NAME} #{PKG_VERSION}",
195
198
  ]
196
199
 
197
200
  # Release constants
198
- SMTP_HOST = ""
201
+ SMTP_HOST = "mail.faeriemud.org"
199
202
  SMTP_PORT = 465 # SMTP + SSL
200
203
 
201
204
  # Project constants
@@ -205,22 +208,24 @@ PROJECT_DOCDIR = "#{PROJECT_PUBDIR}/#{PKG_NAME}"
205
208
  PROJECT_SCPPUBURL = "#{PROJECT_HOST}:#{PROJECT_PUBDIR}"
206
209
  PROJECT_SCPDOCURL = "#{PROJECT_HOST}:#{PROJECT_DOCDIR}"
207
210
 
211
+ GEM_PUBHOST = 'rubygems.org'
212
+
208
213
  # Gem dependencies: gemname => version
209
214
  DEPENDENCIES = {
210
215
  }
211
216
 
212
217
  # Developer Gem dependencies: gemname => version
213
218
  DEVELOPMENT_DEPENDENCIES = {
214
- 'rake' => '>= 0.8.7',
215
- 'rcodetools' => '>= 0.7.0.0',
216
- 'rcov' => '>= 0.8.1.2.0',
217
- 'rdoc' => '>= 2.4.3',
218
- 'RedCloth' => '>= 4.0.3',
219
- 'rspec' => '>= 1.2.6',
220
- 'termios' => '>= 0',
221
- 'text-format' => '>= 1.0.0',
222
- 'tmail' => '>= 1.2.3.1',
223
- 'diff-lcs' => '>= 1.1.2',
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',
224
229
  }
225
230
 
226
231
  # Non-gem requirements: packagename => version
@@ -247,7 +252,7 @@ GEMSPEC = Gem::Specification.new do |gem|
247
252
 
248
253
  gem.has_rdoc = true
249
254
  gem.rdoc_options = RDOC_OPTIONS
250
- gem.extra_rdoc_files = %w[ChangeLog README LICENSE]
255
+ gem.extra_rdoc_files = TEXT_FILES - [ 'Rakefile' ]
251
256
 
252
257
  gem.bindir = BINDIR.relative_path_from(BASEDIR).to_s
253
258
  gem.executables = BIN_FILES.select {|pn| File.executable?(pn) }.
@@ -261,6 +266,10 @@ GEMSPEC = Gem::Specification.new do |gem|
261
266
  gem.files = RELEASE_FILES
262
267
  gem.test_files = SPEC_FILES
263
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
+
264
273
  DEPENDENCIES.each do |name, version|
265
274
  version = '>= 0' if version.length.zero?
266
275
  gem.add_runtime_dependency( name, version )
@@ -77,7 +77,7 @@ class FactoryError < RuntimeError; end
77
77
  module PluginFactory
78
78
 
79
79
  # Library version
80
- VERSION = '1.0.6'
80
+ VERSION = '1.0.7'
81
81
 
82
82
 
83
83
  ### Logging
@@ -13,6 +13,10 @@ $LOAD_PATH.unshift( DOCSLIB.to_s ) if DOCSLIB.exist?
13
13
  # Make relative string paths of all the stuff we need to generate docs for
14
14
  DOCFILES = Rake::FileList[ LIB_FILES + EXT_FILES + GEMSPEC.extra_rdoc_files ]
15
15
 
16
+ # Documentation coverage constants
17
+ COVERAGE_DIR = BASEDIR + 'coverage'
18
+ COVERAGE_REPORT = COVERAGE_DIR + 'documentation.txt'
19
+
16
20
 
17
21
  # Prefer YARD, fallback to RDoc
18
22
  begin
@@ -40,28 +44,66 @@ begin
40
44
  end
41
45
 
42
46
  class YARD::CLI::Base; include YardGlobals; end
47
+ class YARD::CLI::Command; include YardGlobals; end
43
48
  class YARD::Parser::SourceParser; extend YardGlobals; include YardGlobals; end
44
49
  class YARD::Parser::CParser; include YardGlobals; end
45
50
  class YARD::CodeObjects::Base; include YardGlobals; end
46
51
  class YARD::Handlers::Base; include YardGlobals; end
52
+ class YARD::Handlers::Processor; include YardGlobals; end
47
53
  class YARD::Serializers::Base; include YardGlobals; end
54
+ class YARD::RegistryStore; include YardGlobals; end
55
+ class YARD::Docstring; include YardGlobals; end
48
56
  module YARD::Templates::Helpers::ModuleHelper; include YardGlobals; end
57
+
58
+ if vvec(RUBY_VERSION) >= vvec("1.9.1")
59
+ # Monkeypatched to allow more than two '#' characters at the beginning
60
+ # of the comment line.
61
+ # Patched from yard-0.5.8
62
+ require 'yard/parser/ruby/ruby_parser'
63
+ class YARD::Parser::Ruby::RipperParser < Ripper
64
+ def on_comment(comment)
65
+ $stderr.puts "Adding comment: %p" % [ comment ]
66
+ visit_ns_token(:comment, comment)
67
+
68
+ comment = comment.gsub(/^\#+\s{0,1}/, '').chomp
69
+ append_comment = @comments[lineno - 1]
70
+
71
+ if append_comment && @comments_last_column == column
72
+ @comments.delete(lineno - 1)
73
+ comment = append_comment + "\n" + comment
74
+ end
75
+
76
+ @comments[lineno] = comment
77
+ @comments_last_column = column
78
+ end
79
+ end # class YARD::Parser::Ruby::RipperParser
80
+ end
81
+
49
82
  # </metamonkeypatch>
50
83
 
51
84
  YARD_OPTIONS = [] unless defined?( YARD_OPTIONS )
52
85
 
53
- YARD::Rake::YardocTask.new( :apidocs ) do |task|
86
+ yardoctask = YARD::Rake::YardocTask.new( :apidocs ) do |task|
54
87
  task.files = DOCFILES
55
88
  task.options = YARD_OPTIONS
89
+ task.options << '--debug' << '--verbose' if $trace
56
90
  end
91
+ yardoctask.before = lambda {
92
+ trace "Calling yardoc like:",
93
+ " yardoc %s" % [ quotelist(yardoctask.options + yardoctask.files).join(' ') ]
94
+ }
95
+
96
+ YARDOC_CACHE = BASEDIR + '.yardoc'
97
+ CLOBBER.include( YARDOC_CACHE.to_s )
98
+
57
99
  rescue LoadError
58
100
  require 'rdoc/task'
59
101
 
60
- desc "Build API documentation in #{DOCDIR}"
102
+ desc "Build API documentation in #{API_DOCSDIR}"
61
103
  RDoc::Task.new( :apidocs ) do |task|
62
104
  task.main = "README"
63
105
  task.rdoc_files.include( DOCFILES )
64
- task.rdoc_dir = API_DOCSDIR
106
+ task.rdoc_dir = API_DOCSDIR.to_s
65
107
  task.options = RDOC_OPTIONS
66
108
  end
67
109
  end
@@ -69,3 +111,5 @@ end
69
111
  # Need the DOCFILES to exist to build the API docs
70
112
  task :apidocs => DOCFILES
71
113
 
114
+ CLEAN.include( API_DOCSDIR.to_s )
115
+
@@ -1,4 +1,5 @@
1
1
  # encoding: utf-8
2
+
2
3
  #####################################################################
3
4
  ### G L O B A L H E L P E R F U N C T I O N S
4
5
  #####################################################################
@@ -6,7 +7,6 @@
6
7
 
7
8
  require 'pathname'
8
9
  require 'uri'
9
- require 'open3'
10
10
 
11
11
  begin
12
12
  require 'readline'
@@ -54,9 +54,12 @@ module RakefileHelpers
54
54
  CLEAR_CURRENT_LINE = "\e[2K"
55
55
 
56
56
 
57
- ###############
58
- module_function
59
- ###############
57
+ TAR_OPTS = { :compression => :gzip }
58
+
59
+
60
+ ###############
61
+ module_function
62
+ ###############
60
63
 
61
64
  ### Output a logging message
62
65
  def log( *msg )
@@ -388,6 +391,7 @@ module RakefileHelpers
388
391
  ### capture groups, those will be returned in an Array, else the whole matching line
389
392
  ### is returned.
390
393
  def find_pattern_in_pipe( regexp, *cmd )
394
+ require 'open3'
391
395
  output = []
392
396
 
393
397
  log( cmd.collect {|part| part =~ /\s/ ? part.inspect : part} )
@@ -436,6 +440,63 @@ module RakefileHelpers
436
440
  return ver.split('.').collect {|char| char.to_i }.pack('N*')
437
441
  end
438
442
 
443
+
444
+ ### Archive::Tar::Reader#extract (as of 0.9.0) is broken w.r.t.
445
+ ### permissions, so we have to do this ourselves.
446
+ def untar( tarfile, targetdir )
447
+ require 'archive/tar'
448
+ targetdir = Pathname( targetdir )
449
+ raise "No such directory: #{targetdir}" unless targetdir.directory?
450
+
451
+ reader = Archive::Tar::Reader.new( tarfile.to_s, TAR_OPTS )
452
+
453
+ mkdir_p( targetdir )
454
+ reader.each( true ) do |header, body|
455
+ path = targetdir + header[:path]
456
+ # trace "Header is: %p" % [ header ]
457
+
458
+ case header[:type]
459
+ when :file
460
+ trace " #{path}"
461
+ path.open( File::WRONLY|File::EXCL|File::CREAT|File::TRUNC, header[:mode] ) do |fio|
462
+ bytesize = header[:size]
463
+ fio.write( body[0,bytesize] )
464
+ end
465
+
466
+ when :directory
467
+ trace " #{path}"
468
+ path.mkpath
469
+
470
+ when :link
471
+ linktarget = targetdir + header[:dest]
472
+ trace " #{path} => #{linktarget}"
473
+ path.make_link( linktarget.to_s )
474
+
475
+ when :symlink
476
+ linktarget = targetdir + header[:dest]
477
+ trace " #{path} -> #{linktarget}"
478
+ path.make_symlink( linktarget )
479
+ end
480
+ end
481
+
482
+ end
483
+
484
+
485
+ ### Extract the contents of the specified +zipfile+ into the given +targetdir+.
486
+ def unzip( zipfile, targetdir, *files )
487
+ require 'zip/zip'
488
+ targetdir = Pathname( targetdir )
489
+ raise "No such directory: #{targetdir}" unless targetdir.directory?
490
+
491
+ Zip::ZipFile.foreach( zipfile ) do |entry|
492
+ # trace " entry is: %p" % [ entry ]
493
+ next unless files.empty? || files.include?( entry.name )
494
+ target_path = targetdir + entry.name
495
+ # trace " would extract to: %s" % [ target_path ]
496
+ entry.extract( target_path ) { true }
497
+ end
498
+ end
499
+
439
500
  end # module Rakefile::Helpers
440
501
 
441
502
 
data/rake/hg.rb CHANGED
@@ -85,7 +85,7 @@ unless defined?( HG_DOTDIR )
85
85
 
86
86
  ### Return the list of files which are of status 'unknown'
87
87
  def get_unknown_files
88
- list = read_command_output( 'hg', 'status', '-un', '--no-color' )
88
+ list = read_command_output( 'hg', 'status', '-un', '--color', 'never' )
89
89
  list = list.split( /\n/ )
90
90
 
91
91
  trace "New files: %p" % [ list ]
@@ -215,13 +215,20 @@ unless defined?( HG_DOTDIR )
215
215
  paths = get_repo_paths()
216
216
  if origin_url = paths['default']
217
217
  ask_for_confirmation( "Pull and update from '#{origin_url}'?", false ) do
218
- run 'hg', 'pull', '-u'
218
+ Rake::Task['hg:pull_without_confirmation'].invoke
219
219
  end
220
220
  else
221
221
  trace "Skipping pull: No 'default' path."
222
222
  end
223
223
  end
224
224
 
225
+
226
+ desc "Pull and update without confirmation"
227
+ task :pull_without_confirmation do
228
+ run 'hg', 'pull', '-u'
229
+ end
230
+
231
+
225
232
  desc "Check the current code in if tests pass"
226
233
  task :checkin => ['hg:pull', 'hg:newfiles', 'test', COMMIT_MSG_FILE] do
227
234
  targets = get_target_args()
@@ -242,13 +249,18 @@ unless defined?( HG_DOTDIR )
242
249
  paths = get_repo_paths()
243
250
  if origin_url = paths['default']
244
251
  ask_for_confirmation( "Push to '#{origin_url}'?", false ) do
245
- run 'hg', 'push'
252
+ Rake::Task['hg:push_without_confirmation'].invoke
246
253
  end
247
254
  else
248
255
  trace "Skipping push: No 'default' path."
249
256
  end
250
257
  end
251
258
 
259
+ desc "Push to the default repo without confirmation"
260
+ task :push_without_confirmation do
261
+ run 'hg', 'push'
262
+ end
263
+
252
264
  end
253
265
 
254
266
  if HG_DOTDIR.exist?
@@ -147,9 +147,14 @@ module Manual
147
147
 
148
148
  layout = self.config['layout'].sub( /\.page$/, '' )
149
149
  templatepath = @layouts_dir + "#{layout}.page"
150
- template = ERB.new( templatepath.read(:encoding => 'UTF-8') )
151
- page = self
150
+ template = nil
151
+ if Object.const_defined?( :Encoding )
152
+ template = ERB.new( templatepath.read(:encoding => 'UTF-8') )
153
+ else
154
+ template = ERB.new( templatepath.read )
155
+ end
152
156
 
157
+ page = self
153
158
  html = template.result( binding() )
154
159
 
155
160
  # Use Tidy to clean up the html if 'cleanup' is turned on, but remove the Tidy
@@ -12,7 +12,13 @@ include Config
12
12
  ### Task: prerelease
13
13
  desc "Append the package build number to package versions"
14
14
  task :prerelease do
15
- GEMSPEC.version.version += ".#{PKG_BUILD}"
15
+ GEMSPEC.version.version << ".#{PKG_BUILD}"
16
+ Rake::Task[:gem].clear
17
+
18
+ Gem::PackageTask.new( GEMSPEC ) do |pkg|
19
+ pkg.need_zip = true
20
+ pkg.need_tar = true
21
+ end
16
22
  end
17
23
 
18
24
 
@@ -13,6 +13,7 @@ $publish_privately = false
13
13
 
14
14
  ### Add SSL to Net::SMTP
15
15
  class Net::SMTP
16
+
16
17
  def ssl_start( helo='localhost.localdomain', user=nil, secret=nil, authtype=nil )
17
18
  if block_given?
18
19
  begin
@@ -93,6 +94,9 @@ begin
93
94
  require 'etc'
94
95
  require 'socket'
95
96
  require 'text/format'
97
+ require 'rubygems/gemcutter_utilities'
98
+
99
+ include Gem::GemcutterUtilities
96
100
 
97
101
  ### Generate a valid RFC822 message-id
98
102
  def gen_message_id
@@ -104,6 +108,48 @@ begin
104
108
  end
105
109
 
106
110
 
111
+ ### Fetch the rubygems API token if it hasn't been already.
112
+ def sign_in_to_rubygems
113
+ return if Gem.configuration.rubygems_api_key
114
+
115
+ log "Enter your RubyGems.org credentials."
116
+
117
+ email = prompt " Email: "
118
+ password = prompt_for_password( "Password: " )
119
+
120
+ response = rubygems_api_request( :get, "api/v1/api_key" ) do |request|
121
+ request.basic_auth( email, password )
122
+ end
123
+
124
+ with_response( response ) do |resp|
125
+ log "Signed in."
126
+ Gem.configuration.rubygems_api_key = resp.body
127
+ end
128
+ end
129
+
130
+
131
+ ### Push the gem at the specified +path+ to the rubygems server at +gemhost+.
132
+ def push_gem( path, gemhost )
133
+ ENV['RUBYGEMS_HOST'] = "http://#{gemhost}"
134
+
135
+ sign_in_to_rubygems()
136
+
137
+ response = rubygems_api_request( :post, "api/v1/gems" ) do |request|
138
+ request.body = Gem.read_binary( path )
139
+ request.add_field "Content-Length", request.body.size
140
+ request.add_field "Content-Type", "application/octet-stream"
141
+ request.add_field "Authorization", Gem.configuration.rubygems_api_key
142
+ end
143
+
144
+ case response
145
+ when Net::HTTPSuccess
146
+ log( response.body )
147
+ else
148
+ fail( response.body )
149
+ end
150
+ end
151
+
152
+
107
153
  namespace :release do
108
154
  task :default => [ :prep_release, :upload, :publish, :announce ]
109
155
 
@@ -133,120 +179,147 @@ begin
133
179
  end
134
180
  CLOBBER.include( RELEASE_NOTES_FILE )
135
181
 
182
+ # Only define upload tasks if there's an upload host
183
+ if PROJECT_HOST.empty?
184
+ task :no_upload_host do
185
+ log "Skipping upload: no upload host."
186
+ end
187
+ task :upload => :no_upload_host
188
+ task :upload_docs => :no_upload_host
189
+ task :upload_packages => :no_upload_host
190
+ else
191
+ desc "Upload project documentation and packages to #{PROJECT_HOST}"
192
+ task :upload => [ :upload_docs, :upload_packages ]
193
+ task :project => :upload # the old name
194
+
195
+ desc "Publish the project docs to #{PROJECT_HOST}"
196
+ task :upload_docs => [ :apidocs ] do
197
+ when_writing( "Publishing docs to #{PROJECT_SCPDOCURL}" ) do
198
+ log "Uploading API documentation to %s:%s" % [ PROJECT_HOST, PROJECT_DOCDIR ]
199
+ run 'ssh', PROJECT_HOST, "rm -rf #{PROJECT_DOCDIR}"
200
+ run 'scp', '-qCr', API_DOCSDIR, PROJECT_SCPDOCURL
201
+ end
202
+ end
136
203
 
137
- desc "Upload project documentation and packages to #{PROJECT_HOST}"
138
- task :upload => [ :upload_docs, :upload_packages ]
139
- task :project => :upload # the old name
140
-
141
- desc "Publish the project docs to #{PROJECT_HOST}"
142
- task :upload_docs => [ :apidocs ] do
143
- when_writing( "Publishing docs to #{PROJECT_SCPDOCURL}" ) do
144
- log "Uploading API documentation to %s:%s" % [ PROJECT_HOST, PROJECT_DOCDIR ]
145
- run 'ssh', PROJECT_HOST, "rm -rf #{PROJECT_DOCDIR}"
146
- run 'scp', '-qCr', API_DOCSDIR, PROJECT_SCPDOCURL
204
+ desc "Publish the project packages to #{PROJECT_HOST}"
205
+ task :upload_packages => [ :package ] do
206
+ when_writing( "Uploading packages") do
207
+ pkgs = Pathname.glob( PKGDIR + "#{PKG_FILE_NAME}.{gem,tar.gz,tar.bz2,zip}" )
208
+ log "Uploading %d packages to #{PROJECT_SCPPUBURL}" % [ pkgs.length ]
209
+ pkgs.each do |pkgfile|
210
+ run 'scp', '-qC', pkgfile, PROJECT_SCPPUBURL
211
+ end
212
+ end
147
213
  end
148
214
  end
149
215
 
150
- desc "Publish the project packages to #{PROJECT_HOST}"
151
- task :upload_packages => [ :package ] do
152
- when_writing( "Uploading packages") do
153
- pkgs = Pathname.glob( PKGDIR + "#{PKG_FILE_NAME}.{gem,tar.gz,tar.bz2,zip}" )
154
- log "Uploading %d packages to #{PROJECT_SCPPUBURL}" % [ pkgs.length ]
155
- pkgs.each do |pkgfile|
156
- run 'scp', '-qC', pkgfile, PROJECT_SCPPUBURL
157
- end
158
- end
159
- end
216
+ # Only define the announcement tasks if there are addresses to announce to
217
+ if RELEASE_ANNOUNCE_ADDRESSES.empty?
218
+ task :no_announce_addresses do
219
+ log "Skipping announcement: no announce addresses"
220
+ end
221
+ task :announce => :no_announce_addresses
160
222
 
223
+ else
224
+ file RELEASE_ANNOUNCE_FILE => [RELEASE_NOTES_FILE] do |task|
225
+ relnotes = File.read( RELEASE_NOTES_FILE )
226
+ announce_body = %{
161
227
 
162
- file RELEASE_ANNOUNCE_FILE => [RELEASE_NOTES_FILE] do |task|
163
- relnotes = File.read( RELEASE_NOTES_FILE )
164
- announce_body = %{
228
+ Version #{PKG_VERSION} of #{PKG_NAME} has been released.
165
229
 
166
- Version #{PKG_VERSION} of #{PKG_NAME} has been released.
230
+ #{Text::Format.new(:first_indent => 0).format_one_paragraph(GEMSPEC.description)}
167
231
 
168
- #{Text::Format.new(:first_indent => 0).format_one_paragraph(GEMSPEC.description)}
232
+ == Project Page
169
233
 
170
- == Project Page
234
+ #{GEMSPEC.homepage}
171
235
 
172
- #{GEMSPEC.homepage}
236
+ == Installation
173
237
 
174
- == Installation
238
+ Via gems:
175
239
 
176
- Via gems:
240
+ $ sudo gem install #{GEMSPEC.name}
177
241
 
178
- $ sudo gem install #{GEMSPEC.name}
242
+ or from source:
179
243
 
180
- or from source:
244
+ $ wget http://deveiate.org/code/#{PKG_FILE_NAME}.tar.gz
245
+ $ tar -xzvf #{PKG_FILE_NAME}.tar.gz
246
+ $ cd #{PKG_FILE_NAME}
247
+ $ sudo rake install
181
248
 
182
- $ wget http://deveiate.org/code/#{PKG_FILE_NAME}.tar.gz
183
- $ tar -xzvf #{PKG_FILE_NAME}.tar.gz
184
- $ cd #{PKG_FILE_NAME}
185
- $ sudo rake install
249
+ == Changes
250
+ #{relnotes}
251
+ }.gsub( /^\t+/, '' )
186
252
 
187
- == Changes
188
- #{relnotes}
189
- }.gsub( /^\t+/, '' )
253
+ File.open( task.name, File::WRONLY|File::TRUNC|File::CREAT ) do |fh|
254
+ fh.print( announce_body )
255
+ end
190
256
 
191
- File.open( task.name, File::WRONLY|File::TRUNC|File::CREAT ) do |fh|
192
- fh.print( announce_body )
257
+ edit task.name
193
258
  end
259
+ CLOBBER.include( RELEASE_ANNOUNCE_FILE )
194
260
 
195
- edit task.name
196
- end
197
- CLOBBER.include( RELEASE_ANNOUNCE_FILE )
198
261
 
262
+ desc 'Send out a release announcement'
263
+ task :announce => [RELEASE_ANNOUNCE_FILE] do
264
+ email = TMail::Mail.new
199
265
 
200
- desc 'Send out a release announcement'
201
- task :announce => [RELEASE_ANNOUNCE_FILE] do
202
- email = TMail::Mail.new
266
+ if $publish_privately || RELEASE_ANNOUNCE_ADDRESSES.empty?
267
+ trace "Sending private announce mail"
268
+ email.to = 'rubymage@gmail.com'
269
+ else
270
+ trace "Sending public announce mail"
271
+ email.to = RELEASE_ANNOUNCE_ADDRESSES
272
+ email.bcc = 'rubymage@gmail.com'
273
+ end
203
274
 
204
- if $publish_privately || RELEASE_ANNOUNCE_ADDRESSES.empty?
205
- trace "Sending private announce mail"
206
- email.to = 'rubymage@gmail.com'
207
- else
208
- trace "Sending public announce mail"
209
- email.to = RELEASE_ANNOUNCE_ADDRESSES
210
- email.bcc = 'rubymage@gmail.com'
211
- end
212
- email.from = 'Michael Granger <mgranger@laika.com>'
213
- email.subject = "[ANN] #{PKG_NAME} #{PKG_VERSION}"
214
- email.body = File.read( RELEASE_ANNOUNCE_FILE )
215
- email.date = Time.new
216
-
217
- email.message_id = gen_message_id()
218
-
219
- log "About to send the following email:"
220
- puts '---',
221
- email.to_s,
222
- '---'
223
-
224
- ask_for_confirmation( "Will send via #{SMTP_HOST}." ) do
225
- pwent = Etc.getpwuid( Process.euid )
226
- curuser = pwent ? pwent.name : 'unknown'
227
- username = prompt_with_default( "SMTP user", curuser )
228
- password = prompt_for_password()
229
-
230
- trace "Creating SMTP connection to #{SMTP_HOST}:#{SMTP_PORT}"
231
- smtp = Net::SMTP.new( SMTP_HOST, SMTP_PORT )
232
- smtp.set_debug_output( $stdout )
233
- smtp.esmtp = true
234
-
235
- trace "connecting..."
236
- smtp.ssl_start( Socket.gethostname, username, password, :plain ) do |smtp|
237
- trace "sending message..."
238
- smtp.send_message( email.to_s, email.from, email.to )
275
+ from = prompt_with_default( "Send announcement as:",
276
+ 'Michael Granger <ged@FaerieMUD.org>' ) or fail
277
+
278
+ email.from = from
279
+ email.subject = "[ANN] #{PKG_NAME} #{PKG_VERSION}"
280
+ email.body = File.read( RELEASE_ANNOUNCE_FILE )
281
+ email.date = Time.new
282
+
283
+ email.message_id = gen_message_id()
284
+
285
+ log "About to send the following email:"
286
+ puts '---',
287
+ email.to_s,
288
+ '---'
289
+
290
+ ask_for_confirmation( "Will send via #{SMTP_HOST}." ) do
291
+ pwent = Etc.getpwuid( Process.euid )
292
+ curuser = pwent ? pwent.name : 'unknown'
293
+ username = prompt_with_default( "SMTP user", curuser )
294
+ password = prompt_for_password()
295
+
296
+ trace "Creating SMTP connection to #{SMTP_HOST}:#{SMTP_PORT}"
297
+ smtp = Net::SMTP.new( SMTP_HOST, SMTP_PORT )
298
+ smtp.set_debug_output( $stdout )
299
+ smtp.esmtp = true
300
+
301
+ trace "connecting..."
302
+ smtp.ssl_start( Socket.gethostname, username, password, :plain ) do |smtp|
303
+ trace "sending message..."
304
+ smtp.send_message( email.to_s, email.from, email.to )
305
+ end
306
+ trace "done."
239
307
  end
240
- trace "done."
241
308
  end
242
309
  end
243
310
 
244
-
245
- desc 'Publish the new release to Gemcutter'
246
- task :publish => [:clean, :gem, :notes] do |task|
247
- ask_for_confirmation( "Publish #{GEM_FILE_NAME} to Gemcutter?", false ) do
248
- gempath = PKGDIR + GEM_FILE_NAME
249
- sh 'gem', 'push', gempath
311
+ if GEM_PUBHOST.empty?
312
+ task :no_gem_host do
313
+ log "Skipping gem push: no gem publication host."
314
+ end
315
+ task :publish => :no_gem_host
316
+ else
317
+ desc 'Publish the new gem to #{GEM_PUBHOST}'
318
+ task :publish => [:clean, :gem, :notes] do |task|
319
+ ask_for_confirmation( "Publish #{GEM_FILE_NAME} to #{GEM_PUBHOST}?", false ) do
320
+ gempath = PKGDIR + GEM_FILE_NAME
321
+ push_gem( gempath, GEM_PUBHOST )
322
+ end
250
323
  end
251
324
  end
252
325
  end
@@ -262,6 +335,7 @@ rescue LoadError => err
262
335
  end
263
336
 
264
337
  task :release => :no_release_tasks
338
+ task "release:rerelease" => :no_release_tasks
265
339
  task "release:announce" => :no_release_tasks
266
340
  task "release:publish" => :no_release_tasks
267
341
  task "release:notes" => :no_release_tasks
@@ -6,6 +6,7 @@ BEGIN {
6
6
 
7
7
  libdir = basedir + "lib"
8
8
 
9
+ $LOAD_PATH.unshift( basedir ) unless $LOAD_PATH.include?( basedir )
9
10
  $LOAD_PATH.unshift( libdir ) unless $LOAD_PATH.include?( libdir )
10
11
  }
11
12
 
metadata CHANGED
@@ -1,20 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pluginfactory
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 25
4
5
  prerelease: false
5
6
  segments:
6
7
  - 1
7
8
  - 0
8
- - 6
9
- version: 1.0.6
9
+ - 7
10
+ version: 1.0.7
10
11
  platform: ruby
11
12
  authors:
12
13
  - Martin Chase, Michael Granger
13
14
  autorequire:
14
15
  bindir: bin
15
- cert_chain: []
16
+ cert_chain:
17
+ - |
18
+ -----BEGIN CERTIFICATE-----
19
+ MIIDLDCCAhSgAwIBAgIBADANBgkqhkiG9w0BAQUFADA8MQwwCgYDVQQDDANnZWQx
20
+ FzAVBgoJkiaJk/IsZAEZFgdfYWVyaWVfMRMwEQYKCZImiZPyLGQBGRYDb3JnMB4X
21
+ DTEwMDkxNjE0NDg1MVoXDTExMDkxNjE0NDg1MVowPDEMMAoGA1UEAwwDZ2VkMRcw
22
+ FQYKCZImiZPyLGQBGRYHX2FlcmllXzETMBEGCgmSJomT8ixkARkWA29yZzCCASIw
23
+ DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALy//BFxC1f/cPSnwtJBWoFiFrir
24
+ h7RicI+joq/ocVXQqI4TDWPyF/8tqkvt+rD99X9qs2YeR8CU/YiIpLWrQOYST70J
25
+ vDn7Uvhb2muFVqq6+vobeTkILBEO6pionWDG8jSbo3qKm1RjKJDwg9p4wNKhPuu8
26
+ KGue/BFb67KflqyApPmPeb3Vdd9clspzqeFqp7cUBMEpFS6LWxy4Gk+qvFFJBJLB
27
+ BUHE/LZVJMVzfpC5Uq+QmY7B+FH/QqNndn3tOHgsPadLTNimuB1sCuL1a4z3Pepd
28
+ TeLBEFmEao5Dk3K/Q8o8vlbIB/jBDTUx6Djbgxw77909x6gI9doU4LD5XMcCAwEA
29
+ AaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFJeoGkOr9l4B
30
+ +saMkW/ZXT4UeSvVMA0GCSqGSIb3DQEBBQUAA4IBAQBG2KObvYI2eHyyBUJSJ3jN
31
+ vEnU3d60znAXbrSd2qb3r1lY1EPDD3bcy0MggCfGdg3Xu54z21oqyIdk8uGtWBPL
32
+ HIa9EgfFGSUEgvcIvaYqiN4jTUtidfEFw+Ltjs8AP9gWgSIYS6Gr38V0WGFFNzIH
33
+ aOD2wmu9oo/RffW4hS/8GuvfMzcw7CQ355wFR4KB/nyze+EsZ1Y5DerCAagMVuDQ
34
+ U0BLmWDFzPGGWlPeQCrYHCr+AcJz+NRnaHCKLZdSKj/RHuTOt+gblRex8FAh8NeA
35
+ cmlhXe46pZNJgWKbxZah85jIjx95hR8vOI+NAM5iH9kOqK13DrxacTKPhqj5PjwF
36
+ -----END CERTIFICATE-----
16
37
 
17
- date: 2010-03-23 00:00:00 -07:00
38
+ date: 2010-09-27 00:00:00 -07:00
18
39
  default_executable:
19
40
  dependencies: []
20
41
 
@@ -61,37 +82,36 @@ licenses: []
61
82
 
62
83
  post_install_message:
63
84
  rdoc_options:
64
- - -w
65
- - "4"
66
- - -HN
67
- - -i
85
+ - --tab-width=4
86
+ - --show-hash
87
+ - --include
68
88
  - .
69
- - -m
70
- - README
71
- - -t
72
- - pluginfactory
73
- - -W
74
- - http://deveiate.org/projects/PluginFactory/browser/
89
+ - --main=README
90
+ - --title=pluginfactory
75
91
  require_paths:
76
92
  - lib
77
93
  required_ruby_version: !ruby/object:Gem::Requirement
94
+ none: false
78
95
  requirements:
79
96
  - - ">="
80
97
  - !ruby/object:Gem::Version
98
+ hash: 3
81
99
  segments:
82
100
  - 0
83
101
  version: "0"
84
102
  required_rubygems_version: !ruby/object:Gem::Requirement
103
+ none: false
85
104
  requirements:
86
105
  - - ">="
87
106
  - !ruby/object:Gem::Version
107
+ hash: 3
88
108
  segments:
89
109
  - 0
90
110
  version: "0"
91
111
  requirements: []
92
112
 
93
113
  rubyforge_project:
94
- rubygems_version: 1.3.6
114
+ rubygems_version: 1.3.7
95
115
  signing_key:
96
116
  specification_version: 3
97
117
  summary: A mixin for making plugin classes
@@ -0,0 +1,2 @@
1
+ 5���,�Z�ӵ)h�������Z�1q�����~����T|�� ��6�"��*.<�d:�O��I��=���o�J�x� �|��~͖�-=�z�
2
+ Y�8�?a^� MѼ�}X`�Bke��a��5ä{��֍M�coa9�Mc_}��r�����/gD��KIM�3��j-��N���A�� x���\����o�&�<6Á�M�G����F�(Ț����B�C�{��]0P�Y5�r (;�`��[/�J��xE.e�ߙj