-
Notifications
You must be signed in to change notification settings - Fork 0
/
template.rb
102 lines (89 loc) · 2.92 KB
/
template.rb
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
# add development and testing gems
gem_group :test, :development do
gem 'rspec-rails'
gem 'capybara'
gem 'selenium-webdriver'
gem 'better_errors'
gem 'binding_of_caller'
gem 'terminal-notifier-guard'
gem 'factory_girl_rails'
gem 'simplecov'
gem 'database_cleaner'
gem 'guard', '>=2.1.0'
gem 'guard-rspec'
end
# setup RSpec: rails g rspec:install
generate(:"rspec:install")
# edit spec/spec_helper.rb
File.open("spec/spec_helper.rb", "r+") do |f|
out = ""
f.each do |line|
if line =~ /require 'rspec\/autorun'/
# add SimpleCov
out << line
out << <<-CODE.strip_heredoc
require 'simplecov'
SimpleCov.start 'rails'
CODE
elsif line =~ /config\.fixture_path/
# comment out fixtures
out << " ##{line[1..-1]}"
elsif line =~ /config\.use_transactional_fixtures/
# set transactional fixtures to false
out << line.sub("true", "false")
elsif line =~ /RSpec\.configure do/
# add Database Cleaner
out << line
out << <<-CODE.gsub(/^ {6}/, '')
config.before(:suite) do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.clean_with(:truncation)
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
CODE
else
out << line
end
end
f.pos = 0
f.print out
f.truncate(f.pos)
end
# make spec/features directory
run('mkdir -p spec/features')
# create feature_helper.rb
file 'spec/feature_helper.rb', <<-CODE.strip_heredoc
require 'spec_helper'
require 'capybara/rails'
CODE
# setup Guardfile
file 'Guardfile', <<-CODE.gsub(/^ {2}/, '')
# A sample Guardfile
# More info at https://github.com/guard/guard#readme
guard 'rails' do
watch('Gemfile.lock')
watch(%r{^(config|lib)/.*})
end
guard :rspec do
watch(%r{^spec/.+_spec\.rb$})
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
watch('spec/spec_helper.rb') { "spec" }
# Rails example
watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
watch(%r{^app/(.*)(\.erb|\.haml|\.slim)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
watch('config/routes.rb') { "spec/routing" }
watch('app/controllers/application_controller.rb') { "spec/controllers" }
# Capybara features specs
watch(%r{^app/views/(.+)/.*\.(erb|haml|slim)$}) { |m| "spec/features/#{m[1]}_spec.rb" }
# Turnip features and steps
watch(%r{^spec/acceptance/(.+)\.feature$})
watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
end
CODE