123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- require 'rubygems'
- Gem.load_yaml
- require 'rdoc'
- require 'gauntlet'
- require 'fileutils'
- ##
- # Allows for testing of RDoc against every gem
- class RDoc::Gauntlet < Gauntlet
- def initialize # :nodoc:
- super
- @args = nil
- @type = nil
- end
- ##
- # Runs an RDoc generator for gem +name+
- def run name
- return if self.data.key? name
- dir = File.expand_path "~/.gauntlet/data/#{@type}/#{name}"
- FileUtils.rm_rf dir if File.exist? dir
- yaml = File.read 'gemspec'
- begin
- spec = Gem::Specification.from_yaml yaml
- rescue Psych::SyntaxError
- puts "bad spec #{name}"
- self.data[name] = false
- return
- end
- args = @args.dup
- args << '--op' << dir
- args.push(*spec.rdoc_options)
- args << spec.require_paths
- args << spec.extra_rdoc_files
- args = args.flatten.map { |a| a.to_s }
- args.delete '--quiet'
- puts "#{name} - rdoc #{args.join ' '}"
- self.dirty = true
- r = RDoc::RDoc.new
- begin
- r.document args
- self.data[name] = true
- puts 'passed'
- FileUtils.rm_rf dir
- rescue Interrupt, StandardError, RDoc::Error, SystemStackError => e
- puts "failed - (#{e.class}) #{e.message}"
- self.data[name] = false
- end
- rescue Gem::Exception
- puts "bad gem #{name}"
- ensure
- puts
- end
- ##
- # Runs the gauntlet with the given +type+ (rdoc or ri) and +filter+ for
- # which gems to run
- def run_the_gauntlet type = 'rdoc', filter = nil
- @type = type || 'rdoc'
- @args = type == 'rdoc' ? [] : %w[--ri]
- @data_file = "#{DATADIR}/#{@type}-data.yml"
- super filter
- end
- end
- type = ARGV.shift
- filter = ARGV.shift
- filter = /#{filter}/ if filter
- RDoc::Gauntlet.new.run_the_gauntlet type, filter
|