aboutsummaryrefslogtreecommitdiffstats
path: root/railties/lib/vendor/thor-0.11.3/lib/thor/tasks/spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'railties/lib/vendor/thor-0.11.3/lib/thor/tasks/spec.rb')
-rw-r--r--railties/lib/vendor/thor-0.11.3/lib/thor/tasks/spec.rb70
1 files changed, 70 insertions, 0 deletions
diff --git a/railties/lib/vendor/thor-0.11.3/lib/thor/tasks/spec.rb b/railties/lib/vendor/thor-0.11.3/lib/thor/tasks/spec.rb
new file mode 100644
index 0000000000..c7d00968e8
--- /dev/null
+++ b/railties/lib/vendor/thor-0.11.3/lib/thor/tasks/spec.rb
@@ -0,0 +1,70 @@
+require "fileutils"
+
+class Thor
+ # Creates a spec task.
+ #
+ # ==== Parameters
+ # files<Array> - Array of files to spec
+ #
+ # ==== Options
+ # :name - The name of the task. It can be rcov or spec. Spec is the default.
+ # :rcov - A hash with rcov specific options.
+ # :rcov_dir - Where rcov reports should be printed.
+ # :verbose - Sets the default value for verbose, although it can be specified
+ # also through the command line.
+ #
+ # All other options are added to rspec.
+ #
+ def self.spec_task(files, options={})
+ name = (options.delete(:name) || 'spec').to_s
+ tasks[name] = Thor::SpecTask.new(name, files, options)
+ end
+
+ class SpecTask < Task
+ attr_accessor :name, :files, :rcov_dir, :rcov_config, :spec_config
+
+ def initialize(name, files, config={})
+ options = { :verbose => Thor::Option.parse(:verbose, config.delete(:verbose) || false) }
+ super(name, "#{name.capitalize} task", name, options)
+
+ @name = name
+ @files = files.map{ |f| %["#{f}"] }.join(" ")
+ @rcov_dir = config.delete(:rdoc_dir) || File.join(Dir.pwd, 'coverage')
+ @rcov_config = config.delete(:rcov) || {}
+ @spec_config = { :format => 'specdoc', :color => true }.merge(config)
+ end
+
+ def run(instance, args=[])
+ rcov_opts = Thor::Options.to_switches(rcov_config)
+ spec_opts = Thor::Options.to_switches(spec_config)
+
+ require 'rbconfig'
+ cmd = RbConfig::CONFIG['ruby_install_name'] << " "
+
+ if rcov?
+ FileUtils.rm_rf(rcov_dir)
+ cmd << "-S #{where('rcov')} -o #{rcov_dir} #{rcov_opts} "
+ end
+
+ cmd << [where('spec'), rcov? ? " -- " : nil, files, spec_opts].join(" ")
+
+ puts cmd if instance.options.verbose?
+ system(cmd)
+ exit($?.exitstatus)
+ end
+
+ private
+
+ def rcov?
+ name == "rcov"
+ end
+
+ def where(file)
+ ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
+ file_with_path = File.join(path, file)
+ next unless File.exist?(file_with_path) && File.executable?(file_with_path)
+ return File.expand_path(file_with_path)
+ end
+ end
+ end
+end