class MkSpec
Attributes
config[R]
Public Class Methods
main()
click to toggle source
# File lib/mspec/commands/mkspec.rb, line 149 def self.main ENV['MSPEC_RUNNER'] = '1' script = new script.options script.run end
new()
click to toggle source
# File lib/mspec/commands/mkspec.rb, line 15 def initialize @config = { :constants => [], :requires => [], :base => "core", :version => nil } @map = NameMap.new true end
Public Instance Methods
create_directory(mod)
click to toggle source
# File lib/mspec/commands/mkspec.rb, line 59 def create_directory(mod) subdir = @map.dir_name mod, config[:base] if File.exist? subdir unless File.directory? subdir puts "#{subdir} already exists and is not a directory." return nil end else FileUtils.mkdir_p subdir end subdir end
create_file(dir, mod, meth, name)
click to toggle source
# File lib/mspec/commands/mkspec.rb, line 116 def create_file(dir, mod, meth, name) file = File.join dir, @map.file_name(meth, mod) exists = File.exist? file write_requires dir, file unless exists write_spec file, name, exists end
options(argv=ARGV)
click to toggle source
# File lib/mspec/commands/mkspec.rb, line 25 def options(argv=ARGV) options = MSpecOptions.new "mkspec [options]", 32 options.on("-c", "--constant", "CONSTANT", "Class or Module to generate spec stubs for") do |name| config[:constants] << name end options.on("-b", "--base", "DIR", "Directory to generate specs into") do |directory| config[:base] = File.expand_path directory end options.on("-r", "--require", "LIBRARY", "A library to require") do |file| config[:requires] << file end options.on("-V", "--version-guard", "VERSION", "Specify version for ruby_version_is guards") do |version| config[:version] = version end options.version MSpec::VERSION options.help options.doc "\n How might this work in the real world?\n" options.doc " 1. To create spec stubs for every class or module in Object\n" options.doc " $ mkspec\n" options.doc " 2. To create spec stubs for Fixnum\n" options.doc " $ mkspec -c Fixnum\n" options.doc " 3. To create spec stubs for Complex in 'superspec/complex'\n" options.doc " $ mkspec -c Complex -r complex -b superspec" options.doc "" options.parse argv end
ruby()
click to toggle source
Determine and return the path of the ruby executable.
# File lib/mspec/commands/mkspec.rb, line 140 def ruby ruby = File.join(RbConfig::CONFIG['bindir'], RbConfig::CONFIG['ruby_install_name']) ruby.gsub! File::SEPARATOR, File::ALT_SEPARATOR if File::ALT_SEPARATOR return ruby end
run()
click to toggle source
# File lib/mspec/commands/mkspec.rb, line 124 def run config[:requires].each { |lib| require lib } constants = config[:constants] constants = Object.constants if constants.empty? @map.map({}, constants).each do |mod, methods| name = mod.chop next unless dir = create_directory(name) methods.each { |method| create_file dir, name, method, mod + method } end end
write_requires(dir, file)
click to toggle source
# File lib/mspec/commands/mkspec.rb, line 74 def write_requires(dir, file) /\A#{Regexp.escape config[:base]}\/?(.*)/ =~ dir parents = '../' * ($1.split('/').length + 1) File.open file, 'w' do |f| f.puts "require File.expand_path('../#{parents}spec_helper', __FILE__)" config[:requires].each do |lib| f.puts "require '#{lib}'" end end end
write_spec(file, meth, exists)
click to toggle source
# File lib/mspec/commands/mkspec.rb, line 97 def write_spec(file, meth, exists) if exists out = %x`#{ruby} #{MSPEC_HOME}/bin/mspec-run --dry-run -fs -e '#{meth}' #{file}` return if out =~ /#{Regexp.escape meth}/ end File.open file, 'a' do |f| write_version(f) do |indent| f.puts <<-EOS #{indent}describe "#{meth}" do #{indent} it "needs to be reviewed for spec completeness" #{indent}end EOS end end puts file end
write_version(f) { |" "| ... }
click to toggle source
# File lib/mspec/commands/mkspec.rb, line 86 def write_version(f) f.puts "" if version = config[:version] f.puts "ruby_version_is #{version} do" yield " " f.puts "end" else yield "" end end