Skip to content
This repository
Browse code

changed my mind

  • Loading branch information...
commit 3c89db035a7fe3acd20c8f78617216a5b63a6ba1 1 parent f2df67b
Aaron Patterson authored
0  CHANGELOG.rdoc → History.txt
File renamed without changes
0  README.rdoc → README.txt
File renamed without changes
4 Rakefile
... ... @@ -1,14 +1,12 @@
1 1 # -*- ruby -*-
2 2
3 3 require 'rubygems'
4   -require './vendor/hoe.rb'
  4 +require 'hoe'
5 5
6 6 $LOAD_PATH << File.join(File.dirname(__FILE__), 'lib')
7 7 require 'earworm.rb'
8 8
9 9 Hoe.new('earworm', Earworm::VERSION) do |p|
10   - p.readme = 'README.rdoc'
11   - p.history = 'CHANGELOG.rdoc'
12 10 p.developer('Aaron Patterson', 'aaronp@rubyforge.org')
13 11 p.extra_deps = [['icanhasaudio', '>=0.1.1']]
14 12 end
848 vendor/hoe.rb
... ... @@ -1,848 +0,0 @@
1   -# -*- ruby -*-
2   -
3   -require 'rubygems'
4   -require 'rake'
5   -require 'rake/gempackagetask'
6   -require 'rake/rdoctask'
7   -require 'rake/testtask'
8   -require 'rbconfig'
9   -require 'rubyforge'
10   -require 'yaml'
11   -
12   -##
13   -# hoe - a tool to help rake
14   -#
15   -# Hoe is a simple rake/rubygems helper for project Rakefiles. It
16   -# generates all the usual tasks for projects including rdoc generation,
17   -# testing, packaging, and deployment.
18   -#
19   -# == Using Hoe
20   -#
21   -# === Basics
22   -#
23   -# Use this as a minimal starting point:
24   -#
25   -# require 'hoe'
26   -#
27   -# Hoe.new("project_name", '1.0.0') do |p|
28   -# p.rubyforge_name = "rf_project"
29   -# # add other details here
30   -# end
31   -#
32   -# # add other tasks here
33   -#
34   -# === Tasks Provided:
35   -#
36   -# announce:: Create news email file and post to rubyforge.
37   -# audit:: Run ZenTest against the package.
38   -# check_manifest:: Verify the manifest.
39   -# clean:: Clean up all the extras.
40   -# config_hoe:: Create a fresh ~/.hoerc file.
41   -# debug_gem:: Show information about the gem.
42   -# default:: Run the default tasks.
43   -# docs:: Build the docs HTML Files
44   -# email:: Generate email announcement file.
45   -# gem:: Build the gem file hoe-1.5.0.gem
46   -# generate_key:: Generate a key for signing your gems.
47   -# install_gem:: Install the package as a gem.
48   -# multi:: Run the test suite using multiruby.
49   -# package:: Build all the packages
50   -# post_blog:: Post announcement to blog.
51   -# post_news:: Post announcement to rubyforge.
52   -# publish_docs:: Publish RDoc to RubyForge.
53   -# release:: Package and upload the release to rubyforge.
54   -# ridocs:: Generate ri locally for testing.
55   -# test:: Run the test suite.
56   -# test_deps:: Show which test files fail when run alone.
57   -#
58   -# === Extra Configuration Options:
59   -#
60   -# Run +config_hoe+ to generate a new ~/.hoerc file. The file is a
61   -# YAML formatted config file with the following settings:
62   -#
63   -# exclude:: A regular expression of files to exclude from
64   -# +check_manifest+.
65   -# publish_on_announce:: Run +publish_docs+ when you run +release+.
66   -# signing_key_file:: Signs your gems with this private key.
67   -# signing_cert_file:: Signs your gem with this certificate.
68   -# blogs:: An array of hashes of blog settings.
69   -#
70   -# Run +config_hoe+ and see ~/.hoerc for examples.
71   -#
72   -# === Signing Gems:
73   -#
74   -# Run the 'generate_key' task. This will:
75   -#
76   -# 1. Configure your ~/.hoerc.
77   -# 2. Generate a signing key and certificate.
78   -# 3. Install the private key and public certificate files into ~/.gem.
79   -# 4. Upload the certificate to RubyForge.
80   -#
81   -# Hoe will now generate signed gems when the package task is run. If you have
82   -# multiple machines you build gems on, be sure to install your key and
83   -# certificate on each machine.
84   -#
85   -# Keep your private key secret! Keep your private key safe!
86   -#
87   -# To make sure your gems are signed run:
88   -#
89   -# rake package; tar tf pkg/yourproject-1.2.3.gem
90   -#
91   -# If your gem is signed you will see:
92   -#
93   -# data.tar.gz
94   -# data.tar.gz.sig
95   -# metadata.gz
96   -# metadata.gz.sig
97   -#
98   -# === Platform awareness
99   -#
100   -# Hoe allows bundling of pre-compiled extensions in the +package+ task.
101   -#
102   -# To create a package for your current platform:
103   -#
104   -# rake package INLINE=1
105   -#
106   -# This will force Hoe analize your +Inline+ already compiled
107   -# extensions and include them in your gem.
108   -#
109   -# If somehow you need to force a specific platform:
110   -#
111   -# rake package INLINE=1 FORCE_PLATFORM=mswin32
112   -#
113   -# This will set the +Gem::Specification+ platform to the one indicated in
114   -# +FORCE_PLATFORM+ (instead of default Gem::Platform::CURRENT)
115   -#
116   -
117   -class Hoe
118   - VERSION = '1.5.3'
119   -
120   - ruby_prefix = Config::CONFIG['prefix']
121   - sitelibdir = Config::CONFIG['sitelibdir']
122   -
123   - ##
124   - # Used to specify a custom install location (for rake install).
125   -
126   - PREFIX = ENV['PREFIX'] || ruby_prefix
127   -
128   - ##
129   - # Used to add extra flags to RUBY_FLAGS.
130   -
131   - RUBY_DEBUG = ENV['RUBY_DEBUG']
132   -
133   - default_ruby_flags = "-w -I#{%w(lib ext bin test).join(File::PATH_SEPARATOR)}" +
134   - (RUBY_DEBUG ? " #{RUBY_DEBUG}" : '')
135   -
136   - ##
137   - # Used to specify flags to ruby [has smart default].
138   -
139   - RUBY_FLAGS = ENV['RUBY_FLAGS'] || default_ruby_flags
140   -
141   - ##
142   - # Used to add flags to test_unit (e.g., -n test_borked).
143   -
144   - FILTER = ENV['FILTER'] # for tests (eg FILTER="-n test_blah")
145   -
146   - # :stopdoc:
147   -
148   - RUBYLIB = if PREFIX == ruby_prefix then
149   - sitelibdir
150   - else
151   - File.join(PREFIX, sitelibdir[ruby_prefix.size..-1])
152   - end
153   -
154   - DLEXT = Config::CONFIG['DLEXT']
155   -
156   - WINDOZE = /djgpp|(cyg|ms|bcc)win|mingw/ =~ RUBY_PLATFORM unless defined? WINDOZE
157   -
158   - DIFF = if WINDOZE
159   - 'diff.exe'
160   - else
161   - if system("gdiff", __FILE__, __FILE__)
162   - 'gdiff' # solaris and kin suck
163   - else
164   - 'diff'
165   - end
166   - end unless defined? DIFF
167   -
168   - # :startdoc:
169   -
170   - ##
171   - # *Recommended*: The author(s) of the package. (can be array)
172   - # Really. Set this or we'll tease you.
173   -
174   - attr_accessor :author
175   -
176   - ##
177   - # Populated automatically from the manifest. List of executables.
178   -
179   - attr_accessor :bin_files # :nodoc:
180   -
181   - ##
182   - # Optional: A description of the release's latest changes. Auto-populates.
183   -
184   - attr_accessor :changes
185   -
186   - ##
187   - # Optional: An array of file patterns to delete on clean.
188   -
189   - attr_accessor :clean_globs
190   -
191   - ##
192   - # Optional: A description of the project. Auto-populates.
193   -
194   - attr_accessor :description
195   -
196   - ##
197   - # Optional: What sections from the readme to use for auto-description. Defaults to %w(description).
198   -
199   - attr_accessor :description_sections
200   -
201   - ##
202   - # *Recommended*: The author's email address(es). (can be array)
203   -
204   - attr_accessor :email
205   -
206   - ##
207   - # Optional: An array of rubygem dependencies.
208   -
209   - attr_accessor :extra_deps
210   -
211   - ##
212   - # Populated automatically from the manifest. List of library files.
213   -
214   - attr_accessor :lib_files # :nodoc:
215   -
216   - ##
217   - # Optional: Array of incompatible versions for multiruby filtering. Used as a regex.
218   -
219   - attr_accessor :multiruby_skip
220   -
221   - ##
222   - # *MANDATORY*: The name of the release.
223   -
224   - attr_accessor :name
225   -
226   - ##
227   - # Optional: Should package create a tarball? [default: true]
228   -
229   - attr_accessor :need_tar
230   -
231   - ##
232   - # Optional: Should package create a zipfile? [default: false]
233   -
234   - attr_accessor :need_zip
235   -
236   - ##
237   - # Optional: A post-install message to be displayed when gem is installed.
238   -
239   - attr_accessor :post_install_message
240   -
241   - ##
242   - # Optional: A regexp to match documentation files against the manifest.
243   -
244   - attr_accessor :rdoc_pattern
245   -
246   - ##
247   - # Optional: Name of RDoc destination directory on Rubyforge. [default: +name+]
248   -
249   - attr_accessor :remote_rdoc_dir
250   -
251   - ##
252   - # Optional: Flags for RDoc rsync. [default: "-av --delete"]
253   -
254   - attr_accessor :rsync_args
255   -
256   - ##
257   - # Optional: The name of the rubyforge project. [default: name.downcase]
258   -
259   - attr_accessor :rubyforge_name
260   -
261   - ##
262   - # The Gem::Specification.
263   -
264   - attr_accessor :spec # :nodoc:
265   -
266   - ##
267   - # Optional: A hash of extra values to set in the gemspec. Value may be a proc.
268   -
269   - attr_accessor :spec_extras
270   -
271   - ##
272   - # Optional: A short summary of the project. Auto-populates.
273   -
274   - attr_accessor :summary
275   -
276   - ##
277   - # Optional: Number of sentences from description for summary. Defaults to 1.
278   -
279   - attr_accessor :summary_sentences
280   -
281   - ##
282   - # Populated automatically from the manifest. List of tests.
283   -
284   - attr_accessor :test_files # :nodoc:
285   -
286   - ##
287   - # Optional: An array of test file patterns [default: test/**/test_*.rb]
288   -
289   - attr_accessor :test_globs
290   -
291   - ##
292   - # Optional: The url(s) of the project. (can be array). Auto-populates.
293   -
294   - attr_accessor :url
295   -
296   - ##
297   - # *MANDATORY*: The version. Don't hardcode! use a constant in the project.
298   -
299   - attr_accessor :version
300   -
301   - ##
302   - # Optional: The README filename
303   -
304   - attr_accessor :readme
305   -
306   - ##
307   - # Optional: The History filename
308   -
309   - attr_accessor :history
310   -
311   - def initialize(name, version) # :nodoc:
312   - self.name = name
313   - self.version = version
314   -
315   - # Defaults
316   - self.author = []
317   - self.clean_globs = %w(diff diff.txt email.txt ri
318   - *.gem *~ **/*~ *.rbc **/*.rbc)
319   - self.description_sections = %w(description)
320   - self.email = []
321   - self.extra_deps = []
322   - self.multiruby_skip = []
323   - self.need_tar = true
324   - self.need_zip = false
325   - self.rdoc_pattern = /^(lib|bin|ext)|(txt|rdoc)$/
326   - self.remote_rdoc_dir = name
327   - self.rsync_args = '-av --delete'
328   - self.rubyforge_name = name.downcase
329   - self.spec_extras = {}
330   - self.summary_sentences = 1
331   - self.test_globs = ['test/**/test_*.rb']
332   - self.readme = 'README.txt'
333   - self.history = 'History.txt'
334   - self.post_install_message = nil
335   -
336   - yield self if block_given?
337   -
338   - # Intuit values:
339   -
340   - def missing name
341   - warn "** #{name} is missing or in the wrong format for auto-intuiting."
342   - warn " run `sow blah` and look at its text files"
343   - end
344   -
345   - readme = File.read(self.readme).split(/^(=+ .*)$/)[1..-1] rescue ''
346   - unless readme.empty? then
347   - sections = readme.map { |s|
348   - s =~ /^=/ ? s.strip.downcase.chomp(':').split.last : s.strip
349   - }
350   - sections = Hash[*sections]
351   - desc = sections.values_at(*description_sections).join("\n\n")
352   - summ = desc.split(/\.\s+/).first(summary_sentences).join(". ")
353   -
354   - self.description ||= desc
355   - self.summary ||= summ
356   - self.url ||= readme[1].gsub(/^\* /, '').split(/\n/).grep(/\S+/)
357   - else
358   - missing 'README.txt'
359   - end
360   -
361   - self.changes ||= begin
362   - h = File.read(self.history)
363   - h.split(/^(===.*)/)[1..2].join.strip
364   - rescue
365   - missing 'History.txt'
366   - ''
367   - end
368   -
369   - %w(email author).each do |field|
370   - value = self.send(field)
371   - if value.nil? or value.empty? then
372   - if Time.now < Time.local(2008, 4, 1) then
373   - warn "Hoe #{field} value not set - Fix by 2008-04-01!"
374   - self.send "#{field}=", "doofus"
375   - else
376   - abort "Hoe #{field} value not set. aborting"
377   - end
378   - end
379   - end
380   -
381   - hoe_deps = {
382   - 'rake' => ">= #{RAKEVERSION}",
383   - 'rubyforge' => ">= #{::RubyForge::VERSION}",
384   - }
385   -
386   - self.extra_deps = Array(extra_deps).map { |o| String === o ? [o] : o }
387   -
388   - if name == 'hoe' then
389   - hoe_deps.each do |pkg, vers|
390   - extra_deps << [pkg, vers]
391   - end
392   - end
393   -
394   - define_tasks
395   - end
396   -
397   - def developer name, email
398   - self.author << name
399   - self.email << email
400   - end
401   -
402   - def define_tasks # :nodoc:
403   - def with_config # :nodoc:
404   - rc = File.expand_path("~/.hoerc")
405   - exists = File.exist? rc
406   - config = exists ? YAML.load_file(rc) : {}
407   - yield(config, rc)
408   - end
409   -
410   - desc 'Run the default tasks.'
411   - task :default => :test
412   -
413   - desc 'Run the test suite. Use FILTER to add to the command line.'
414   - task :test do
415   - run_tests
416   - end
417   -
418   - desc 'Show which test files fail when run alone.'
419   - task :test_deps do
420   - tests = Dir["test/**/test_*.rb"] + Dir["test/**/*_test.rb"]
421   -
422   - tests.each do |test|
423   - if not system "ruby -Ibin:lib:test #{test} &> /dev/null" then
424   - puts "Dependency Issues: #{test}"
425   - end
426   - end
427   - end
428   -
429   - desc 'Run the test suite using multiruby.'
430   - task :multi do
431   - run_tests :multi
432   - end
433   -
434   - ############################################################
435   - # Packaging and Installing
436   -
437   - signing_key = nil
438   - cert_chain = []
439   -
440   - with_config do |config, path|
441   - break unless config['signing_key_file'] and config['signing_cert_file']
442   - key_file = File.expand_path config['signing_key_file'].to_s
443   - signing_key = key_file if File.exist? key_file
444   -
445   - cert_file = File.expand_path config['signing_cert_file'].to_s
446   - cert_chain << cert_file if File.exist? cert_file
447   - end
448   -
449   - self.spec = Gem::Specification.new do |s|
450   - s.name = name
451   - s.version = version
452   - s.summary = summary
453   - case author
454   - when Array
455   - s.authors = author
456   - else
457   - s.author = author
458   - end
459   - s.email = email
460   - s.homepage = Array(url).first
461   - s.rubyforge_project = rubyforge_name
462   -
463   - s.description = description
464   -
465   - extra_deps.each do |dep|
466   - s.add_dependency(*dep)
467   - end
468   -
469   - s.files = File.read("Manifest.txt").delete("\r").split(/\n/)
470   - s.executables = s.files.grep(/^bin/) { |f| File.basename(f) }
471   -
472   - s.bindir = "bin"
473   - dirs = Dir['{lib,ext}']
474   - s.require_paths = dirs unless dirs.empty?
475   -
476   - s.rdoc_options = ['--main', self.readme]
477   - s.extra_rdoc_files = s.files.grep(/txt$/)
478   - s.has_rdoc = true
479   -
480   - s.post_install_message = post_install_message
481   -
482   - if test ?f, "test/test_all.rb" then
483   - s.test_file = "test/test_all.rb"
484   - else
485   - s.test_files = Dir[*test_globs]
486   - end
487   -
488   - if signing_key and cert_chain then
489   - s.signing_key = signing_key
490   - s.cert_chain = cert_chain
491   - end
492   -
493   - ############################################################
494   - # Allow automatic inclusion of compiled extensions
495   - if ENV['INLINE'] then
496   - s.platform = ENV['FORCE_PLATFORM'] || Gem::Platform::CURRENT
497   - # name of the extension is CamelCase
498   - alternate_name = if name =~ /[A-Z]/ then
499   - name.gsub(/([A-Z])/, '_\1').downcase.sub(/^_/, '')
500   - elsif name =~ /_/ then
501   - name.capitalize.gsub(/_([a-z])/) { $1.upcase }
502   - end
503   -
504   - # Try collecting Inline extensions for +name+
505   - if defined?(Inline) then
506   - directory 'lib/inline'
507   -
508   - extensions = Dir.chdir(Inline::directory) {
509   - Dir["Inline_{#{name},#{alternate_name}}_*.#{DLEXT}"]
510   - }
511   - extensions.each do |ext|
512   - # add the inlined extension to the spec files
513   - s.files += ["lib/inline/#{ext}"]
514   -
515   - # include the file in the tasks
516   - file "lib/inline/#{ext}" => ["lib/inline"] do
517   - cp File.join(Inline::directory, ext), "lib/inline"
518   - end
519   - end
520   - end
521   - end
522   -
523   - # Do any extra stuff the user wants
524   - spec_extras.each do |msg, val|
525   - case val
526   - when Proc
527   - val.call(s.send(msg))
528   - else
529   - s.send "#{msg}=", val
530   - end
531   - end
532   - end
533   -
534   - desc 'Show information about the gem.'
535   - task :debug_gem do
536   - puts spec.to_ruby
537   - end
538   -
539   - self.lib_files = spec.files.grep(/^(lib|ext)/)
540   - self.bin_files = spec.files.grep(/^bin/)
541   - self.test_files = spec.files.grep(/^test/)
542   -
543   - Rake::GemPackageTask.new spec do |pkg|
544   - pkg.need_tar = @need_tar
545   - pkg.need_zip = @need_zip
546   - end
547   -
548   - desc 'Install the package as a gem.'
549   - task :install_gem => [:clean, :package] do
550   - sh "#{'sudo ' unless WINDOZE}gem install --local pkg/*.gem"
551   - end
552   -
553   - desc 'Package and upload the release to rubyforge.'
554   - task :release => [:clean, :package] do |t|
555   - v = ENV["VERSION"] or abort "Must supply VERSION=x.y.z"
556   - abort "Versions don't match #{v} vs #{version}" if v != version
557   - pkg = "pkg/#{name}-#{version}"
558   -
559   - if $DEBUG then
560   - puts "release_id = rf.add_release #{rubyforge_name.inspect}, #{name.inspect}, #{version.inspect}, \"#{pkg}.tgz\""
561   - puts "rf.add_file #{rubyforge_name.inspect}, #{name.inspect}, release_id, \"#{pkg}.gem\""
562   - end
563   -
564   - rf = RubyForge.new.configure
565   - puts "Logging in"
566   - rf.login
567   -
568   - c = rf.userconfig
569   - c["release_notes"] = description if description
570   - c["release_changes"] = changes if changes
571   - c["preformatted"] = true
572   -
573   - files = [(@need_tar ? "#{pkg}.tgz" : nil),
574   - (@need_zip ? "#{pkg}.zip" : nil),
575   - "#{pkg}.gem"].compact
576   -
577   - puts "Releasing #{name} v. #{version}"
578   - rf.add_release rubyforge_name, name, version, *files
579   - end
580   -
581   - ############################################################
582   - # Doco
583   -
584   - Rake::RDocTask.new(:docs) do |rd|
585   - rd.main = self.readme
586   - rd.options << '-d' if RUBY_PLATFORM !~ /win32/ and `which dot` =~ /\/dot/ and not ENV['NODOT']
587   - rd.rdoc_dir = 'doc'
588   - files = spec.files.grep(rdoc_pattern)
589   - files -= ['Manifest.txt']
590   - rd.rdoc_files.push(*files)
591   -
592   - title = "#{name}-#{version} Documentation"
593   - title = "#{rubyforge_name}'s " + title if rubyforge_name != name
594   -
595   - rd.options << "-t #{title}"
596   - end
597   -
598   - desc 'Generate ri locally for testing.'
599   - task :ridocs => :clean do
600   - sh %q{ rdoc --ri -o ri . }
601   - end
602   -
603   - desc 'Publish RDoc to RubyForge.'
604   - task :publish_docs => [:clean, :docs] do
605   - config = YAML.load(File.read(File.expand_path("~/.rubyforge/user-config.yml")))
606   - host = "#{config["username"]}@rubyforge.org"
607   -
608   - remote_dir = "/var/www/gforge-projects/#{rubyforge_name}/#{remote_rdoc_dir}"
609   - local_dir = 'doc'
610   -
611   - sh %{rsync #{rsync_args} #{local_dir}/ #{host}:#{remote_dir}}
612   - end
613   -
614   - # no doco for this one
615   - task :publish_on_announce do
616   - with_config do |config, _|
617   - Rake::Task['publish_docs'].invoke if config["publish_on_announce"]
618   - end
619   - end
620   -
621   - ############################################################
622   - # Misc/Maintenance:
623   -
624   - desc 'Run ZenTest against the package.'
625   - task :audit do
626   - libs = %w(lib test ext).join(File::PATH_SEPARATOR)
627   - sh "zentest -I=#{libs} #{spec.files.grep(/^(lib|test)/).join(' ')}"
628   - end
629   -
630   - desc 'Clean up all the extras.'
631   - task :clean => [ :clobber_docs, :clobber_package ] do
632   - clean_globs.each do |pattern|
633   - files = Dir[pattern]
634   - rm_rf files, :verbose => true unless files.empty?
635   - end
636   - end
637   -
638   - desc 'Create a fresh ~/.hoerc file.'
639   - task :config_hoe do
640   - with_config do |config, path|
641   - default_config = {
642   - "exclude" => /tmp$|CVS|\.svn/,
643   - "publish_on_announce" => false,
644   - "signing_key_file" => "~/.gem/gem-private_key.pem",
645   - "signing_cert_file" => "~/.gem/gem-public_cert.pem",
646   - "blogs" => [ {
647   - "user" => "user",
648   - "url" => "url",
649   - "extra_headers" => {
650   - "mt_convert_breaks" => "markdown"
651   - },
652   - "blog_id" => "blog_id",
653   - "password"=>"password",
654   - } ],
655   - }
656   - File.open(path, "w") do |f|
657   - YAML.dump(default_config.merge(config), f)
658   - end
659   -
660   - editor = ENV['EDITOR'] || 'vi'
661   - system "#{editor} #{path}" if ENV['SHOW_EDITOR'] != 'no'
662   - end
663   - end
664   -
665   - desc 'Generate email announcement file.'
666   - task :email do
667   - require 'rubyforge'
668   - subject, title, body, urls = announcement
669   -
670   - File.open("email.txt", "w") do |mail|
671   - mail.puts "Subject: [ANN] #{subject}"
672   - mail.puts
673   - mail.puts title
674   - mail.puts
675   - mail.puts urls
676   - mail.puts
677   - mail.puts body
678   - mail.puts
679   - mail.puts urls
680   - end
681   - puts "Created email.txt"
682   - end
683   -
684   - desc 'Post announcement to blog.'
685   - task :post_blog do
686   - require 'xmlrpc/client'
687   -
688   - with_config do |config, path|
689   - break unless config['blogs']
690   -
691   - subject, title, body, urls = announcement
692   - body += "\n\n#{urls}"
693   -
694   - config['blogs'].each do |site|
695   - server = XMLRPC::Client.new2(site['url'])
696   - content = site['extra_headers'].merge(:title => title,
697   - :description => body)
698   - result = server.call('metaWeblog.newPost',
699   - site['blog_id'],
700   - site['user'],
701   - site['password'],
702   - content,
703   - true)
704   - end
705   - end
706   - end
707   -
708   - desc 'Post announcement to rubyforge.'
709   - task :post_news do
710   - require 'rubyforge'
711   - subject, title, body, urls = announcement
712   -
713   - rf = RubyForge.new.configure
714   - rf.login
715   - rf.post_news(rubyforge_name, subject, "#{title}\n\n#{body}")
716   - puts "Posted to rubyforge"
717   - end
718   -
719   - desc 'Create news email file and post to rubyforge.'
720   - task :announce => [:email, :post_news, :post_blog, :publish_on_announce ]
721   -
722   - desc 'Verify the manifest.'
723   - task :check_manifest => :clean do
724   - f = "Manifest.tmp"
725   - require 'find'
726   - files = []
727   - with_config do |config, _|
728   - exclusions = config["exclude"]
729   - abort "exclude entry missing from .hoerc. Aborting." if exclusions.nil?
730   - Find.find '.' do |path|
731   - next unless File.file? path
732   - next if path =~ exclusions
733   - files << path[2..-1]
734   - end
735   - files = files.sort.join "\n"
736   - File.open f, 'w' do |fp| fp.puts files end
737   - system "#{DIFF} -du Manifest.txt #{f}"
738   - rm f
739   - end
740   - end
741   -
742   - desc 'Generate a key for signing your gems.'
743   - task :generate_key do
744   - email = spec.email
745   - abort "No email in your gemspec" if email.nil? or email.empty?
746   -
747   - key_file = with_config { |config, _| config['signing_key_file'] }
748   - cert_file = with_config { |config, _| config['signing_cert_file'] }
749   -
750   - if key_file.nil? or cert_file.nil? then
751   - ENV['SHOW_EDITOR'] ||= 'no'
752   - Rake::Task['config_hoe'].invoke
753   -
754   - key_file = with_config { |config, _| config['signing_key_file'] }
755   - cert_file = with_config { |config, _| config['signing_cert_file'] }
756   - end
757   -
758   - key_file = File.expand_path key_file
759   - cert_file = File.expand_path cert_file
760   -
761   - unless File.exist? key_file or File.exist? cert_file then
762   - sh "gem cert --build #{email}"
763   - mv "gem-private_key.pem", key_file, :verbose => true
764   - mv "gem-public_cert.pem", cert_file, :verbose => true
765   -
766   - puts "Installed key and certificate."
767   -
768   - rf = RubyForge.new.configure
769   - rf.login
770   -
771   - cert_package = "#{rubyforge_name}-certificates"
772   -
773   - begin
774   - rf.lookup 'package', cert_package
775   - rescue
776   - rf.create_package rubyforge_name, cert_package
777   - end
778   -
779   - begin
780   - rf.lookup('release', cert_package)['certificates']
781   - rf.add_file rubyforge_name, cert_package, 'certificates', cert_file
782   - rescue
783   - rf.add_release rubyforge_name, cert_package, 'certificates', cert_file
784   - end
785   -
786   - puts "Uploaded certificate to release \"certificates\" in package #{cert_package}"
787   - else
788   - puts "Keys already exist."
789   - end
790   - end
791   -
792   - end # end define
793   -
794   - def announcement # :nodoc:
795   - changes = self.changes.rdoc_to_markdown
796   -
797   - subject = "#{name} #{version} Released"
798   - title = "#{name} version #{version} has been released!"
799   - body = "#{description}\n\nChanges:\n\n#{changes}".rdoc_to_markdown
800   - urls = Array(url).map { |s| "* <#{s.strip.rdoc_to_markdown}>" }.join("\n")
801   -
802   - return subject, title, body, urls
803   - end
804   -
805   - def run_tests(multi=false) # :nodoc:
806   - msg = multi ? :sh : :ruby
807   - cmd = if test ?f, 'test/test_all.rb' then
808   - "#{RUBY_FLAGS} test/test_all.rb #{FILTER}"
809   - else
810   - tests = ['test/unit'] + test_globs.map { |g| Dir.glob(g) }.flatten
811   - tests.map! {|f| %Q(require "#{f}")}
812   - "#{RUBY_FLAGS} -e '#{tests.join("; ")}' #{FILTER}"
813   - end
814   -
815   - excludes = multiruby_skip.join(":")
816   - ENV['EXCLUDED_VERSIONS'] = excludes
817   - cmd = "multiruby #{cmd}" if multi
818   -
819   - send msg, cmd
820   - end
821   -
822   - ##
823   - # Reads a file at +path+ and spits out an array of the +paragraphs+ specified.
824   - #
825   - # changes = p.paragraphs_of('History.txt', 0..1).join("\n\n")
826   - # summary, *description = p.paragraphs_of('README.txt', 3, 3..8)
827   -
828   - def paragraphs_of(path, *paragraphs)
829   - File.read(path).delete("\r").split(/\n\n+/).values_at(*paragraphs)
830   - end
831   -end
832   -
833   -# :enddoc:
834   -
835   -class ::Rake::SshDirPublisher # :nodoc:
836   - attr_reader :host, :remote_dir, :local_dir
837   -end
838   -
839   -class String
840   - def rdoc_to_markdown
841   - self.gsub(/^mailto:/, '').gsub(/^(=+)/) { "#" * $1.size }
842   - end
843   -end
844   -
845   -if $0 == __FILE__ then
846   - out = `rake -T | egrep -v "redocs|repackage|clobber|trunk"`
847   - puts out.gsub(/\#/, '-').gsub(/^rake /, '# * ')
848   -end

0 comments on commit 3c89db0

Please sign in to comment.
Something went wrong with that request. Please try again.