class RSpec::Core::RakeTask
def blank
def blank lambda {|s| s.nil? || s == ""} end
def deprecate deprecated, opts = {}
def deprecate deprecated, opts = {} # unless RSpec is loaded, deprecate won't work (simply requiring the # deprecate file isn't enough) so this is a check for "is rspec already # loaded?" "ok use the main deprecate hook" otherwise "simple fallback" # Note that we don't need rspec to be loaded for the rake task to work if RSpec.respond_to?(:deprecate) RSpec.deprecate deprecated, opts else warn "DEPRECATION: #{deprecated} is deprecated." end end
def files_to_run
def files_to_run if ENV['SPEC'] FileList[ ENV['SPEC'] ].sort else FileList[ pattern ].sort.map { |f| shellescape(f) } end end
def gemfile=(*)
def gemfile=(*) deprecate("RSpec::Core::RakeTask#gemfile=", :replacement => 'ENV["BUNDLE_GEMFILE"]') end
def initialize(*args, &task_block)
def initialize(*args, &task_block) setup_ivars(args) desc "Run RSpec code examples" unless ::Rake.application.last_comment task name, *args do |_, task_args| RakeFileUtils.send(:verbose, verbose) do task_block.call(*[self, task_args].slice(0, task_block.arity)) if task_block run_task verbose end end end
def rcov
default:
required that `require 'rspec/autorun'` appears in `spec_helper`.rb
Due to the many ways `rcov` can run, if this option is enabled, it is
Use rcov for code coverage?
def rcov deprecate("RSpec::Core::RakeTask#rcov") @rcov end
def rcov=(true_or_false)
def rcov=(true_or_false) deprecate("RSpec::Core::RakeTask#rcov=") @rcov = true_or_false end
def rcov_opts
default:
Command line options to pass to rcov.
def rcov_opts deprecate("RSpec::Core::RakeTask#rcov_opts") @rcov_opts end
def rcov_opts=(opts)
def rcov_opts=(opts) deprecate("RSpec::Core::RakeTask#rcov_opts=") @rcov_opts = opts end
def rcov_path
default:
Path to rcov.
def rcov_path deprecate("RSpec::Core::RakeTask#rcov_path") @rcov_path end
def rcov_path=(path)
def rcov_path=(path) deprecate("RSpec::Core::RakeTask#rcov_path=") @rcov_path = path end
def run_task(verbose)
def run_task(verbose) command = spec_command begin puts command if verbose success = system(command) rescue puts failure_message if failure_message end abort("#{command} failed") if fail_on_error unless success end
def runner
def runner @rcov ? @rcov_path : rspec_path end
def setup_ivars(args)
def setup_ivars(args) @name = args.shift || :spec @rcov_opts, @ruby_opts, @rspec_opts = nil, nil, nil @warning, @rcov = false, false @verbose, @fail_on_error = true, true @rcov_path = 'rcov' @rspec_path = 'rspec' @pattern = './spec{,/*/**}/*_spec.rb' end
def shellescape(string)
def shellescape(string) string.shellescape end
def shellescape(string)
def shellescape(string) string.gsub(/"/, '\"').gsub(/'/, "\\\\'") end
def skip_bundler=(*)
def skip_bundler=(*) deprecate("RSpec::Core::RakeTask#skip_bundler=") end
def spec_command
def spec_command cmd_parts = [] cmd_parts << RUBY cmd_parts << ruby_opts cmd_parts << "-w" if @warning cmd_parts << "-S" << runner cmd_parts << "-Ispec:lib" << @rcov_opts if @rcov cmd_parts << files_to_run cmd_parts << "--" if @rcov && rspec_opts cmd_parts << rspec_opts cmd_parts.flatten.reject(&blank).join(" ") end
def spec_opts=(opts)
def spec_opts=(opts) deprecate('RSpec::Core::RakeTask#spec_opts=', :replacement => 'rspec_opts=') @rspec_opts = opts end
def warning=(true_or_false)
def warning=(true_or_false) deprecate("RSpec::Core::RakeTask#warning=", :replacement => 'ruby_opts="-w"') @warning = true_or_false end