forked from rspec/rspec-rails
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Rakefile
159 lines (139 loc) · 4.38 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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
require 'pathname'
ENV["BUNDLE_GEMFILE"] ||= begin
version = if File.exist?("./.gemfile")
File.read("./.gemfile").chomp
else
"rails-3.0.7"
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
rescue
if ENV["CI"]
sh "bundle install"
Bundler.setup
else
raise "You need to install a bundle first. Try 'thor gemfile:use 3.0.7'"
end
end
Bundler::GemHelper.install_tasks
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 'rake'
require 'yaml'
require 'rspec'
require 'rspec/core/rake_task'
begin
require 'cucumber/rake/task'
Cucumber::Rake::Task.new(:cucumber)
namespace :cucumber do
desc "Run cucumber features using rcov"
Cucumber::Rake::Task.new :rcov => :cleanup_rcov_files 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
end
rescue LoadError
puts "unable to load cucumber, some tasks unavailable"
task :cucumber do
# no-op
end
end
task :cleanup_rcov_files do
rm_rf 'coverage.data'
end
desc "Run all examples"
RSpec::Core::RakeTask.new(:spec) do |t|
t.rspec_opts = %w[--color]
end
namespace :spec do
desc "Run all examples using rcov"
RSpec::Core::RakeTask.new :rcov => :cleanup_rcov_files 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
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_filename = "config/application.rb"
application_file = File.read(application_filename)
sh "rm #{application_filename}"
puts "rewrite #{application_filename} with config.assets.enabled = false"
File.open(application_filename, "w") do |f|
f.write application_file.gsub("config.assets.enabled = true","config.assets.enabled = false")
end
"config/initializers/wrap_parameters.rb".tap do |f|
sh "rm #{f}" if test ?f, f
end
end
end
end
end
desc "generate a bunch of stuff with generators"
task :stuff do
in_example_app "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 "rake db:migrate"
end
namespace :test do
task :prepare do
in_example_app "rake db:test:prepare"
end
end
end
desc "run a variety of specs against the generated app"
task :smoke do
in_example_app "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 "relish push rspec/rspec-rails:#{args[:version]}"
end
task :default => [:spec, "clobber:app", "generate:app", "generate:stuff", :smoke, :cucumber]