forked from rails-on-services/apartment
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Rakefile
153 lines (130 loc) · 4.22 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
# frozen_string_literal: true
begin
require 'bundler'
rescue StandardError
'You must `gem install bundler` and `bundle install` to run rake tasks'
end
Bundler.setup
Bundler::GemHelper.install_tasks
require 'appraisal'
require 'rspec'
require 'rspec/core/rake_task'
RSpec::Core::RakeTask.new(spec: %w[db:copy_credentials db:test:prepare]) do |spec|
spec.pattern = 'spec/**/*_spec.rb'
# spec.rspec_opts = '--order rand:47078'
end
namespace :spec do
%i[tasks unit adapters integration].each do |type|
RSpec::Core::RakeTask.new(type => :spec) do |spec|
spec.pattern = "spec/#{type}/**/*_spec.rb"
end
end
end
task :console do
require 'pry'
require 'apartment'
ARGV.clear
Pry.start
end
task default: :spec
namespace :db do
namespace :test do
task prepare: %w[postgres:drop_db postgres:build_db mysql:drop_db mysql:build_db]
end
desc "copy sample database credential files over if real files don't exist"
task :copy_credentials do
require 'fileutils'
apartment_db_file = 'spec/config/database.yml'
rails_db_file = 'spec/dummy/config/database.yml'
unless File.exist?(apartment_db_file)
FileUtils.copy("#{apartment_db_file}.sample", apartment_db_file, verbose: true)
end
FileUtils.copy("#{rails_db_file}.sample", rails_db_file, verbose: true) unless File.exist?(rails_db_file)
end
end
namespace :postgres do
require 'active_record'
require File.join(File.dirname(__FILE__), 'spec', 'support', 'config').to_s
desc 'Build the PostgreSQL test databases'
task :build_db do
params = []
params << '-E UTF8'
params << pg_config['database']
params << "-U#{pg_config['username']}"
params << "-h#{pg_config['host']}" if pg_config['host']
params << "-p#{pg_config['port']}" if pg_config['port']
begin
`createdb #{params.join(' ')}`
rescue StandardError
'test db already exists'
end
ActiveRecord::Base.establish_connection pg_config
migrate
end
desc 'drop the PostgreSQL test database'
task :drop_db do
puts "dropping database #{pg_config['database']}"
params = []
params << pg_config['database']
params << "-U#{pg_config['username']}"
params << "-h#{pg_config['host']}" if pg_config['host']
params << "-p#{pg_config['port']}" if pg_config['port']
`dropdb #{params.join(' ')}`
end
end
namespace :mysql do
require 'active_record'
require File.join(File.dirname(__FILE__), 'spec', 'support', 'config').to_s
desc 'Build the MySQL test databases'
task :build_db do
params = []
params << "-h #{my_config['host']}" if my_config['host']
params << "-u #{my_config['username']}" if my_config['username']
params << "-p#{my_config['password']}" if my_config['password']
params << "--port #{my_config['port']}" if my_config['port']
begin
`mysqladmin #{params.join(' ')} create #{my_config['database']}`
rescue StandardError
'test db already exists'
end
ActiveRecord::Base.establish_connection my_config
migrate
end
desc 'drop the MySQL test database'
task :drop_db do
puts "dropping database #{my_config['database']}"
params = []
params << "-h #{my_config['host']}" if my_config['host']
params << "-u #{my_config['username']}" if my_config['username']
params << "-p#{my_config['password']}" if my_config['password']
params << "--port #{my_config['port']}" if my_config['port']
`mysqladmin #{params.join(' ')} drop #{my_config['database']} --force`
end
end
# TODO: clean this up
def config
Apartment::Test.config['connections']
end
def pg_config
config['postgresql']
end
def my_config
config['mysql']
end
def activerecord_below_5_2?
ActiveRecord.version.release < Gem::Version.new('5.2.0')
end
def activerecord_below_6_0?
ActiveRecord.version.release < Gem::Version.new('6.0.0')
end
def migrate
if activerecord_below_5_2?
ActiveRecord::Migrator.migrate('spec/dummy/db/migrate')
elsif activerecord_below_6_0?
ActiveRecord::MigrationContext.new('spec/dummy/db/migrate').migrate
else
# TODO: Figure out if there is any other possibility that can/should be
# passed here as the second argument for the migration context
ActiveRecord::MigrationContext.new('spec/dummy/db/migrate', ActiveRecord::SchemaMigration).migrate
end
end