forked from rspec/rspec-rails
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Rakefile
144 lines (124 loc) · 4.05 KB
/
Rakefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
require 'pathname'
ENV["BUNDLE_GEMFILE"] ||= begin
version = if File.exist?("./.gemfile")
File.read("./.gemfile").chomp
else
"rails-3.1.0"
end
File.expand_path("../gemfiles/#{version}", __FILE__)
end
puts "Using gemfile: #{ENV["BUNDLE_GEMFILE"].gsub(Pathname.new(__FILE__).dirname.to_s,'').sub(/^\//,'')}"
require "bundler"
begin
Bundler.setup
Bundler::GemHelper.install_tasks
rescue
raise "You need to install a bundle first. Try 'thor gemfile:use 3.1.0'"
end
task :build => :raise_if_psych_is_defined
task :raise_if_psych_is_defined do
if defined?(Psych)
raise <<-MSG
===============================================================================
Gems compiled in Ruby environments with Psych loaded are incompatible with Ruby
environments that don't have Psych loaded. Try building this gem in Ruby 1.8.7
instead.
===============================================================================
MSG
end
end
require 'yaml'
require 'rspec'
require 'rspec/core/rake_task'
require 'cucumber/rake/task'
desc "Run all examples"
RSpec::Core::RakeTask.new(:spec) do |t|
t.rspec_opts = %w[--color]
end
Cucumber::Rake::Task.new(:cucumber)
if RUBY_VERSION.to_f == 1.8
namespace :rcov do
task :clean do
rm_rf 'coverage.data'
end
desc "Run cucumber features using rcov"
Cucumber::Rake::Task.new :cucumber do |t|
t.cucumber_opts = %w{--format progress}
t.rcov = true
t.rcov_opts = %[-Ilib -Ispec --exclude "gems/*,features"]
t.rcov_opts << %[--text-report --sort coverage --aggregate coverage.data]
end
desc "Run all examples using rcov"
RSpec::Core::RakeTask.new :spec do |t|
t.rcov = true
t.rcov_opts = %[-Ilib -Ispec --exclude "gems/*,features"]
t.rcov_opts << %[--text-report --sort coverage --no-html --aggregate coverage.data]
end
end
task :rcov => ["rcov:clean", "rcov:spec", "rcov:cucumber"]
end
namespace :generate do
desc "generate a fresh app with rspec installed"
task :app do |t|
unless File.directory?('./tmp/example_app')
sh "rails new ./tmp/example_app --skip-javascript --skip-gemfile --skip-git"
bindir = File.expand_path("gemfiles/bin")
if test ?d, bindir
Dir.chdir("./tmp/example_app") do
sh "rm -rf test"
sh "ln -s #{bindir}"
application_file = File.read("config/application.rb")
sh "rm config/application.rb"
File.open("config/application.rb","w") do |f|
f.write application_file.gsub("config.assets.enabled = true","config.assets.enabled = false")
end
end
end
end
end
desc "generate a bunch of stuff with generators"
task :stuff do
in_example_app "bin/rake rails:template LOCATION='../../templates/generate_stuff.rb'"
end
end
def in_example_app(command)
Dir.chdir("./tmp/example_app/") do
Bundler.with_clean_env do
sh command
end
end
end
namespace :db do
task :migrate do
in_example_app "bin/rake db:migrate"
end
namespace :test do
task :prepare do
in_example_app "bin/rake db:test:prepare"
end
end
end
desc "run a variety of specs against the generated app"
task :smoke do
in_example_app "bin/rake rails:template --trace LOCATION='../../templates/run_specs.rb'"
end
desc 'clobber generated files'
task :clobber do
rm_rf "pkg"
rm_rf "tmp"
rm "Gemfile.lock" if File.exist?("Gemfile.lock")
end
namespace :clobber do
desc "clobber the generated app"
task :app do
rm_rf "tmp/example_app"
end
end
desc "Push docs/cukes to relishapp using the relish-client-gem"
task :relish, :version do |t, args|
raise "rake relish[VERSION]" unless args[:version]
sh "cp Changelog.md features/Changelog.md"
sh "relish push rspec/rspec-rails:#{args[:version]}"
sh "rm features/Changelog.md"
end
task :default => [:spec, "clobber:app", "generate:app", "generate:stuff", :smoke, :cucumber]